parse-js
Version:
Utility library for object structure conversion.
70 lines (60 loc) • 2.45 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var SNAKE_CASE = 'SNAKE_CASE';
var CAMEL_CASE = 'CAMEL_CASE';
function ucfirst(str) {
return str.replace(/^[a-z]/, function (l) {
return l.toUpperCase();
});
}
var SUFFIXES = {
SNAKE_CASE: {
create: function create(language) {
return '_' + language;
},
restore: function restore(suffix) {
return suffix.replace(/^_/, '');
}
},
CAMEL_CASE: {
create: function create(language) {
return ucfirst(language);
},
restore: function restore(suffix) {
return suffix.toLowerCase();
}
}
};
var regexCache = {};
function compileRegex(languages, suffixer) {
var langSuffix = languages.map(function (l) {
return suffixer(l);
}).join('|');
if (!regexCache[langSuffix]) regexCache[langSuffix] = new RegExp("(.+)(".concat(langSuffix, ")$"));
return regexCache[langSuffix];
}
function createRestorer(casing) {
if (_typeof(casing) != 'object') casing = SUFFIXES[casing];
if (!casing || typeof casing.restore != 'function') throw new Error('Invalid multilingual suffixer specified');
return casing.restore;
}
function createSuffixer(casing) {
if (_typeof(casing) != 'object') casing = SUFFIXES[casing];
if (!casing || typeof casing.create != 'function') throw new Error('Invalid multilingual suffixer specified');
return casing.create;
}
function MultilingualTransformer(languages) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
languageCase = _ref.languageCase;
languages = languages || this.getOption('multilingual.languages') || [];
languageCase = languageCase || this.getOption('multilingual.languageCase') || CAMEL_CASE;
var suffixer = createSuffixer(languageCase);
var restorer = createRestorer(languageCase);
var regex = compileRegex(languages, suffixer);
return this.match(regex).group(regex, 1, 2).map(function (p) {
return p.rename(restorer, suffixer);
});
}
MultilingualTransformer.SNAKE_CASE = SNAKE_CASE;
MultilingualTransformer.CAMEL_CASE = CAMEL_CASE;
module.exports = MultilingualTransformer;