Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

i18n-patch

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

i18n-patch - npm Package Compare versions

Comparing version 0.0.2 to 0.0.3

16

lib/cli.js

@@ -5,6 +5,2 @@ #!/usr/bin/env node

// Note for development:
// $ npm run watch
// $ node lib/cli.js --config example --src example/src --out example/out ja
var _meow = require('meow');

@@ -20,8 +16,10 @@

var cli = (0, _meow2.default)('\n Usage\n $ i18n-patch <locale>\n\n Options\n --config Base path for config files.\n i18n.json and <locale>.json is required.\n --src Base path for source files.\n Current directory by default.\n --out Base path for output files. \'out\' by default.\n This directory should be clean,\n but this tool does not clean it.\n You must remove the directory by yourself.\n\n Examples\n $ i18n-patch --config example --src example/src --out example/out ja\n');
var cli = (0, _meow2.default)('\n Usage\n $ i18n-patch <locale> <src> [<dest>]\n\n Options\n --config Base path for config files.\n i18n.json and <locale>.json is required.\n \'config\' by default.\n\n Examples\n $ i18n-patch --config example/config ja example/src example/out\n');
var locale = cli.input[0];
var opts = cli.flags;
opts.locale = cli.input[0];
opts.dest = cli.input[2];
var src = cli.input[1];
if (!locale) {
if (!opts.locale || !src) {
cli.showHelp();

@@ -31,5 +29,5 @@ process.exit(0);

new _2.default(locale, opts).generate().catch(function (err) {
new _2.default(src, opts).generate().catch(function (err) {
console.log(err);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBOzs7Ozs7QUFNQTs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNLE1BQU0sK2tCQUFOOztBQWtCTixJQUFNLFNBQVMsSUFBSSxLQUFKLENBQVUsQ0FBVixDQUFUO0FBQ04sSUFBTSxPQUFPLElBQUksS0FBSjs7QUFFYixJQUFJLENBQUMsTUFBRCxFQUFTO0FBQ1gsTUFBSSxRQUFKLEdBRFc7QUFFWCxVQUFRLElBQVIsQ0FBYSxDQUFiLEVBRlc7Q0FBYjs7QUFLQSxlQUFjLE1BQWQsRUFBc0IsSUFBdEIsRUFDQyxRQURELEdBRUMsS0FGRCxDQUVPLFVBQUMsR0FBRCxFQUFTO0FBQ2QsVUFBUSxHQUFSLENBQVksR0FBWixFQURjO0NBQVQsQ0FGUCIsImZpbGUiOiJjbGkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbid1c2Ugc3RyaWN0JztcblxuLy8gTm90ZSBmb3IgZGV2ZWxvcG1lbnQ6XG4vLyAkIG5wbSBydW4gd2F0Y2hcbi8vICQgbm9kZSBsaWIvY2xpLmpzIC0tY29uZmlnIGV4YW1wbGUgLS1zcmMgZXhhbXBsZS9zcmMgLS1vdXQgZXhhbXBsZS9vdXQgamFcblxuaW1wb3J0IG1lb3cgZnJvbSAnbWVvdyc7XG5pbXBvcnQgSTE4blBhdGNoIGZyb20gJy4vJztcblxuY29uc3QgY2xpID0gbWVvdyhgXG4gICAgVXNhZ2VcbiAgICAgICQgaTE4bi1wYXRjaCA8bG9jYWxlPlxuXG4gICAgT3B0aW9uc1xuICAgICAgLS1jb25maWcgIEJhc2UgcGF0aCBmb3IgY29uZmlnIGZpbGVzLlxuICAgICAgICAgICAgICAgIGkxOG4uanNvbiBhbmQgPGxvY2FsZT4uanNvbiBpcyByZXF1aXJlZC5cbiAgICAgIC0tc3JjICAgICBCYXNlIHBhdGggZm9yIHNvdXJjZSBmaWxlcy5cbiAgICAgICAgICAgICAgICBDdXJyZW50IGRpcmVjdG9yeSBieSBkZWZhdWx0LlxuICAgICAgLS1vdXQgICAgIEJhc2UgcGF0aCBmb3Igb3V0cHV0IGZpbGVzLiAnb3V0JyBieSBkZWZhdWx0LlxuICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IHNob3VsZCBiZSBjbGVhbixcbiAgICAgICAgICAgICAgICBidXQgdGhpcyB0b29sIGRvZXMgbm90IGNsZWFuIGl0LlxuICAgICAgICAgICAgICAgIFlvdSBtdXN0IHJlbW92ZSB0aGUgZGlyZWN0b3J5IGJ5IHlvdXJzZWxmLlxuXG4gICAgRXhhbXBsZXNcbiAgICAgICQgaTE4bi1wYXRjaCAtLWNvbmZpZyBleGFtcGxlIC0tc3JjIGV4YW1wbGUvc3JjIC0tb3V0IGV4YW1wbGUvb3V0IGphXG5gKTtcblxuY29uc3QgbG9jYWxlID0gY2xpLmlucHV0WzBdO1xuY29uc3Qgb3B0cyA9IGNsaS5mbGFncztcblxuaWYgKCFsb2NhbGUpIHtcbiAgY2xpLnNob3dIZWxwKCk7XG4gIHByb2Nlc3MuZXhpdCgwKTtcbn1cblxubmV3IEkxOG5QYXRjaChsb2NhbGUsIG9wdHMpXG4uZ2VuZXJhdGUoKVxuLmNhdGNoKChlcnIpID0+IHtcbiAgY29uc29sZS5sb2coZXJyKTtcbn0pO1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBOztBQUVBOzs7O0FBQ0E7Ozs7OztBQUVBLElBQU0sTUFBTSxxVUFBTjs7QUFhTixJQUFNLE9BQU8sSUFBSSxLQUFKO0FBQ2IsS0FBSyxNQUFMLEdBQWMsSUFBSSxLQUFKLENBQVUsQ0FBVixDQUFkO0FBQ0EsS0FBSyxJQUFMLEdBQVksSUFBSSxLQUFKLENBQVUsQ0FBVixDQUFaO0FBQ0EsSUFBTSxNQUFNLElBQUksS0FBSixDQUFVLENBQVYsQ0FBTjs7QUFFTixJQUFJLENBQUMsS0FBSyxNQUFMLElBQWUsQ0FBQyxHQUFELEVBQU07QUFDeEIsTUFBSSxRQUFKLEdBRHdCO0FBRXhCLFVBQVEsSUFBUixDQUFhLENBQWIsRUFGd0I7Q0FBMUI7O0FBS0EsZUFBYyxHQUFkLEVBQW1CLElBQW5CLEVBQ0MsUUFERCxHQUVDLEtBRkQsQ0FFTyxVQUFDLEdBQUQsRUFBUztBQUNkLFVBQVEsR0FBUixDQUFZLEdBQVosRUFEYztDQUFULENBRlAiLCJmaWxlIjoiY2xpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCBtZW93IGZyb20gJ21lb3cnO1xuaW1wb3J0IEkxOG5QYXRjaCBmcm9tICcuLyc7XG5cbmNvbnN0IGNsaSA9IG1lb3coYFxuICAgIFVzYWdlXG4gICAgICAkIGkxOG4tcGF0Y2ggPGxvY2FsZT4gPHNyYz4gWzxkZXN0Pl1cblxuICAgIE9wdGlvbnNcbiAgICAgIC0tY29uZmlnICBCYXNlIHBhdGggZm9yIGNvbmZpZyBmaWxlcy5cbiAgICAgICAgICAgICAgICBpMThuLmpzb24gYW5kIDxsb2NhbGU+Lmpzb24gaXMgcmVxdWlyZWQuXG4gICAgICAgICAgICAgICAgJ2NvbmZpZycgYnkgZGVmYXVsdC5cblxuICAgIEV4YW1wbGVzXG4gICAgICAkIGkxOG4tcGF0Y2ggLS1jb25maWcgZXhhbXBsZS9jb25maWcgamEgZXhhbXBsZS9zcmMgZXhhbXBsZS9vdXRcbmApO1xuXG5jb25zdCBvcHRzID0gY2xpLmZsYWdzO1xub3B0cy5sb2NhbGUgPSBjbGkuaW5wdXRbMF07XG5vcHRzLmRlc3QgPSBjbGkuaW5wdXRbMl07XG5jb25zdCBzcmMgPSBjbGkuaW5wdXRbMV07XG5cbmlmICghb3B0cy5sb2NhbGUgfHwgIXNyYykge1xuICBjbGkuc2hvd0hlbHAoKTtcbiAgcHJvY2Vzcy5leGl0KDApO1xufVxuXG5uZXcgSTE4blBhdGNoKHNyYywgb3B0cylcbi5nZW5lcmF0ZSgpXG4uY2F0Y2goKGVycikgPT4ge1xuICBjb25zb2xlLmxvZyhlcnIpO1xufSk7XG4iXX0=

@@ -32,7 +32,12 @@ 'use strict';

var I18nPatch = function () {
function I18nPatch(locale, options) {
function I18nPatch(src, options) {
_classCallCheck(this, I18nPatch);
this.locale = locale;
if (!src) {
throw new Error('src is required');
}
this.src = src;
this.options = options || {};
this.options.dest = this.options.dest || this.src;
this.options.config = this.options.config || 'config';
}

@@ -42,9 +47,12 @@

key: 'generate',
value: function generate() {
value: function generate(config, localeConfig) {
var _this = this;
this.config = this.readConfigFile('i18n.json');
this.localeConfig = this.readConfigFile(this.locale + '.json');
this.buildPatterns();
return new Promise(function (resolve, reject) {
_this.setConfigs(config, localeConfig);
_this.buildPatterns();
if (_this.hasDest()) {
_fsExtra2.default.copySync(_this.src, _this.options.dest);
}
Promise.all(_this.config.translations.map(function (t) {

@@ -60,6 +68,23 @@ return _this.processTranslation(t);

}, {
key: 'hasDest',
value: function hasDest() {
return this.src !== this.options.dest;
}
}, {
key: 'setConfigs',
value: function setConfigs(config, localeConfig) {
this.config = config || this.readConfigFile('i18n.json');
if (localeConfig) {
this.localeConfig = localeConfig;
} else {
if (!this.options.locale) {
throw new Error('Could not determine locale');
}
this.localeConfig = this.readConfigFile(this.options.locale + '.json');
}
}
}, {
key: 'readConfigFile',
value: function readConfigFile(name) {
var basePath = this.options.config || '.';
var configPath = _path2.default.join(basePath, name);
var configPath = _path2.default.join(this.options.config, name);
var configFile = void 0;

@@ -81,5 +106,12 @@ try {

t.patterns.forEach(function (p) {
var resolved = false;
p.resolved = p.replace.replace(/\${([^}]*)}/g, function (all, matched) {
if (_this2.localeConfig.hasOwnProperty(matched)) {
resolved = true;
}
return _this2.localeConfig[matched];
});
if (!resolved) {
p.resolved = undefined;
}
});

@@ -94,4 +126,4 @@ });

return new Promise(function (resolve, reject) {
var basePath = _this3.options.src || '.';
var srcPaths = t.src ? _path2.default.join(basePath, t.src) : basePath;
var srcGlob = t.src || '**/*';
var srcPaths = _path2.default.join(_this3.options.dest, srcGlob);
(0, _glob2.default)(srcPaths, null, function (err, files) {

@@ -115,9 +147,5 @@ if (err) {

value: function processFile(t, file) {
var _this4 = this;
return new Promise(function (resolve, reject) {
var matched = false;
var error = void 0;
var dest = _path2.default.join(_this4.options.out || 'out', _path2.default.relative(_this4.options.src, file));
_fsExtra2.default.mkdirsSync(_path2.default.dirname(dest));
var lr = _readline2.default.createInterface({

@@ -135,6 +163,3 @@ input: _fsExtra2.default.createReadStream(file)

// TODO Preserve original file stats
_fsExtra2.default.copySync(out.path, dest);
} else {
// Just copy original file
_fsExtra2.default.copySync(file, dest);
_fsExtra2.default.copySync(out.path, file);
}

@@ -147,3 +172,5 @@ resolve(file);

var before = result;
result = result.replace(p.pattern, p.resolved);
if (p.resolved) {
result = result.replace(p.pattern, p.resolved);
}
if (before !== result) {

@@ -170,2 +197,2 @@ matched = true;

exports.default = I18nPatch;
//# sourceMappingURL=data:application/json;base64,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QSxrQkFBUSxJQUFSLEVBWmlCO1NBQU4sQ0FKVCxDQVRrQztBQTJCdEMsV0FBRyxFQUFILENBQU0sTUFBTixFQUFjLFVBQUMsSUFBRCxFQUFVO0FBQ3RCLGNBQUksU0FBUyxJQUFULENBRGtCO0FBRXRCLFlBQUUsUUFBRixDQUFXLE9BQVgsQ0FBbUIsVUFBQyxDQUFELEVBQU87QUFDeEIsZ0JBQUksU0FBUyxNQUFULENBRG9CO0FBRXhCLHFCQUFTLE9BQU8sT0FBUCxDQUFlLEVBQUUsT0FBRixFQUFXLEVBQUUsUUFBRixDQUFuQyxDQUZ3QjtBQUd4QixnQkFBSSxXQUFXLE1BQVgsRUFBbUI7QUFDckIsd0JBQVUsSUFBVixDQURxQjthQUF2QjtXQUhpQixDQUFuQjs7QUFGc0IsYUFVdEIsQ0FBSSxLQUFKLENBQWEsYUFBYixFQVZzQjtTQUFWLENBQWQsQ0FZQyxFQVpELENBWUksT0FaSixFQVlhLFVBQUMsR0FBRCxFQUFTO0FBQ3BCLGtCQUFRLEdBQVIsQ0FEb0I7QUFFcEIsY0FBSSxHQUFKLEdBRm9CO0FBR3BCLGlCQUFPLEdBQVAsRUFIb0I7U0FBVCxDQVpiLENBaUJDLEVBakJELENBaUJJLE9BakJKLEVBaUJhLFlBQU07QUFDakIsY0FBSSxHQUFKLEdBRGlCO1NBQU4sQ0FqQmIsQ0EzQnNDO09BQXJCLENBQW5CLENBRG1COzs7O1NBcEVGIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcbmltcG9ydCBybCBmcm9tICdyZWFkbGluZSc7XG5jb25zdCB0ZW1wID0gcmVxdWlyZSgndGVtcCcpLnRyYWNrKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEkxOG5QYXRjaCB7XG4gIGNvbnN0cnVjdG9yKGxvY2FsZSwgb3B0aW9ucykge1xuICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIH1cblxuICBnZW5lcmF0ZSgpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMucmVhZENvbmZpZ0ZpbGUoJ2kxOG4uanNvbicpO1xuICAgIHRoaXMubG9jYWxlQ29uZmlnID0gdGhpcy5yZWFkQ29uZmlnRmlsZShgJHt0aGlzLmxvY2FsZX0uanNvbmApO1xuICAgIHRoaXMuYnVpbGRQYXR0ZXJucygpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBQcm9taXNlLmFsbCh0aGlzLmNvbmZpZy50cmFuc2xhdGlvbnMubWFwKCh0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NUcmFuc2xhdGlvbih0KTtcbiAgICAgIH0pKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRDb25maWdGaWxlKG5hbWUpIHtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHRoaXMub3B0aW9ucy5jb25maWcgfHwgJy4nO1xuICAgIGxldCBjb25maWdQYXRoICA9IHBhdGguam9pbihiYXNlUGF0aCwgbmFtZSk7XG4gICAgbGV0IGNvbmZpZ0ZpbGU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbmZpZ0ZpbGUgPSBmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ2Fubm90IHJlYWQgJHtjb25maWdQYXRofWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb25maWdGaWxlKTtcbiAgfVxuXG4gIGJ1aWxkUGF0dGVybnMoKSB7XG4gICAgdGhpcy5jb25maWcudHJhbnNsYXRpb25zLmZvckVhY2goKHQpID0+IHtcbiAgICAgIHQucGF0dGVybnMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICBwLnJlc29sdmVkID0gcC5yZXBsYWNlLnJlcGxhY2UoL1xcJHsoW159XSopfS9nLCAoYWxsLCBtYXRjaGVkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlQ29uZmlnW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvY2Vzc1RyYW5zbGF0aW9uKHQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFzZVBhdGggPSB0aGlzLm9wdGlvbnMuc3JjIHx8ICcuJztcbiAgICAgIGxldCBzcmNQYXRocyA9IHQuc3JjID8gcGF0aC5qb2luKGJhc2VQYXRoLCB0LnNyYykgOiBiYXNlUGF0aDtcbiAgICAgIGdsb2Ioc3JjUGF0aHMsIG51bGwsIChlcnIsIGZpbGVzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgUHJvbWlzZS5hbGwoZmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZpbGUodCwgZmlsZSk7XG4gICAgICAgIH0pKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoZmlsZSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoZmlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm9jZXNzRmlsZSh0LCBmaWxlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG4gICAgICBsZXQgZXJyb3I7XG4gICAgICBsZXQgZGVzdCA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMub3V0IHx8ICdvdXQnLFxuICAgICAgICBwYXRoLnJlbGF0aXZlKHRoaXMub3B0aW9ucy5zcmMsIGZpbGUpKTtcbiAgICAgIGZzLm1rZGlyc1N5bmMocGF0aC5kaXJuYW1lKGRlc3QpKTtcbiAgICAgIGxldCBsciA9IHJsLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgICAgIGlucHV0OiBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGUpXG4gICAgICB9KTtcbiAgICAgIGxldCBvdXQgPSB0ZW1wLmNyZWF0ZVdyaXRlU3RyZWFtKClcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIC8vIFRoaXMgY2FuIGJlIHNldCBpbiAnZXJyb3InIGNhbGxiYWNrIG9mIGxyXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgLy8gVE9ETyBQcmVzZXJ2ZSBvcmlnaW5hbCBmaWxlIHN0YXRzXG4gICAgICAgICAgZnMuY29weVN5bmMob3V0LnBhdGgsIGRlc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEp1c3QgY29weSBvcmlnaW5hbCBmaWxlXG4gICAgICAgICAgZnMuY29weVN5bmMoZmlsZSwgZGVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmaWxlKTtcbiAgICAgIH0pO1xuICAgICAgbHIub24oJ2xpbmUnLCAobGluZSkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbGluZTtcbiAgICAgICAgdC5wYXR0ZXJucy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgbGV0IGJlZm9yZSA9IHJlc3VsdDtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShwLnBhdHRlcm4sIHAucmVzb2x2ZWQpO1xuICAgICAgICAgIGlmIChiZWZvcmUgIT09IHJlc3VsdCkge1xuICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVE9ETyBQcmVzZXJ2ZSBvcmlnaW5hbCBuZXdsaW5lIGlmIHBvc3NpYmxlXG4gICAgICAgIG91dC53cml0ZShgJHtyZXN1bHR9XFxuYCk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgIG91dC5lbmQoKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgb3V0LmVuZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,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QWQsQ0FjQyxFQWRELENBY0ksT0FkSixFQWNhLFVBQUMsR0FBRCxFQUFTO0FBQ3BCLGtCQUFRLEdBQVIsQ0FEb0I7QUFFcEIsY0FBSSxHQUFKLEdBRm9CO0FBR3BCLGlCQUFPLEdBQVAsRUFIb0I7U0FBVCxDQWRiLENBbUJDLEVBbkJELENBbUJJLE9BbkJKLEVBbUJhLFlBQU07QUFDakIsY0FBSSxHQUFKLEdBRGlCO1NBQU4sQ0FuQmIsQ0FyQnNDO09BQXJCLENBQW5CLENBRG1COzs7O1NBbEdGIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcbmltcG9ydCBybCBmcm9tICdyZWFkbGluZSc7XG5jb25zdCB0ZW1wID0gcmVxdWlyZSgndGVtcCcpLnRyYWNrKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEkxOG5QYXRjaCB7XG4gIGNvbnN0cnVjdG9yKHNyYywgb3B0aW9ucykge1xuICAgIGlmICghc3JjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NyYyBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICB0aGlzLnNyYyA9IHNyYztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMub3B0aW9ucy5kZXN0ID0gdGhpcy5vcHRpb25zLmRlc3QgfHwgdGhpcy5zcmM7XG4gICAgdGhpcy5vcHRpb25zLmNvbmZpZyA9IHRoaXMub3B0aW9ucy5jb25maWcgfHwgJ2NvbmZpZyc7XG4gIH1cblxuICBnZW5lcmF0ZShjb25maWcsIGxvY2FsZUNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnNldENvbmZpZ3MoY29uZmlnLCBsb2NhbGVDb25maWcpO1xuICAgICAgdGhpcy5idWlsZFBhdHRlcm5zKCk7XG4gICAgICBpZiAodGhpcy5oYXNEZXN0KCkpIHtcbiAgICAgICAgZnMuY29weVN5bmModGhpcy5zcmMsIHRoaXMub3B0aW9ucy5kZXN0KTtcbiAgICAgIH1cblxuICAgICAgUHJvbWlzZS5hbGwodGhpcy5jb25maWcudHJhbnNsYXRpb25zLm1hcCgodCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVHJhbnNsYXRpb24odCk7XG4gICAgICB9KSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBoYXNEZXN0KCkge1xuICAgIHJldHVybiB0aGlzLnNyYyAhPT0gdGhpcy5vcHRpb25zLmRlc3Q7XG4gIH1cblxuICBzZXRDb25maWdzKGNvbmZpZywgbG9jYWxlQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWcgfHwgdGhpcy5yZWFkQ29uZmlnRmlsZSgnaTE4bi5qc29uJyk7XG4gICAgaWYgKGxvY2FsZUNvbmZpZykge1xuICAgICAgdGhpcy5sb2NhbGVDb25maWcgPSBsb2NhbGVDb25maWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmxvY2FsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgbG9jYWxlJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvY2FsZUNvbmZpZyA9IHRoaXMucmVhZENvbmZpZ0ZpbGUoYCR7dGhpcy5vcHRpb25zLmxvY2FsZX0uanNvbmApO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRDb25maWdGaWxlKG5hbWUpIHtcbiAgICBsZXQgY29uZmlnUGF0aCA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMuY29uZmlnLCBuYW1lKTtcbiAgICBsZXQgY29uZmlnRmlsZTtcbiAgICB0cnkge1xuICAgICAgY29uZmlnRmlsZSA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBDYW5ub3QgcmVhZCAke2NvbmZpZ1BhdGh9YCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnBhcnNlKGNvbmZpZ0ZpbGUpO1xuICB9XG5cbiAgYnVpbGRQYXR0ZXJucygpIHtcbiAgICB0aGlzLmNvbmZpZy50cmFuc2xhdGlvbnMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgdC5wYXR0ZXJucy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgIGxldCByZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgICBwLnJlc29sdmVkID0gcC5yZXBsYWNlLnJlcGxhY2UoL1xcJHsoW159XSopfS9nLCAoYWxsLCBtYXRjaGVkKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubG9jYWxlQ29uZmlnLmhhc093blByb3BlcnR5KG1hdGNoZWQpKSB7XG4gICAgICAgICAgICByZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZUNvbmZpZ1ttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgICAgICBwLnJlc29sdmVkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb2Nlc3NUcmFuc2xhdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBzcmNHbG9iID0gdC5zcmMgfHwgJyoqLyonO1xuICAgICAgbGV0IHNyY1BhdGhzID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy5kZXN0LCBzcmNHbG9iKTtcbiAgICAgIGdsb2Ioc3JjUGF0aHMsIG51bGwsIChlcnIsIGZpbGVzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgUHJvbWlzZS5hbGwoZmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZpbGUodCwgZmlsZSk7XG4gICAgICAgIH0pKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoZmlsZSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoZmlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm9jZXNzRmlsZSh0LCBmaWxlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG4gICAgICBsZXQgZXJyb3I7XG4gICAgICBsZXQgbHIgPSBybC5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgICAgICBpbnB1dDogZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlKVxuICAgICAgfSk7XG4gICAgICBsZXQgb3V0ID0gdGVtcC5jcmVhdGVXcml0ZVN0cmVhbSgpXG4gICAgICAub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pXG4gICAgICAub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBUaGlzIGNhbiBiZSBzZXQgaW4gJ2Vycm9yJyBjYWxsYmFjayBvZiBsclxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgIC8vIFRPRE8gUHJlc2VydmUgb3JpZ2luYWwgZmlsZSBzdGF0c1xuICAgICAgICAgIGZzLmNvcHlTeW5jKG91dC5wYXRoLCBmaWxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZpbGUpO1xuICAgICAgfSk7XG4gICAgICBsci5vbignbGluZScsIChsaW5lKSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBsaW5lO1xuICAgICAgICB0LnBhdHRlcm5zLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICBsZXQgYmVmb3JlID0gcmVzdWx0O1xuICAgICAgICAgIGlmIChwLnJlc29sdmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShwLnBhdHRlcm4sIHAucmVzb2x2ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmVmb3JlICE9PSByZXN1bHQpIHtcbiAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRPRE8gUHJlc2VydmUgb3JpZ2luYWwgbmV3bGluZSBpZiBwb3NzaWJsZVxuICAgICAgICBvdXQud3JpdGUoYCR7cmVzdWx0fVxcbmApO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICBvdXQuZW5kKCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIG91dC5lbmQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
{
"name": "i18n-patch",
"version": "0.0.2",
"version": "0.0.3",
"description": "Replacing codes for i18n with patterns.",

@@ -43,3 +43,4 @@ "license": "MIT",

"babel-preset-es2015": "^6.6.0",
"eslint": "^2.5.3"
"eslint": "^2.5.3",
"rimraf": "^2.5.2"
},

@@ -57,3 +58,3 @@ "babel": {

"prepublish": "npm run build",
"start": "node ./lib/cli",
"start": "rimraf example/out && node ./lib/cli --config example ja example/src example/out",
"build": "babel src -d lib -s inline",

@@ -60,0 +61,0 @@ "watch": "babel src -d lib -s inline -w",

#!/usr/bin/env node
'use strict';
// Note for development:
// $ npm run watch
// $ node lib/cli.js --config example --src example/src --out example/out ja
import meow from 'meow';

@@ -13,3 +9,3 @@ import I18nPatch from './';

Usage
$ i18n-patch <locale>
$ i18n-patch <locale> <src> [<dest>]

@@ -19,17 +15,14 @@ Options

i18n.json and <locale>.json is required.
--src Base path for source files.
Current directory by default.
--out Base path for output files. 'out' by default.
This directory should be clean,
but this tool does not clean it.
You must remove the directory by yourself.
'config' by default.
Examples
$ i18n-patch --config example --src example/src --out example/out ja
$ i18n-patch --config example/config ja example/src example/out
`);
const locale = cli.input[0];
const opts = cli.flags;
opts.locale = cli.input[0];
opts.dest = cli.input[2];
const src = cli.input[1];
if (!locale) {
if (!opts.locale || !src) {
cli.showHelp();

@@ -39,3 +32,3 @@ process.exit(0);

new I18nPatch(locale, opts)
new I18nPatch(src, opts)
.generate()

@@ -42,0 +35,0 @@ .catch((err) => {

@@ -10,12 +10,20 @@ 'use strict';

export default class I18nPatch {
constructor(locale, options) {
this.locale = locale;
constructor(src, options) {
if (!src) {
throw new Error('src is required');
}
this.src = src;
this.options = options || {};
this.options.dest = this.options.dest || this.src;
this.options.config = this.options.config || 'config';
}
generate() {
this.config = this.readConfigFile('i18n.json');
this.localeConfig = this.readConfigFile(`${this.locale}.json`);
this.buildPatterns();
generate(config, localeConfig) {
return new Promise((resolve, reject) => {
this.setConfigs(config, localeConfig);
this.buildPatterns();
if (this.hasDest()) {
fs.copySync(this.src, this.options.dest);
}
Promise.all(this.config.translations.map((t) => {

@@ -33,5 +41,20 @@ return this.processTranslation(t);

hasDest() {
return this.src !== this.options.dest;
}
setConfigs(config, localeConfig) {
this.config = config || this.readConfigFile('i18n.json');
if (localeConfig) {
this.localeConfig = localeConfig;
} else {
if (!this.options.locale) {
throw new Error('Could not determine locale');
}
this.localeConfig = this.readConfigFile(`${this.options.locale}.json`);
}
}
readConfigFile(name) {
const basePath = this.options.config || '.';
let configPath = path.join(basePath, name);
let configPath = path.join(this.options.config, name);
let configFile;

@@ -50,5 +73,12 @@ try {

t.patterns.forEach((p) => {
let resolved = false;
p.resolved = p.replace.replace(/\${([^}]*)}/g, (all, matched) => {
if (this.localeConfig.hasOwnProperty(matched)) {
resolved = true;
}
return this.localeConfig[matched];
});
if (!resolved) {
p.resolved = undefined;
}
});

@@ -60,4 +90,4 @@ });

return new Promise((resolve, reject) => {
const basePath = this.options.src || '.';
let srcPaths = t.src ? path.join(basePath, t.src) : basePath;
let srcGlob = t.src || '**/*';
let srcPaths = path.join(this.options.dest, srcGlob);
glob(srcPaths, null, (err, files) => {

@@ -85,5 +115,2 @@ if (err) {

let error;
let dest = path.join(this.options.out || 'out',
path.relative(this.options.src, file));
fs.mkdirsSync(path.dirname(dest));
let lr = rl.createInterface({

@@ -103,6 +130,3 @@ input: fs.createReadStream(file)

// TODO Preserve original file stats
fs.copySync(out.path, dest);
} else {
// Just copy original file
fs.copySync(file, dest);
fs.copySync(out.path, file);
}

@@ -115,3 +139,5 @@ resolve(file);

let before = result;
result = result.replace(p.pattern, p.resolved);
if (p.resolved) {
result = result.replace(p.pattern, p.resolved);
}
if (before !== result) {

@@ -118,0 +144,0 @@ matched = true;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc