UNPKG

lareact-i18n

Version:

Allows to connect your `Laravel` Framework localization files with `React`.

39 lines (38 loc) 1.81 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = resolver; const recognizer_1 = __importDefault(require("../utils/recognizer")); /** * Resolves the language files for a given locale. * * @param files - The available translation files. * @param locale - The target locale. */ function resolver(files, locale) { const { isJsonLocale, isPhpLocale, getJsonFiles, getPhpFiles } = (0, recognizer_1.default)(files); const jsonFiles = isJsonLocale(locale) ? getJsonFiles(locale).map((file) => files[file]) : []; const phpFiles = isPhpLocale(locale) ? getPhpFiles(locale).map((file) => files[file]) : []; const getType = (obj) => Object.prototype.toString.call(obj); const mergeObjects = (fileList) => { return fileList.reduce((acc, file) => { if (getType(file) === '[object Object]') { return Object.assign(Object.assign({}, acc), file); } if (getType(file) === '[object Function]') { return Object.assign(Object.assign({}, acc), file()); } return acc; }, {}); }; const mergedJson = mergeObjects(jsonFiles); const mergedPhp = mergeObjects(phpFiles); const asyncJson = jsonFiles.find((file) => ['[object Promise]', '[object Module]'].includes(getType(file))); const asyncPhp = phpFiles.find((file) => ['[object Promise]', '[object Module]'].includes(getType(file))); if (asyncJson || asyncPhp) { return [asyncJson ? asyncJson : { default: mergedJson }, asyncPhp ? asyncPhp : { default: mergedPhp }]; } return [{ default: mergedJson }, { default: mergedPhp }]; }