From c816e4f4a34fe1d0eb438768d7c1ab7e84f20cf9 Mon Sep 17 00:00:00 2001 From: fzn0x Date: Sun, 21 Jul 2024 15:58:41 +0700 Subject: [PATCH] chore: build --- browser/yoi18n-browser.min.js.map | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/yoi18n-browser.min.js.map b/browser/yoi18n-browser.min.js.map index a09a37e..430b573 100644 --- a/browser/yoi18n-browser.min.js.map +++ b/browser/yoi18n-browser.min.js.map @@ -1 +1 @@ -{"version":3,"file":"yoi18n-browser.min.js","mappings":"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","sources":["webpack://yoi18n/webpack/universalModuleDefinition","webpack://yoi18n/external umd \"{}\"","webpack://yoi18n/webpack/bootstrap","webpack://yoi18n/webpack/runtime/compat get default export","webpack://yoi18n/webpack/runtime/define property getters","webpack://yoi18n/webpack/runtime/hasOwnProperty shorthand","webpack://yoi18n/webpack/runtime/make namespace object","webpack://yoi18n/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"{}\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"yoi18n\", [\"{}\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"yoi18n\"] = factory(require(\"{}\"));\n\telse\n\t\troot[\"yoi18n\"] = factory(root[\"{}\"]);\n})(self, (__WEBPACK_EXTERNAL_MODULE__324__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__324__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { readFileSync } from 'node:fs'\n\n// Helper function to read files\nfunction readFile(filePath: string): string {\n return readFileSync(filePath, 'utf-8')\n}\n\nfunction parseCookies(cookieHeader: string | undefined): Record {\n const cookies: Record = {}\n if (!cookieHeader) {\n return cookies\n }\n\n cookieHeader.split(';').forEach((cookie) => {\n const [name, ...rest] = cookie.split('=')\n if (name) {\n cookies[name.trim()] = decodeURIComponent(rest.join('='))\n }\n })\n\n return cookies\n}\n\nfunction parseQueryString(queryString: string): Record {\n const query: Record = {}\n if (!queryString) {\n return query\n }\n\n queryString\n .replace(/^\\?/, '')\n .split('&')\n .forEach((param) => {\n const [key, value] = param.split('=')\n if (key && value) {\n query[key] = decodeURIComponent(value)\n }\n })\n\n return query\n}\n\nfunction loadJSON(filePath: string): Promise> {\n return JSON.parse(readFile(filePath))\n}\n\ninterface I18nConfig {\n namespace: Record<\n string,\n {\n load: string\n type?: string\n storage?: string\n defaultLang: string\n }\n >\n detection: {\n order: string[]\n defaultLang: string\n }\n}\n\nfunction fromCookie(cookies: string | undefined): string | null {\n const parsedCookies = parseCookies(cookies)\n return parsedCookies['lang'] || null\n}\n\nfunction fromPath(reqPath: string): string | null {\n const pathParts = reqPath.split('/')\n const lang = pathParts.find((part) => /^[a-z]{2}$/.test(part))\n return lang || null\n}\n\nfunction fromQuery(queryString: string): string | null {\n const parsedQuery = parseQueryString(queryString)\n return parsedQuery['lang'] || null\n}\n\nfunction detectLanguage(detectionConfig: I18nConfig['detection']) {\n const { order, defaultLang } = detectionConfig\n\n return (req: { headers: { cookie?: string }; url: string }) => {\n for (const method of order) {\n let lang: string | null = null\n if (method === 'cookie') {\n lang = fromCookie(req.headers.cookie)\n } else if (method === 'path') {\n lang = fromPath(req.url)\n } else if (method === 'query') {\n lang = fromQuery(req.url)\n }\n if (lang) {\n return lang\n }\n }\n return defaultLang\n }\n}\n\ninterface TranslateFunction {\n (key: string, req?: { headers: { cookie?: string }; url: string }): string\n switch: (newLang: string, ns: string) => void\n}\n\nfunction i18nInit(config: I18nConfig): TranslateFunction {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const languages: Record = {}\n for (const ns in config.namespace) {\n const namespaceConfig = config.namespace[ns]\n\n if (namespaceConfig) {\n languages[ns] = loadJSON(namespaceConfig.load)\n } else {\n throw new Error('Invalid namespace configuration')\n }\n }\n\n const detectLang = detectLanguage(config.detection)\n\n function t(key: string, req?: { headers: { cookie?: string }; url: string }): string {\n const [ns, langKey] = key.split('.')\n const lang =\n req && Object.keys(req).length\n ? detectLang(req)\n : ns\n ? config?.namespace?.[ns]?.defaultLang || config.detection.defaultLang\n : config.detection.defaultLang\n\n if (ns && langKey && ns in languages && lang in languages[ns]) {\n return languages[ns][lang][langKey] || key\n }\n\n return languages['default'][lang][key] || key\n }\n\n t.switch = (newLang: string, ns: string) => {\n if (!config) {\n throw new Error('Config is undefined')\n }\n\n config.detection.defaultLang = newLang\n\n if (ns) {\n const namespace = config.namespace?.[ns]\n\n if (namespace) {\n namespace.defaultLang = newLang\n } else {\n throw new Error(`Namespace ${ns} not found`)\n }\n }\n }\n\n return t\n}\n\nexport default {\n init: i18nInit,\n}\n"],"names":["root","factory","exports","module","require","define","amd","self","__WEBPACK_EXTERNAL_MODULE__324__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","fromCookie","cookies","parsedCookies","cookieHeader","split","forEach","cookie","name","rest","trim","decodeURIComponent","join","parseCookies","fromQuery","queryString","parsedQuery","query","replace","param","parseQueryString","init","config","languages","ns","namespace","namespaceConfig","Error","filePath","load","JSON","parse","readFileSync","readFile","detectLang","detectionConfig","order","defaultLang","req","method","lang","headers","url","find","part","test","detectLanguage","detection","t","langKey","keys","length","switch","newLang"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"yoi18n-browser.min.js","mappings":"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","sources":["webpack://yoi18n/webpack/universalModuleDefinition","webpack://yoi18n/external umd \"{}\"","webpack://yoi18n/webpack/bootstrap","webpack://yoi18n/webpack/runtime/compat get default export","webpack://yoi18n/webpack/runtime/define property getters","webpack://yoi18n/webpack/runtime/hasOwnProperty shorthand","webpack://yoi18n/webpack/runtime/make namespace object","webpack://yoi18n/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"{}\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"yoi18n\", [\"{}\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"yoi18n\"] = factory(require(\"{}\"));\n\telse\n\t\troot[\"yoi18n\"] = factory(root[\"{}\"]);\n})(self, (__WEBPACK_EXTERNAL_MODULE__324__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__324__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { readFileSync } from 'node:fs'\r\n\r\n// Helper function to read files\r\nfunction readFile(filePath: string): string {\r\n return readFileSync(filePath, 'utf-8')\r\n}\r\n\r\nfunction parseCookies(cookieHeader: string | undefined): Record {\r\n const cookies: Record = {}\r\n if (!cookieHeader) {\r\n return cookies\r\n }\r\n\r\n cookieHeader.split(';').forEach((cookie) => {\r\n const [name, ...rest] = cookie.split('=')\r\n if (name) {\r\n cookies[name.trim()] = decodeURIComponent(rest.join('='))\r\n }\r\n })\r\n\r\n return cookies\r\n}\r\n\r\nfunction parseQueryString(queryString: string): Record {\r\n const query: Record = {}\r\n if (!queryString) {\r\n return query\r\n }\r\n\r\n queryString\r\n .replace(/^\\?/, '')\r\n .split('&')\r\n .forEach((param) => {\r\n const [key, value] = param.split('=')\r\n if (key && value) {\r\n query[key] = decodeURIComponent(value)\r\n }\r\n })\r\n\r\n return query\r\n}\r\n\r\nfunction loadJSON(filePath: string): Promise> {\r\n return JSON.parse(readFile(filePath))\r\n}\r\n\r\ninterface I18nConfig {\r\n namespace: Record<\r\n string,\r\n {\r\n load: string\r\n defaultLang: string\r\n }\r\n >\r\n detection: {\r\n order: string[]\r\n defaultLang: string\r\n }\r\n}\r\n\r\nfunction fromCookie(cookies: string | undefined): string | null {\r\n const parsedCookies = parseCookies(cookies)\r\n return parsedCookies['lang'] || null\r\n}\r\n\r\nfunction fromPath(reqPath: string): string | null {\r\n const pathParts = reqPath.split('/')\r\n const lang = pathParts.find((part) => /^[a-z]{2}$/.test(part))\r\n return lang || null\r\n}\r\n\r\nfunction fromQuery(queryString: string): string | null {\r\n const parsedQuery = parseQueryString(queryString)\r\n return parsedQuery['lang'] || null\r\n}\r\n\r\nfunction detectLanguage(detectionConfig: I18nConfig['detection']) {\r\n const { order, defaultLang } = detectionConfig\r\n\r\n return (req: { headers: { cookie?: string }; url: string }) => {\r\n for (const method of order) {\r\n let lang: string | null = null\r\n if (method === 'cookie') {\r\n lang = fromCookie(req.headers.cookie)\r\n } else if (method === 'path') {\r\n lang = fromPath(req.url)\r\n } else if (method === 'query') {\r\n lang = fromQuery(req.url)\r\n }\r\n if (lang) {\r\n return lang\r\n }\r\n }\r\n return defaultLang\r\n }\r\n}\r\n\r\ninterface TranslateFunction {\r\n (key: string, req?: { headers: { cookie?: string }; url: string }): string\r\n switch: (newLang: string, ns: string) => void\r\n}\r\n\r\nfunction i18nInit(config: I18nConfig): TranslateFunction {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const languages: Record = {}\r\n for (const ns in config.namespace) {\r\n const namespaceConfig = config.namespace[ns]\r\n\r\n if (namespaceConfig) {\r\n languages[ns] = loadJSON(namespaceConfig.load)\r\n } else {\r\n throw new Error('Invalid namespace configuration')\r\n }\r\n }\r\n\r\n const detectLang = detectLanguage(config.detection)\r\n\r\n function t(key: string, req?: { headers: { cookie?: string }; url: string }): string {\r\n const [ns, langKey] = key.split('.')\r\n const lang =\r\n req && Object.keys(req).length\r\n ? detectLang(req)\r\n : ns\r\n ? config?.namespace?.[ns]?.defaultLang || config.detection.defaultLang\r\n : config.detection.defaultLang\r\n\r\n if (ns && langKey && ns in languages && lang in languages[ns]) {\r\n return languages[ns][lang][langKey] || key\r\n }\r\n\r\n return languages['default'][lang][key] || key\r\n }\r\n\r\n t.switch = (newLang: string, ns: string) => {\r\n if (!config) {\r\n throw new Error('Config is undefined')\r\n }\r\n\r\n config.detection.defaultLang = newLang\r\n\r\n if (ns) {\r\n const namespace = config.namespace?.[ns]\r\n\r\n if (namespace) {\r\n namespace.defaultLang = newLang\r\n } else {\r\n throw new Error(`Namespace ${ns} not found`)\r\n }\r\n }\r\n }\r\n\r\n return t\r\n}\r\n\r\nexport default {\r\n init: i18nInit,\r\n}\r\n"],"names":["root","factory","exports","module","require","define","amd","self","__WEBPACK_EXTERNAL_MODULE__324__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","fromCookie","cookies","parsedCookies","cookieHeader","split","forEach","cookie","name","rest","trim","decodeURIComponent","join","parseCookies","fromQuery","queryString","parsedQuery","query","replace","param","parseQueryString","init","config","languages","ns","namespace","namespaceConfig","Error","filePath","load","JSON","parse","readFileSync","readFile","detectLang","detectionConfig","order","defaultLang","req","method","lang","headers","url","find","part","test","detectLanguage","detection","t","langKey","keys","length","switch","newLang"],"sourceRoot":""} \ No newline at end of file