i18n-patch
Advanced tools
Comparing version 0.0.6 to 0.0.7
373
lib/index.js
@@ -7,14 +7,2 @@ 'use strict'; | ||
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); | ||
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); | ||
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); | ||
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); | ||
var _inherits2 = require('babel-runtime/helpers/inherits'); | ||
var _inherits3 = _interopRequireDefault(_inherits2); | ||
var _keys = require('babel-runtime/core-js/object/keys'); | ||
@@ -54,4 +42,6 @@ | ||
var _stream = require('stream'); | ||
var _translator = require('./translator'); | ||
var _translator2 = _interopRequireDefault(_translator); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -454,2 +444,68 @@ | ||
return new _promise2.default(function (resolve, reject) { | ||
if (t.locale) { | ||
var shouldContinue = true; | ||
if (t.locale.include) { | ||
shouldContinue = false; | ||
var _iteratorNormalCompletion10 = true; | ||
var _didIteratorError10 = false; | ||
var _iteratorError10 = undefined; | ||
try { | ||
for (var _iterator10 = (0, _getIterator3.default)(t.locale.include), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) { | ||
var l = _step10.value; | ||
if (l === _this2.options.locale) { | ||
shouldContinue = true; | ||
break; | ||
} | ||
} | ||
} catch (err) { | ||
_didIteratorError10 = true; | ||
_iteratorError10 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion10 && _iterator10.return) { | ||
_iterator10.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError10) { | ||
throw _iteratorError10; | ||
} | ||
} | ||
} | ||
} else if (t.locale.exclude) { | ||
shouldContinue = true; | ||
var _iteratorNormalCompletion11 = true; | ||
var _didIteratorError11 = false; | ||
var _iteratorError11 = undefined; | ||
try { | ||
for (var _iterator11 = (0, _getIterator3.default)(t.locale.exclude), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) { | ||
var _l = _step11.value; | ||
if (_l === _this2.options.locale) { | ||
shouldContinue = false; | ||
break; | ||
} | ||
} | ||
} catch (err) { | ||
_didIteratorError11 = true; | ||
_iteratorError11 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion11 && _iterator11.return) { | ||
_iterator11.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError11) { | ||
throw _iteratorError11; | ||
} | ||
} | ||
} | ||
} | ||
if (!shouldContinue) { | ||
resolve(); | ||
return; | ||
} | ||
} | ||
var srcGlob = t.src || '**/*'; | ||
@@ -504,3 +560,3 @@ var srcPaths = _path2.default.join(_this2.options.dest, srcGlob); | ||
// Per-line processing | ||
var translator = new Translator(t); | ||
var translator = new _translator2.default(t); | ||
var out = temp.createWriteStream(); | ||
@@ -514,9 +570,9 @@ _fsExtra2.default.createReadStream(file).pipe(translator).on('error', reject).pipe(out).on('error', reject).on('close', function () { | ||
var value = ''; | ||
var _iteratorNormalCompletion10 = true; | ||
var _didIteratorError10 = false; | ||
var _iteratorError10 = undefined; | ||
var _iteratorNormalCompletion12 = true; | ||
var _didIteratorError12 = false; | ||
var _iteratorError12 = undefined; | ||
try { | ||
for (var _iterator10 = (0, _getIterator3.default)(translator.beginBuffer), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) { | ||
var e = _step10.value; | ||
for (var _iterator12 = (0, _getIterator3.default)(translator.beginBuffer), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) { | ||
var e = _step12.value; | ||
@@ -529,12 +585,12 @@ value += e; | ||
} catch (err) { | ||
_didIteratorError10 = true; | ||
_iteratorError10 = err; | ||
_didIteratorError12 = true; | ||
_iteratorError12 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion10 && _iterator10.return) { | ||
_iterator10.return(); | ||
if (!_iteratorNormalCompletion12 && _iterator12.return) { | ||
_iterator12.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError10) { | ||
throw _iteratorError10; | ||
if (_didIteratorError12) { | ||
throw _iteratorError12; | ||
} | ||
@@ -549,9 +605,9 @@ } | ||
var _value = ''; | ||
var _iteratorNormalCompletion11 = true; | ||
var _didIteratorError11 = false; | ||
var _iteratorError11 = undefined; | ||
var _iteratorNormalCompletion13 = true; | ||
var _didIteratorError13 = false; | ||
var _iteratorError13 = undefined; | ||
try { | ||
for (var _iterator11 = (0, _getIterator3.default)(translator.endBuffer), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) { | ||
var _e = _step11.value; | ||
for (var _iterator13 = (0, _getIterator3.default)(translator.endBuffer), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) { | ||
var _e = _step13.value; | ||
@@ -564,12 +620,12 @@ _value += _e; | ||
} catch (err) { | ||
_didIteratorError11 = true; | ||
_iteratorError11 = err; | ||
_didIteratorError13 = true; | ||
_iteratorError13 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion11 && _iterator11.return) { | ||
_iterator11.return(); | ||
if (!_iteratorNormalCompletion13 && _iterator13.return) { | ||
_iterator13.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError11) { | ||
throw _iteratorError11; | ||
if (_didIteratorError13) { | ||
throw _iteratorError13; | ||
} | ||
@@ -595,9 +651,9 @@ } | ||
try { | ||
var _iteratorNormalCompletion12 = true; | ||
var _didIteratorError12 = false; | ||
var _iteratorError12 = undefined; | ||
var _iteratorNormalCompletion14 = true; | ||
var _didIteratorError14 = false; | ||
var _iteratorError14 = undefined; | ||
try { | ||
for (var _iterator12 = (0, _getIterator3.default)(t.patterns), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) { | ||
var p = _step12.value; | ||
for (var _iterator14 = (0, _getIterator3.default)(t.patterns), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) { | ||
var p = _step14.value; | ||
@@ -624,12 +680,12 @@ if (p.pattern || !p.insert || !p.insert.resolved) { | ||
} catch (err) { | ||
_didIteratorError12 = true; | ||
_iteratorError12 = err; | ||
_didIteratorError14 = true; | ||
_iteratorError14 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion12 && _iterator12.return) { | ||
_iterator12.return(); | ||
if (!_iteratorNormalCompletion14 && _iterator14.return) { | ||
_iterator14.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError12) { | ||
throw _iteratorError12; | ||
if (_didIteratorError14) { | ||
throw _iteratorError14; | ||
} | ||
@@ -699,223 +755,2 @@ } | ||
exports.default = I18nPatch; | ||
var Translator = function (_Transform) { | ||
(0, _inherits3.default)(Translator, _Transform); | ||
function Translator(translation) { | ||
(0, _classCallCheck3.default)(this, Translator); | ||
var _this5 = (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(Translator).call(this, { objectMode: true })); | ||
_this5.t = translation; | ||
_this5.matched = false; | ||
_this5.buffer = []; | ||
_this5.beginBuffer = []; | ||
_this5.endBuffer = []; | ||
_this5.pendingPatterns = []; | ||
_this5.inputEnd = false; | ||
return _this5; | ||
} | ||
(0, _createClass3.default)(Translator, [{ | ||
key: '_transform', | ||
value: function _transform(chunk, encoding, done) { | ||
var data = chunk.toString(); | ||
if (this.lastLineData) { | ||
data = this.lastLineData + data; | ||
} | ||
var lines = data.split(NEWLINE); | ||
this.lastLineData = lines.splice(lines.length - 1, 1)[0]; | ||
lines.forEach(function (line) { | ||
this.buffer.push(line); | ||
}.bind(this)); | ||
this.process(); | ||
done(); | ||
} | ||
}, { | ||
key: '_flush', | ||
value: function _flush(done) { | ||
if (this.lastLineData) { | ||
this.buffer.push(this.lastLineData); | ||
} | ||
this.inputEnd = true; | ||
this.process(); | ||
this.lastLineData = null; | ||
this.buffer = null; | ||
done(); | ||
} | ||
}, { | ||
key: 'process', | ||
value: function process() { | ||
while (this.buffer.length) { | ||
if (!this.processLine(this.t, this.buffer.shift())) { | ||
// Need to wait next data | ||
break; | ||
} | ||
} | ||
} | ||
}, { | ||
key: 'processLine', | ||
value: function processLine(t, line) { | ||
var _this6 = this; | ||
var result = line; | ||
// If pendingPatterns are not empty, | ||
// it means that the first pattern need more lines. | ||
if (0 === this.pendingPatterns.length) { | ||
t.patterns.forEach(function (p) { | ||
_this6.pendingPatterns.push(p); | ||
}); | ||
} | ||
while (this.pendingPatterns.length) { | ||
var p = this.pendingPatterns.shift(); | ||
if (!p.resolved) { | ||
continue; | ||
} | ||
var before = result; | ||
var beforeMultiline = before; | ||
var patternSource = p.pattern instanceof RegExp ? p.pattern.source : p.pattern; | ||
var patternLines = patternSource | ||
// Usually the pattern includes ([^\n]*) to express a line | ||
// in multiline expression, so this should be removed | ||
// to know how many lines this pattern requires. | ||
.replace('[^\\n]', '').split('\\n').length; | ||
var consumedBuffers = 0; | ||
if (1 < patternLines) { | ||
var currentLines = result.split(NEWLINE).length; | ||
if (patternLines - currentLines <= this.buffer.length) { | ||
for (var i = 0; i < patternLines - currentLines; i++) { | ||
result += NEWLINE + this.buffer[i]; | ||
beforeMultiline = result; | ||
consumedBuffers++; | ||
} | ||
} else if (this.inputEnd) { | ||
// We should give up this pattern to be matched | ||
// because there's no more data to read. | ||
continue; | ||
} else { | ||
// If the input is not ended, | ||
// put the current pattern and result back to the buffer | ||
// and wait next data to be arrived. | ||
this.pendingPatterns.unshift(p); | ||
this.buffer.unshift(result); | ||
return false; | ||
} | ||
} | ||
result = this.applyToResolved(result, p, p.pattern, p.exclude, p.flags); | ||
if (p.insert && p.insert.resolved) { | ||
if (p.insert.at === INSERT_AT_BEGIN) { | ||
if (this.beginBuffer.indexOf(p.insert.resolved) < 0) { | ||
this.beginBuffer.push(p.insert.resolved); | ||
} | ||
} else if (p.insert.at === INSERT_AT_END) { | ||
if (this.endBuffer.indexOf(p.insert.resolved) < 0) { | ||
this.endBuffer.push(p.insert.resolved); | ||
} | ||
} | ||
} | ||
if (beforeMultiline === result) { | ||
// result might include the next lines to look-ahead, | ||
// but the next pattern should process the first line of the result. | ||
// So result should be reverted to the value | ||
// of the beginning of the current loop. | ||
result = before; | ||
continue; | ||
} | ||
// We should consume looked-ahead buffers only when they match the pattern. | ||
if (0 < consumedBuffers) { | ||
for (var _i = consumedBuffers; 0 < _i; _i--) { | ||
this.buffer.shift(); | ||
} | ||
} | ||
this.matched = true; | ||
if (t.conditionals) { | ||
var _iteratorNormalCompletion13 = true; | ||
var _didIteratorError13 = false; | ||
var _iteratorError13 = undefined; | ||
try { | ||
for (var _iterator13 = (0, _getIterator3.default)(t.conditionals), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) { | ||
var c = _step13.value; | ||
if (!c.insert || !c.insert.resolved) { | ||
continue; | ||
} | ||
if (c.insert.at === INSERT_AT_BEGIN) { | ||
if (this.beginBuffer.indexOf(c.insert.resolved) < 0) { | ||
this.beginBuffer.push(c.insert.resolved); | ||
} | ||
} else if (c.insert.at === INSERT_AT_END) { | ||
if (this.endBuffer.indexOf(c.insert.resolved) < 0) { | ||
this.endBuffer.push(c.insert.resolved); | ||
} | ||
} | ||
} | ||
} catch (err) { | ||
_didIteratorError13 = true; | ||
_iteratorError13 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion13 && _iterator13.return) { | ||
_iterator13.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError13) { | ||
throw _iteratorError13; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
// TODO Preserve original newline if possible | ||
this.push(result + NEWLINE); | ||
return true; | ||
} | ||
}, { | ||
key: 'applyToResolved', | ||
value: function applyToResolved(target, obj, pattern, exclude, flags) { | ||
var resolved = obj.resolved; | ||
if (obj.args) { | ||
for (var i = 0; i < obj.args.length; i++) { | ||
var argResolved = obj.argsResolved[i]; | ||
if (argResolved) { | ||
if (argResolved.replace && typeof argResolved.replace !== 'function') { | ||
if (argResolved.resolved) { | ||
resolved = this.applyToArgResolved(resolved, argResolved, '{' + i + '}'); | ||
} else { | ||
resolved = resolved.replace('{' + i + '}', argResolved.replace); | ||
} | ||
} else { | ||
resolved = resolved.replace('{' + i + '}', argResolved); | ||
} | ||
} else { | ||
resolved = resolved.replace('{' + i + '}', obj.args[i]); | ||
} | ||
} | ||
} | ||
var exp = flags ? new RegExp(pattern, flags) : pattern; | ||
var result = target.replace(exp, resolved); | ||
if (exclude && result !== target && target.match(exclude)) { | ||
return target; | ||
} | ||
return result; | ||
} | ||
}, { | ||
key: 'applyToArgResolved', | ||
value: function applyToArgResolved(target, obj, pattern) { | ||
if (obj.args) { | ||
for (var i = 0; i < obj.args.length; i++) { | ||
var argResolved = obj.argsResolved[i]; | ||
if (argResolved) { | ||
obj.resolved = this.applyToArgResolved(obj.resolved, argResolved, '{' + i + '}'); | ||
} else { | ||
obj.resolved = obj.resolved.replace('{' + i + '}', obj.args[i]); | ||
} | ||
} | ||
} | ||
return target.replace(pattern, obj.resolved); | ||
} | ||
}]); | ||
return Translator; | ||
}(_stream.Transform); | ||
exports.default = I18nPatch; |
{ | ||
"name": "i18n-patch", | ||
"version": "0.0.6", | ||
"version": "0.0.7", | ||
"description": "Replacing codes for i18n with patterns.", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
@@ -261,3 +261,3 @@ # i18n-patch | ||
user: ユーザ | ||
editSomething: '{0}を編集'å | ||
editSomething: '{0}を編集' | ||
``` | ||
@@ -267,3 +267,3 @@ | ||
``` | ||
```haml | ||
- if user | ||
@@ -275,3 +275,3 @@ Edit user | ||
``` | ||
```haml | ||
- if user | ||
@@ -623,4 +623,57 @@ ユーザを編集 | ||
### Include/exclude locales | ||
You can apply a translation config for specific locales using `locale.include` or `locale.exclude` option. | ||
For example, when the following configuration is given, | ||
```yaml | ||
# i18n.yml | ||
translations: | ||
# translation1 | ||
- src: 'test.js' | ||
locale: | ||
include: ['ja'] | ||
patterns: | ||
- pattern: foo | ||
replace: '${foo}' | ||
# translation2 | ||
- src: 'test.js' | ||
locale: | ||
exclude: ['ja'] | ||
patterns: | ||
- pattern: bar | ||
replace: '${bar}' | ||
# translation3 | ||
- src: 'test.js' | ||
patterns: | ||
- pattern: baz | ||
replace: '${baz}' | ||
# ja.yml | ||
foo: hoge | ||
bar: fuga | ||
baz: piyo | ||
``` | ||
the following input file | ||
``` | ||
foo | ||
bar | ||
baz | ||
``` | ||
will be converted into: | ||
``` | ||
hoge | ||
bar | ||
piyo | ||
``` | ||
`translation1` and `translation3` can be applied to `ja` locale (`foo` -> `hoge`, `baz` -> `piyo`), but `translation2` (`bar` -> `fuga`) is not applied to `ja` config due to `locale.exclude`. | ||
## License | ||
MIT |
210
src/index.js
@@ -7,3 +7,3 @@ 'use strict'; | ||
import 'babel-polyfill'; | ||
import { Transform } from 'stream'; | ||
import Translator from './translator'; | ||
const async = require('async'); | ||
@@ -193,2 +193,26 @@ const yaml = require('js-yaml'); | ||
return new Promise((resolve, reject) => { | ||
if (t.locale) { | ||
let shouldContinue = true; | ||
if (t.locale.include) { | ||
shouldContinue = false; | ||
for (let l of t.locale.include) { | ||
if (l === this.options.locale) { | ||
shouldContinue = true; | ||
break; | ||
} | ||
} | ||
} else if (t.locale.exclude) { | ||
shouldContinue = true; | ||
for (let l of t.locale.exclude) { | ||
if (l === this.options.locale) { | ||
shouldContinue = false; | ||
break; | ||
} | ||
} | ||
} | ||
if (!shouldContinue) { | ||
resolve(); | ||
return; | ||
} | ||
} | ||
let srcGlob = t.src || '**/*'; | ||
@@ -350,185 +374,1 @@ let srcPaths = path.join(this.options.dest, srcGlob); | ||
} | ||
class Translator extends Transform { | ||
constructor(translation) { | ||
super({ objectMode: true }); | ||
this.t = translation; | ||
this.matched = false; | ||
this.buffer = []; | ||
this.beginBuffer = []; | ||
this.endBuffer = []; | ||
this.pendingPatterns = []; | ||
this.inputEnd = false; | ||
} | ||
_transform(chunk, encoding, done) { | ||
var data = chunk.toString(); | ||
if (this.lastLineData) { | ||
data = this.lastLineData + data; | ||
} | ||
var lines = data.split(NEWLINE); | ||
this.lastLineData = lines.splice(lines.length - 1, 1)[0]; | ||
lines.forEach(function(line) { | ||
this.buffer.push(line); | ||
}.bind(this)); | ||
this.process(); | ||
done(); | ||
} | ||
_flush(done) { | ||
if (this.lastLineData) { | ||
this.buffer.push(this.lastLineData); | ||
} | ||
this.inputEnd = true; | ||
this.process(); | ||
this.lastLineData = null; | ||
this.buffer = null; | ||
done(); | ||
} | ||
process() { | ||
while (this.buffer.length) { | ||
if (!this.processLine(this.t, this.buffer.shift())) { | ||
// Need to wait next data | ||
break; | ||
} | ||
} | ||
} | ||
processLine(t, line) { | ||
let result = line; | ||
// If pendingPatterns are not empty, | ||
// it means that the first pattern need more lines. | ||
if (0 === this.pendingPatterns.length) { | ||
t.patterns.forEach((p) => { | ||
this.pendingPatterns.push(p); | ||
}); | ||
} | ||
while (this.pendingPatterns.length) { | ||
let p = this.pendingPatterns.shift(); | ||
if (!p.resolved) { | ||
continue; | ||
} | ||
let before = result; | ||
let beforeMultiline = before; | ||
let patternSource = p.pattern instanceof RegExp ? p.pattern.source : p.pattern; | ||
let patternLines = patternSource | ||
// Usually the pattern includes ([^\n]*) to express a line | ||
// in multiline expression, so this should be removed | ||
// to know how many lines this pattern requires. | ||
.replace('[^\\n]', '') | ||
.split('\\n').length; | ||
let consumedBuffers = 0; | ||
if (1 < patternLines) { | ||
let currentLines = result.split(NEWLINE).length; | ||
if (patternLines - currentLines <= this.buffer.length) { | ||
for (let i = 0; i < patternLines - currentLines; i++) { | ||
result += NEWLINE + this.buffer[i]; | ||
beforeMultiline = result; | ||
consumedBuffers++; | ||
} | ||
} else if (this.inputEnd) { | ||
// We should give up this pattern to be matched | ||
// because there's no more data to read. | ||
continue; | ||
} else { | ||
// If the input is not ended, | ||
// put the current pattern and result back to the buffer | ||
// and wait next data to be arrived. | ||
this.pendingPatterns.unshift(p); | ||
this.buffer.unshift(result); | ||
return false; | ||
} | ||
} | ||
result = this.applyToResolved(result, p, p.pattern, p.exclude, p.flags); | ||
if (p.insert && p.insert.resolved) { | ||
if (p.insert.at === INSERT_AT_BEGIN) { | ||
if (this.beginBuffer.indexOf(p.insert.resolved) < 0) { | ||
this.beginBuffer.push(p.insert.resolved); | ||
} | ||
} else if (p.insert.at === INSERT_AT_END) { | ||
if (this.endBuffer.indexOf(p.insert.resolved) < 0) { | ||
this.endBuffer.push(p.insert.resolved); | ||
} | ||
} | ||
} | ||
if (beforeMultiline === result) { | ||
// result might include the next lines to look-ahead, | ||
// but the next pattern should process the first line of the result. | ||
// So result should be reverted to the value | ||
// of the beginning of the current loop. | ||
result = before; | ||
continue; | ||
} | ||
// We should consume looked-ahead buffers only when they match the pattern. | ||
if (0 < consumedBuffers) { | ||
for (let i = consumedBuffers; 0 < i; i--) { | ||
this.buffer.shift(); | ||
} | ||
} | ||
this.matched = true; | ||
if (t.conditionals) { | ||
for (let c of t.conditionals) { | ||
if (!c.insert || !c.insert.resolved) { | ||
continue; | ||
} | ||
if (c.insert.at === INSERT_AT_BEGIN) { | ||
if (this.beginBuffer.indexOf(c.insert.resolved) < 0) { | ||
this.beginBuffer.push(c.insert.resolved); | ||
} | ||
} else if (c.insert.at === INSERT_AT_END) { | ||
if (this.endBuffer.indexOf(c.insert.resolved) < 0) { | ||
this.endBuffer.push(c.insert.resolved); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
// TODO Preserve original newline if possible | ||
this.push(result + NEWLINE); | ||
return true; | ||
} | ||
applyToResolved(target, obj, pattern, exclude, flags) { | ||
let resolved = obj.resolved; | ||
if (obj.args) { | ||
for (let i = 0; i < obj.args.length; i++) { | ||
let argResolved = obj.argsResolved[i]; | ||
if (argResolved) { | ||
if (argResolved.replace && typeof argResolved.replace !== 'function') { | ||
if (argResolved.resolved) { | ||
resolved = this.applyToArgResolved(resolved, argResolved, `{${i}}`); | ||
} else { | ||
resolved = resolved.replace(`{${i}}`, argResolved.replace); | ||
} | ||
} else { | ||
resolved = resolved.replace(`{${i}}`, argResolved); | ||
} | ||
} else { | ||
resolved = resolved.replace(`{${i}}`, obj.args[i]); | ||
} | ||
} | ||
} | ||
let exp = flags ? new RegExp(pattern, flags) : pattern; | ||
let result = target.replace(exp, resolved); | ||
if (exclude && result !== target && target.match(exclude)) { | ||
return target; | ||
} | ||
return result; | ||
} | ||
applyToArgResolved(target, obj, pattern) { | ||
if (obj.args) { | ||
for (let i = 0; i < obj.args.length; i++) { | ||
let argResolved = obj.argsResolved[i]; | ||
if (argResolved) { | ||
obj.resolved = this.applyToArgResolved(obj.resolved, argResolved, `{${i}}`); | ||
} else { | ||
obj.resolved = obj.resolved.replace(`{${i}}`, obj.args[i]); | ||
} | ||
} | ||
} | ||
return target.replace(pattern, obj.resolved); | ||
} | ||
} |
74611
9
1488
676