Files
vanillajs-seed/node_modules/i18next-scanner/lib/index.js
2020-05-26 10:37:57 +02:00

147 lines
4.3 KiB
JavaScript

"use strict";
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _eol = _interopRequireDefault(require("eol"));
var _get = _interopRequireDefault(require("lodash/get"));
var _includes = _interopRequireDefault(require("lodash/includes"));
var _vinyl = _interopRequireDefault(require("vinyl"));
var _through = _interopRequireDefault(require("through2"));
var _parser = _interopRequireDefault(require("./parser"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/* eslint-disable no-buffer-constructor */
var transform = function transform(parser, customTransform) {
return function _transform(file, enc, done) {
var options = parser.options;
var content = _fs["default"].readFileSync(file.path, enc);
var extname = _path["default"].extname(file.path);
if ((0, _includes["default"])((0, _get["default"])(options, 'attr.extensions'), extname)) {
// Parse attribute (e.g. data-i18n="key")
parser.parseAttrFromString(content, {
transformOptions: {
filepath: file.path
}
});
}
if ((0, _includes["default"])((0, _get["default"])(options, 'func.extensions'), extname)) {
// Parse translation function (e.g. i18next.t('key'))
parser.parseFuncFromString(content, {
transformOptions: {
filepath: file.path
}
});
}
if ((0, _includes["default"])((0, _get["default"])(options, 'trans.extensions'), extname)) {
// Look for Trans components in JSX
parser.parseTransFromString(content, {
transformOptions: {
filepath: file.path
}
});
}
if (typeof customTransform === 'function') {
this.parser = parser;
customTransform.call(this, file, enc, done);
return;
}
done();
};
};
var flush = function flush(parser, customFlush) {
return function _flush(done) {
var _this = this;
var options = parser.options;
if (typeof customFlush === 'function') {
this.parser = parser;
customFlush.call(this, done);
return;
} // Flush to resource store
var resStore = parser.get({
sort: options.sort
});
var jsonIndent = options.resource.jsonIndent;
var lineEnding = String(options.resource.lineEnding).toLowerCase();
Object.keys(resStore).forEach(function (lng) {
var namespaces = resStore[lng];
Object.keys(namespaces).forEach(function (ns) {
var obj = namespaces[ns];
var resPath = parser.formatResourceSavePath(lng, ns);
var text = JSON.stringify(obj, null, jsonIndent) + '\n';
if (lineEnding === 'auto') {
text = _eol["default"].auto(text);
} else if (lineEnding === '\r\n' || lineEnding === 'crlf') {
text = _eol["default"].crlf(text);
} else if (lineEnding === '\n' || lineEnding === 'lf') {
text = _eol["default"].lf(text);
} else if (lineEnding === '\r' || lineEnding === 'cr') {
text = _eol["default"].cr(text);
} else {
// Defaults to LF
text = _eol["default"].lf(text);
}
var contents = null;
try {
// "Buffer.from(string[, encoding])" is added in Node.js v5.10.0
contents = Buffer.from(text);
} catch (e) {
// Fallback to "new Buffer(string[, encoding])" which is deprecated since Node.js v6.0.0
contents = new Buffer(text);
}
_this.push(new _vinyl["default"]({
path: resPath,
contents: contents
}));
});
});
done();
};
}; // @param {object} options The options object.
// @param {function} [customTransform]
// @param {function} [customFlush]
// @return {object} Returns a through2.obj().
var createStream = function createStream(options, customTransform, customFlush) {
var parser = new _parser["default"](options);
var stream = _through["default"].obj(transform(parser, customTransform), flush(parser, customFlush));
return stream;
}; // Convenience API
module.exports = function () {
var _module$exports;
return (_module$exports = module.exports).createStream.apply(_module$exports, arguments);
}; // Basic API
module.exports.createStream = createStream; // Parser
module.exports.Parser = _parser["default"];