@lingui/cli
Advanced tools
Comparing version 2.1.2 to 2.2.0-16
@@ -7,2 +7,6 @@ "use strict"; | ||
var _keys = require("babel-runtime/core-js/object/keys"); | ||
var _keys2 = _interopRequireDefault(_keys); | ||
var _extends2 = require("babel-runtime/helpers/extends"); | ||
@@ -15,2 +19,3 @@ | ||
exports.cleanObsolete = cleanObsolete; | ||
exports.order = order; | ||
@@ -64,3 +69,3 @@ var _fs = require("fs"); | ||
if (!ext.match(srcFilename)) return false; | ||
ext.extract(srcFilename, targetPath); | ||
ext.extract(srcFilename, targetPath, options.babelOptions); | ||
return true; | ||
@@ -101,2 +106,15 @@ }); | ||
}), catalogs); | ||
} | ||
function order(catalogs) { | ||
return _ramda2.default.map(orderByMessageId, catalogs); | ||
} | ||
function orderByMessageId(messages) { | ||
var orderedMessages = {}; | ||
(0, _keys2.default)(messages).sort().forEach(function (key) { | ||
orderedMessages[key] = messages[key]; | ||
}); | ||
return orderedMessages; | ||
} |
@@ -7,2 +7,10 @@ "use strict"; | ||
var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); | ||
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); | ||
var _extends2 = require("babel-runtime/helpers/extends"); | ||
var _extends3 = _interopRequireDefault(_extends2); | ||
var _babelCore = require("babel-core"); | ||
@@ -31,3 +39,6 @@ | ||
extract: function extract(filename, localeDir) { | ||
(0, _babelCore.transformFileSync)(filename, { | ||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | ||
var plugins = options.plugins || []; | ||
(0, _babelCore.transformFileSync)(filename, (0, _extends3.default)({}, options, { | ||
plugins: [ | ||
@@ -38,4 +49,4 @@ // Plugins run before presets, so we need to import transform-plugins | ||
// Transform plugins are idempotent, so they can run twice. | ||
_babelPluginTransformJs2.default, _babelPluginTransformReact2.default, [_babelPluginExtractMessages2.default, { localeDir: localeDir }]] | ||
}); | ||
_babelPluginTransformJs2.default, _babelPluginTransformReact2.default, [_babelPluginExtractMessages2.default, { localeDir: localeDir }]].concat((0, _toConsumableArray3.default)(plugins)) | ||
})); | ||
} | ||
@@ -42,0 +53,0 @@ }; |
@@ -7,8 +7,16 @@ "use strict"; | ||
var _babelCore = require("babel-core"); | ||
var _extends2 = require("babel-runtime/helpers/extends"); | ||
var _babelPluginTransformTypescript = require("babel-plugin-transform-typescript"); | ||
var _extends3 = _interopRequireDefault(_extends2); | ||
var _babelPluginTransformTypescript2 = _interopRequireDefault(_babelPluginTransformTypescript); | ||
var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); | ||
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); | ||
var _fs = require("fs"); | ||
var _fs2 = _interopRequireDefault(_fs); | ||
var _babelCore = require("babel-core"); | ||
var _babelPluginTransformJs = require("@lingui/babel-plugin-transform-js"); | ||
@@ -26,2 +34,8 @@ | ||
var _typescript = require("typescript"); | ||
var ts = _interopRequireWildcard(_typescript); | ||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -31,3 +45,2 @@ | ||
var extractor = { | ||
@@ -38,10 +51,34 @@ match: function match(filename) { | ||
extract: function extract(filename, localeDir) { | ||
(0, _babelCore.transformFileSync)(filename, { | ||
plugins: [ | ||
// Plugins run before presets, so we need to import transform-plugins | ||
// here until we have a better way to run extract-messages plugin | ||
// *after* all plugins/presets. | ||
// Transform plugins are idempotent, so they can run twice. | ||
_babelPluginTransformTypescript2.default, _babelPluginTransformJs2.default, _babelPluginTransformReact2.default, [_babelPluginExtractMessages2.default, { localeDir: localeDir }]] | ||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | ||
var content = _fs2.default.readFileSync(filename, "utf8"); | ||
var isTsx = filename.endsWith(".tsx"); | ||
// pass jsx to babel untouched | ||
var jsx = isTsx ? ts.JsxEmit.Preserve : ts.JsxEmit.None; | ||
var stripped = ts.transpileModule(content, { | ||
compilerOptions: { | ||
filename: filename, | ||
module: ts.ModuleKind.ESNext, | ||
target: ts.ScriptTarget.ES2016, // use ES2015 or ES2016 to preserve tagged template literal | ||
allowSyntheticDefaultImports: true, | ||
jsx: jsx, | ||
moduleResolution: ts.ModuleResolutionKind.NodeJs | ||
} | ||
}); | ||
var plugins = [ | ||
// Plugins run before presets, so we need to import transform-plugins | ||
// here until we have a better way to run extract-messages plugin | ||
// *after* all plugins/presets. | ||
// Transform plugins are idempotent, so they can run twice. | ||
_babelPluginTransformJs2.default, _babelPluginTransformReact2.default, [_babelPluginExtractMessages2.default, { localeDir: localeDir }]].concat((0, _toConsumableArray3.default)(options.plugins || [])); | ||
if (isTsx) { | ||
plugins.unshift("syntax-jsx"); | ||
} | ||
(0, _babelCore.transform)(stripped.outputText, (0, _extends3.default)({}, options, { | ||
filename: filename, | ||
plugins: plugins | ||
})); | ||
} | ||
@@ -48,0 +85,0 @@ }; |
@@ -11,2 +11,6 @@ "use strict"; | ||
var _extends2 = require("babel-runtime/helpers/extends"); | ||
var _extends3 = _interopRequireDefault(_extends2); | ||
var _defineProperty2 = require("babel-runtime/helpers/defineProperty"); | ||
@@ -16,6 +20,2 @@ | ||
var _extends2 = require("babel-runtime/helpers/extends"); | ||
var _extends3 = _interopRequireDefault(_extends2); | ||
var _stringify = require("babel-runtime/core-js/json/stringify"); | ||
@@ -81,11 +81,15 @@ | ||
}, | ||
merge: function merge(nextCatalog) { | ||
readAll: function readAll() { | ||
var _this = this; | ||
return _ramda2.default.mergeAll(this.getLocales().map(function (locale) { | ||
return (0, _defineProperty3.default)({}, locale, _this.read(locale)); | ||
})); | ||
}, | ||
merge: function merge(prevCatalogs, nextCatalog) { | ||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | ||
var nextKeys = _ramda2.default.keys(nextCatalog); | ||
return _ramda2.default.mergeAll(this.getLocales().map(function (locale) { | ||
var prevCatalog = _this.read(locale); | ||
if (!prevCatalog) return nextCatalog; | ||
return _ramda2.default.mapObjIndexed(function (prevCatalog, locale) { | ||
var prevKeys = _ramda2.default.keys(prevCatalog); | ||
@@ -100,3 +104,3 @@ | ||
return (0, _extends3.default)({ | ||
translation: config.sourceLocale === locale ? key : "" | ||
translation: config.sourceLocale === locale ? message.defaults || key : "" | ||
}, message); | ||
@@ -107,4 +111,8 @@ }, _ramda2.default.pick(newKeys, nextCatalog)); | ||
var mergedMessages = mergeKeys.map(function (key) { | ||
var updateFromDefaults = config.sourceLocale === locale && (prevCatalog[key].translation === prevCatalog[key].defaults || options.overwrite); | ||
var translation = updateFromDefaults ? nextCatalog[key].defaults : prevCatalog[key].translation; | ||
return (0, _defineProperty3.default)({}, key, (0, _extends3.default)({ | ||
translation: prevCatalog[key].translation | ||
translation: translation | ||
}, _ramda2.default.omit(["obsolete, translation"], nextCatalog[key]))); | ||
@@ -120,5 +128,4 @@ }); | ||
var newCatalog = _ramda2.default.mergeAll([newMessages].concat((0, _toConsumableArray3.default)(mergedMessages), (0, _toConsumableArray3.default)(obsoleteMessages))); | ||
return (0, _defineProperty3.default)({}, locale, newCatalog); | ||
})); | ||
return _ramda2.default.mergeAll([newMessages].concat((0, _toConsumableArray3.default)(mergedMessages), (0, _toConsumableArray3.default)(obsoleteMessages))); | ||
}, prevCatalogs); | ||
}, | ||
@@ -125,0 +132,0 @@ getTranslation: function getTranslation(catalogs, locale, key, _ref4) { |
@@ -23,6 +23,6 @@ "use strict"; | ||
*/ | ||
var localeRe = exports.localeRe = new RegExp(/(([a-z]+)([_-]([a-zA-Z]+))?)(\\|\/)?/); | ||
var localeRe = exports.localeRe = new RegExp(/(([a-z]+)([_-]([a-zA-Z]+))?)[\\/]?/); | ||
function isValid(locale) { | ||
var match = localeRe.exec(locale); | ||
return match && match[0] === locale && // locale has valid format | ||
return match !== null && match[0] === locale && // locale has valid format | ||
match[2] in _makePlural2.default // language is valid (we have plurals for it) | ||
@@ -29,0 +29,0 @@ ; |
@@ -19,2 +19,6 @@ "use strict"; | ||
var _fs = require("fs"); | ||
var _fs2 = _interopRequireDefault(_fs); | ||
var _ramda = require("ramda"); | ||
@@ -61,3 +65,3 @@ | ||
return locales.map(function (locale) { | ||
var _locale$split = locale.split("_"), | ||
var _locale$split = locale.split(/[_-]/), | ||
_locale$split2 = (0, _slicedToArray3.default)(_locale$split, 1), | ||
@@ -102,2 +106,6 @@ language = _locale$split2[0]; | ||
var compiledPath = format.writeCompiled(locale, compiledCatalog); | ||
if (options.typescript) { | ||
var typescriptPath = compiledPath.replace(/\.js$/, "") + ".d.ts"; | ||
_fs2.default.writeFileSync(typescriptPath, "import { Catalog } from '@lingui/core';\ndeclare const catalog: Catalog;\nexport = catalog;\n"); | ||
} | ||
@@ -109,4 +117,5 @@ options.verbose && console.log(_chalk2.default.green(locale + " \u21D2 " + compiledPath)); | ||
if (require.main === module) { | ||
_commander2.default.description("Add compile message catalogs and add language data (plurals) to compiled bundle.").option("--strict", "Disable defaults for missing translations").option("--verbose", "Verbose output").option("--format <format>", "Format of message catalog").on("--help", function () { | ||
_commander2.default.description("Add compile message catalogs and add language data (plurals) to compiled bundle.").option("--strict", "Disable defaults for missing translations").option("--verbose", "Verbose output").option("--format <format>", "Format of message catalog").option("--typescript", "Create Typescript definition for compiled bundle").on("--help", function () { | ||
console.log("\n Examples:\n"); | ||
@@ -128,3 +137,4 @@ console.log(" # Compile translations and use defaults or message IDs for missing translations"); | ||
verbose: _commander2.default.verbose || false, | ||
allowEmpty: !_commander2.default.strict | ||
allowEmpty: !_commander2.default.strict, | ||
typescript: _commander2.default.typescript || false | ||
}); | ||
@@ -131,0 +141,0 @@ |
@@ -59,3 +59,4 @@ "use strict"; | ||
ignore: config.srcPathIgnorePatterns, | ||
verbose: options.verbose | ||
verbose: options.verbose, | ||
babelOptions: options.babelOptions | ||
}); | ||
@@ -69,3 +70,6 @@ options.verbose && console.log(); | ||
var catalog = (0, _extract.collect)(buildDir); | ||
var catalogs = clean(convertFormat.merge(catalog)); | ||
var prevCatalogs = convertFormat.readAll(); | ||
var catalogs = (0, _extract.order)(clean(convertFormat.merge(prevCatalogs, catalog, { | ||
overwrite: options.overwrite | ||
}))); | ||
options.verbose && console.log(); | ||
@@ -104,3 +108,3 @@ | ||
if (require.main === module) { | ||
_commander2.default.option("--clean", "Remove obsolete translations").option("--verbose", "Verbose output").option("--format <format>", "Format of message catalogs").option("--convert-from <format>", "Convert from previous format of message catalogs").parse(process.argv); | ||
_commander2.default.option("--overwrite", "Overwrite translations for source locale").option("--clean", "Remove obsolete translations").option("--babelOptions", "Babel options passed to transform/extract plugins").option("--verbose", "Verbose output").option("--format <format>", "Format of message catalogs").option("--convert-from <format>", "Convert from previous format of message catalogs").parse(process.argv); | ||
@@ -126,2 +130,4 @@ var config = (0, _conf.getConfig)(); | ||
clean: _commander2.default.clean || false, | ||
overwrite: _commander2.default.overwrite || false, | ||
babelOptions: _commander2.default.babelOptions || {}, | ||
prevFormat: _prevFormat | ||
@@ -128,0 +134,0 @@ }); |
{ | ||
"name": "@lingui/cli", | ||
"version": "2.1.2", | ||
"version": "2.2.0-16", | ||
"description": "CLI for working wit message catalogs", | ||
@@ -38,9 +38,9 @@ "keywords": [ | ||
"dependencies": { | ||
"@lingui/babel-plugin-extract-messages": "2.1.2", | ||
"@lingui/babel-plugin-transform-js": "2.1.2", | ||
"@lingui/babel-plugin-transform-react": "2.1.2", | ||
"@lingui/conf": "2.1.2", | ||
"@lingui/babel-plugin-extract-messages": "2.2.0-16", | ||
"@lingui/babel-plugin-transform-js": "2.2.0-16", | ||
"@lingui/babel-plugin-transform-react": "2.2.0-16", | ||
"@lingui/conf": "2.2.0-16", | ||
"babel-core": "^6.26.3", | ||
"babel-generator": "^6.26.1", | ||
"babel-plugin-transform-typescript": "^7.0.0-alpha.19", | ||
"babel-plugin-syntax-jsx": "^6.18.0", | ||
"babel-runtime": "^6.26.0", | ||
@@ -51,3 +51,3 @@ "babel-types": "^6.26.0", | ||
"cli-table": "^0.3.1", | ||
"commander": "^2.13.0", | ||
"commander": "^2.16.0", | ||
"glob": "^7.1.2", | ||
@@ -57,4 +57,5 @@ "make-plural": "^4.1.1", | ||
"mkdirp": "^0.5.1", | ||
"ramda": "^0.25.0" | ||
"ramda": "^0.25.0", | ||
"typescript": "^2.9.2" | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
41318
808
19
2
10
+ Addedtypescript@^2.9.2
+ Added@lingui/babel-plugin-extract-messages@2.2.0-16(transitive)
+ Added@lingui/babel-plugin-transform-js@2.2.0-16(transitive)
+ Added@lingui/babel-plugin-transform-react@2.2.0-16(transitive)
+ Added@lingui/conf@2.2.0-16(transitive)
+ Addedargparse@1.0.10(transitive)
+ Addedbabel-plugin-syntax-jsx@6.18.0(transitive)
+ Addedcosmiconfig@4.0.0(transitive)
+ Addedesprima@4.0.1(transitive)
+ Addedis-directory@0.3.1(transitive)
+ Addedjs-yaml@3.14.1(transitive)
+ Addedrequire-from-string@2.0.2(transitive)
+ Addedsprintf-js@1.0.3(transitive)
+ Addedtypescript@2.9.2(transitive)
- Removed@lingui/babel-plugin-extract-messages@2.1.2(transitive)
- Removed@lingui/babel-plugin-transform-js@2.1.2(transitive)
- Removed@lingui/babel-plugin-transform-react@2.1.2(transitive)
- Removed@lingui/conf@2.1.2(transitive)
- Removedbabel-plugin-syntax-typescript@7.0.0-beta.3(transitive)
- Removedbabel-plugin-transform-typescript@7.0.0-beta.3(transitive)
Updated@lingui/conf@2.2.0-16
Updatedcommander@^2.16.0