UNPKG

parse-js

Version:

Utility library for object structure conversion.

70 lines (60 loc) 2.45 kB
'use strict'; 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;