@intlayer/docs 5.5.12 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/types/common.d.ts +2 -0
- package/dist/types/common.d.ts.map +1 -1
- package/docs/ar/configuration.md +23 -18
- package/docs/ar/how_works_intlayer.md +1 -1
- package/docs/ar/intlayer_CMS.md +1 -0
- package/docs/ar/intlayer_cli.md +292 -177
- package/docs/ar/intlayer_visual_editor.md +1 -0
- package/docs/ar/intlayer_with_angular.md +1 -0
- package/docs/ar/intlayer_with_create_react_app.md +1 -0
- package/docs/ar/intlayer_with_lynx+react.md +1 -0
- package/docs/ar/intlayer_with_nextjs_14.md +1 -0
- package/docs/ar/intlayer_with_nextjs_15.md +3 -1
- package/docs/ar/intlayer_with_nuxt.md +1 -0
- package/docs/ar/intlayer_with_react_native+expo.md +1 -0
- package/docs/ar/intlayer_with_vite+preact.md +4 -3
- package/docs/ar/intlayer_with_vite+react.md +8 -4
- package/docs/ar/intlayer_with_vite+solid.md +4 -3
- package/docs/ar/intlayer_with_vite+svelte.md +4 -3
- package/docs/ar/intlayer_with_vite+vue.md +5 -4
- package/docs/ar/mcp_server.md +126 -92
- package/docs/de/configuration.md +23 -18
- package/docs/de/how_works_intlayer.md +1 -1
- package/docs/de/intlayer_CMS.md +1 -0
- package/docs/de/intlayer_cli.md +291 -171
- package/docs/de/intlayer_visual_editor.md +1 -0
- package/docs/de/intlayer_with_angular.md +1 -0
- package/docs/de/intlayer_with_create_react_app.md +1 -0
- package/docs/de/intlayer_with_lynx+react.md +1 -0
- package/docs/de/intlayer_with_nextjs_14.md +1 -0
- package/docs/de/intlayer_with_nextjs_15.md +3 -1
- package/docs/de/intlayer_with_nuxt.md +1 -0
- package/docs/de/intlayer_with_react_native+expo.md +1 -0
- package/docs/de/intlayer_with_vite+preact.md +4 -3
- package/docs/de/intlayer_with_vite+react.md +7 -4
- package/docs/de/intlayer_with_vite+solid.md +4 -3
- package/docs/de/intlayer_with_vite+svelte.md +4 -3
- package/docs/de/intlayer_with_vite+vue.md +5 -4
- package/docs/de/mcp_server.md +116 -112
- package/docs/en/configuration.md +41 -25
- package/docs/en/how_works_intlayer.md +1 -1
- package/docs/en/intlayer_CMS.md +1 -0
- package/docs/en/intlayer_cli.md +246 -138
- package/docs/en/intlayer_visual_editor.md +1 -0
- package/docs/en/intlayer_with_angular.md +1 -0
- package/docs/en/intlayer_with_create_react_app.md +1 -0
- package/docs/en/intlayer_with_lynx+react.md +1 -0
- package/docs/en/intlayer_with_nextjs_14.md +1 -0
- package/docs/en/intlayer_with_nextjs_15.md +3 -1
- package/docs/en/intlayer_with_nuxt.md +1 -0
- package/docs/en/intlayer_with_react_native+expo.md +1 -0
- package/docs/en/intlayer_with_vite+preact.md +6 -3
- package/docs/en/intlayer_with_vite+react.md +9 -3
- package/docs/en/intlayer_with_vite+solid.md +4 -3
- package/docs/en/intlayer_with_vite+svelte.md +4 -3
- package/docs/en/intlayer_with_vite+vue.md +7 -4
- package/docs/en/mcp_server.md +100 -107
- package/docs/en-GB/configuration.md +23 -18
- package/docs/en-GB/how_works_intlayer.md +1 -1
- package/docs/en-GB/intlayer_CMS.md +1 -0
- package/docs/en-GB/intlayer_cli.md +257 -138
- package/docs/en-GB/intlayer_visual_editor.md +1 -0
- package/docs/en-GB/intlayer_with_angular.md +1 -0
- package/docs/en-GB/intlayer_with_create_react_app.md +1 -0
- package/docs/en-GB/intlayer_with_lynx+react.md +1 -0
- package/docs/en-GB/intlayer_with_nextjs_14.md +1 -0
- package/docs/en-GB/intlayer_with_nextjs_15.md +3 -1
- package/docs/en-GB/intlayer_with_nuxt.md +1 -0
- package/docs/en-GB/intlayer_with_react_native+expo.md +1 -0
- package/docs/en-GB/intlayer_with_vite+preact.md +4 -3
- package/docs/en-GB/intlayer_with_vite+react.md +7 -4
- package/docs/en-GB/intlayer_with_vite+solid.md +4 -3
- package/docs/en-GB/intlayer_with_vite+svelte.md +4 -3
- package/docs/en-GB/intlayer_with_vite+vue.md +5 -4
- package/docs/en-GB/mcp_server.md +116 -82
- package/docs/es/configuration.md +28 -19
- package/docs/es/how_works_intlayer.md +1 -1
- package/docs/es/intlayer_CMS.md +1 -0
- package/docs/es/intlayer_cli.md +283 -164
- package/docs/es/intlayer_visual_editor.md +1 -0
- package/docs/es/intlayer_with_angular.md +1 -0
- package/docs/es/intlayer_with_create_react_app.md +1 -0
- package/docs/es/intlayer_with_lynx+react.md +1 -0
- package/docs/es/intlayer_with_nextjs_14.md +1 -0
- package/docs/es/intlayer_with_nextjs_15.md +3 -1
- package/docs/es/intlayer_with_nuxt.md +1 -0
- package/docs/es/intlayer_with_react_native+expo.md +1 -0
- package/docs/es/intlayer_with_vite+preact.md +4 -3
- package/docs/es/intlayer_with_vite+react.md +7 -4
- package/docs/es/intlayer_with_vite+solid.md +4 -3
- package/docs/es/intlayer_with_vite+svelte.md +4 -3
- package/docs/es/intlayer_with_vite+vue.md +5 -4
- package/docs/es/mcp_server.md +120 -86
- package/docs/es/vs_code_extension.md +1 -0
- package/docs/fr/configuration.md +23 -13
- package/docs/fr/how_works_intlayer.md +1 -1
- package/docs/fr/intlayer_CMS.md +1 -0
- package/docs/fr/intlayer_cli.md +280 -184
- package/docs/fr/intlayer_visual_editor.md +1 -0
- package/docs/fr/intlayer_with_angular.md +1 -0
- package/docs/fr/intlayer_with_create_react_app.md +1 -0
- package/docs/fr/intlayer_with_lynx+react.md +1 -0
- package/docs/fr/intlayer_with_nextjs_14.md +1 -0
- package/docs/fr/intlayer_with_nextjs_15.md +3 -1
- package/docs/fr/intlayer_with_nuxt.md +1 -0
- package/docs/fr/intlayer_with_react_native+expo.md +1 -0
- package/docs/fr/intlayer_with_vite+preact.md +5 -4
- package/docs/fr/intlayer_with_vite+react.md +7 -4
- package/docs/fr/intlayer_with_vite+solid.md +4 -3
- package/docs/fr/intlayer_with_vite+svelte.md +4 -3
- package/docs/fr/intlayer_with_vite+vue.md +5 -4
- package/docs/fr/mcp_server.md +121 -87
- package/docs/hi/configuration.md +23 -18
- package/docs/hi/how_works_intlayer.md +1 -1
- package/docs/hi/intlayer_CMS.md +1 -0
- package/docs/hi/intlayer_cli.md +295 -174
- package/docs/hi/intlayer_visual_editor.md +1 -0
- package/docs/hi/intlayer_with_angular.md +1 -0
- package/docs/hi/intlayer_with_create_react_app.md +1 -0
- package/docs/hi/intlayer_with_lynx+react.md +1 -0
- package/docs/hi/intlayer_with_nextjs_14.md +1 -0
- package/docs/hi/intlayer_with_nextjs_15.md +3 -1
- package/docs/hi/intlayer_with_nuxt.md +1 -0
- package/docs/hi/intlayer_with_react_native+expo.md +1 -0
- package/docs/hi/intlayer_with_vite+preact.md +4 -3
- package/docs/hi/intlayer_with_vite+react.md +7 -4
- package/docs/hi/intlayer_with_vite+solid.md +4 -3
- package/docs/hi/intlayer_with_vite+svelte.md +4 -3
- package/docs/hi/intlayer_with_vite+vue.md +5 -4
- package/docs/hi/mcp_server.md +118 -84
- package/docs/it/configuration.md +23 -18
- package/docs/it/how_works_intlayer.md +1 -1
- package/docs/it/intlayer_CMS.md +1 -0
- package/docs/it/intlayer_cli.md +282 -167
- package/docs/it/intlayer_visual_editor.md +1 -0
- package/docs/it/intlayer_with_angular.md +1 -0
- package/docs/it/intlayer_with_create_react_app.md +1 -0
- package/docs/it/intlayer_with_lynx+react.md +1 -0
- package/docs/it/intlayer_with_nextjs_14.md +1 -0
- package/docs/it/intlayer_with_nextjs_15.md +3 -1
- package/docs/it/intlayer_with_nuxt.md +1 -0
- package/docs/it/intlayer_with_react_native+expo.md +1 -0
- package/docs/it/intlayer_with_vite+preact.md +4 -3
- package/docs/it/intlayer_with_vite+react.md +7 -4
- package/docs/it/intlayer_with_vite+solid.md +4 -3
- package/docs/it/intlayer_with_vite+svelte.md +4 -3
- package/docs/it/intlayer_with_vite+vue.md +4 -4
- package/docs/it/mcp_server.md +120 -86
- package/docs/ja/configuration.md +23 -18
- package/docs/ja/how_works_intlayer.md +1 -1
- package/docs/ja/intlayer_CMS.md +1 -0
- package/docs/ja/intlayer_cli.md +285 -168
- package/docs/ja/intlayer_visual_editor.md +1 -0
- package/docs/ja/intlayer_with_angular.md +1 -0
- package/docs/ja/intlayer_with_create_react_app.md +1 -0
- package/docs/ja/intlayer_with_lynx+react.md +1 -0
- package/docs/ja/intlayer_with_nextjs_14.md +1 -0
- package/docs/ja/intlayer_with_nextjs_15.md +3 -1
- package/docs/ja/intlayer_with_nuxt.md +1 -0
- package/docs/ja/intlayer_with_react_native+expo.md +1 -0
- package/docs/ja/intlayer_with_vite+preact.md +4 -3
- package/docs/ja/intlayer_with_vite+react.md +7 -4
- package/docs/ja/intlayer_with_vite+solid.md +4 -3
- package/docs/ja/intlayer_with_vite+svelte.md +4 -3
- package/docs/ja/intlayer_with_vite+vue.md +5 -4
- package/docs/ja/mcp_server.md +121 -85
- package/docs/ko/configuration.md +23 -18
- package/docs/ko/how_works_intlayer.md +1 -1
- package/docs/ko/intlayer_CMS.md +1 -0
- package/docs/ko/intlayer_cli.md +291 -175
- package/docs/ko/intlayer_visual_editor.md +1 -0
- package/docs/ko/intlayer_with_angular.md +1 -0
- package/docs/ko/intlayer_with_create_react_app.md +1 -0
- package/docs/ko/intlayer_with_lynx+react.md +1 -0
- package/docs/ko/intlayer_with_nextjs_14.md +1 -0
- package/docs/ko/intlayer_with_nextjs_15.md +3 -1
- package/docs/ko/intlayer_with_nuxt.md +1 -0
- package/docs/ko/intlayer_with_react_native+expo.md +1 -0
- package/docs/ko/intlayer_with_vite+preact.md +4 -3
- package/docs/ko/intlayer_with_vite+react.md +7 -4
- package/docs/ko/intlayer_with_vite+solid.md +4 -3
- package/docs/ko/intlayer_with_vite+svelte.md +4 -3
- package/docs/ko/intlayer_with_vite+vue.md +5 -4
- package/docs/ko/mcp_server.md +117 -83
- package/docs/pt/configuration.md +23 -18
- package/docs/pt/how_works_intlayer.md +1 -1
- package/docs/pt/intlayer_CMS.md +1 -0
- package/docs/pt/intlayer_cli.md +274 -154
- package/docs/pt/intlayer_visual_editor.md +1 -0
- package/docs/pt/intlayer_with_angular.md +1 -0
- package/docs/pt/intlayer_with_create_react_app.md +1 -0
- package/docs/pt/intlayer_with_lynx+react.md +1 -0
- package/docs/pt/intlayer_with_nextjs_14.md +1 -0
- package/docs/pt/intlayer_with_nextjs_15.md +3 -1
- package/docs/pt/intlayer_with_nuxt.md +1 -0
- package/docs/pt/intlayer_with_react_native+expo.md +1 -0
- package/docs/pt/intlayer_with_vite+preact.md +4 -3
- package/docs/pt/intlayer_with_vite+react.md +7 -4
- package/docs/pt/intlayer_with_vite+solid.md +4 -3
- package/docs/pt/intlayer_with_vite+svelte.md +4 -3
- package/docs/pt/intlayer_with_vite+vue.md +4 -4
- package/docs/pt/mcp_server.md +121 -87
- package/docs/ru/configuration.md +23 -18
- package/docs/ru/how_works_intlayer.md +1 -1
- package/docs/ru/intlayer_CMS.md +1 -0
- package/docs/ru/intlayer_cli.md +287 -170
- package/docs/ru/intlayer_visual_editor.md +1 -0
- package/docs/ru/intlayer_with_angular.md +1 -0
- package/docs/ru/intlayer_with_create_react_app.md +1 -0
- package/docs/ru/intlayer_with_lynx+react.md +1 -0
- package/docs/ru/intlayer_with_nextjs_14.md +1 -0
- package/docs/ru/intlayer_with_nextjs_15.md +3 -1
- package/docs/ru/intlayer_with_nuxt.md +1 -0
- package/docs/ru/intlayer_with_react_native+expo.md +1 -0
- package/docs/ru/intlayer_with_vite+preact.md +4 -3
- package/docs/ru/intlayer_with_vite+react.md +7 -4
- package/docs/ru/intlayer_with_vite+solid.md +4 -3
- package/docs/ru/intlayer_with_vite+svelte.md +4 -3
- package/docs/ru/intlayer_with_vite+vue.md +5 -4
- package/docs/ru/mcp_server.md +119 -85
- package/docs/zh/configuration.md +23 -18
- package/docs/zh/how_works_intlayer.md +1 -1
- package/docs/zh/intlayer_CMS.md +1 -0
- package/docs/zh/intlayer_cli.md +275 -155
- package/docs/zh/intlayer_visual_editor.md +1 -0
- package/docs/zh/intlayer_with_angular.md +1 -0
- package/docs/zh/intlayer_with_create_react_app.md +1 -0
- package/docs/zh/intlayer_with_lynx+react.md +1 -0
- package/docs/zh/intlayer_with_nextjs_14.md +1 -0
- package/docs/zh/intlayer_with_nextjs_15.md +3 -1
- package/docs/zh/intlayer_with_nuxt.md +1 -0
- package/docs/zh/intlayer_with_react_native+expo.md +1 -0
- package/docs/zh/intlayer_with_vite+preact.md +4 -3
- package/docs/zh/intlayer_with_vite+react.md +7 -4
- package/docs/zh/intlayer_with_vite+solid.md +4 -3
- package/docs/zh/intlayer_with_vite+svelte.md +4 -3
- package/docs/zh/intlayer_with_vite+vue.md +5 -4
- package/docs/zh/mcp_server.md +119 -86
- package/package.json +10 -10
- package/src/common.ts +2 -0
package/dist/cjs/common.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common.ts"],"sourcesContent":["import {\n getLocalizedUrl,\n getMarkdownMetadata,\n Locales,\n LocalesValues,\n} from 'intlayer';\nimport { join } from 'path';\n\nexport const defaultLocale = Locales.ENGLISH;\n\nexport const GITHUB_URL_PREFIX =\n 'https://github.com/aymericzip/intlayer/blob/main/docs';\nexport const URL_PREFIX = 'https://intlayer.org/';\n\nexport const getFiles = async <\n F extends Record<`./${string}`, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n lang: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<string, string>> => {\n const filesEntries = await Promise.all(\n Object.entries(files)\n .map(([key, value]) => [key, value[lang as LocalesValues]])\n .map(async ([key, value]) => [key, await value])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFile = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<string> => {\n const fileRecord = files[docKey];\n\n if (!fileRecord) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n const file = await files[docKey]?.[locale];\n\n if (!file) {\n const englishFile = await files[docKey][defaultLocale as LocalesValues];\n\n if (!englishFile) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n return englishFile;\n }\n\n return file;\n};\n\nexport type FileMetadata = {\n docKey: string;\n url: string;\n relativeUrl: string;\n githubUrl: string;\n title: string;\n slugs: string[];\n description: string;\n keywords: string[];\n updatedAt: string;\n createdAt: string;\n author?: string;\n};\n\nexport const formatMetadata = (\n docKey: string,\n file: string,\n locale: LocalesValues = defaultLocale as LocalesValues\n): FileMetadata => {\n const metadata = getMarkdownMetadata(file);\n const relativeUrl = join('/', ...(metadata.slugs ?? []));\n\n const slicedDocKey = docKey.slice(1);\n\n return {\n ...metadata,\n docKey,\n githubUrl: `${GITHUB_URL_PREFIX}${slicedDocKey}`.replace(\n '/en/',\n `/${locale}/`\n ),\n relativeUrl: getLocalizedUrl(relativeUrl, locale),\n url: getLocalizedUrl(join(URL_PREFIX, relativeUrl), locale),\n } as FileMetadata;\n};\n\nexport const getFileMetadata = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n R extends FileMetadata,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<R> => {\n try {\n const file = await getFile(files, docKey, locale);\n\n return formatMetadata(docKey as string, file, locale) as R;\n } catch (error) {\n console.log({ error, docKey, locale });\n throw error;\n }\n};\n\nexport const getFileMetadataRecord = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<keyof F, FileMetadata>> => {\n const filesEntries = await Promise.all(\n Object.entries(files).map(async ([key]) => [\n key,\n await getFileMetadata(files, key as keyof F, locale),\n ])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFileMetadataBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray: FileMetadata[] = Object.values(filesMetadata).filter(\n (fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n if (locale !== defaultLocale) {\n const localizedFileMetadata = await Promise.all(\n fileMetadataArray.map(\n async (fileMetadata) =>\n await getFileMetadata(files, fileMetadata.docKey, locale)\n )\n );\n\n return localizedFileMetadata;\n }\n\n return fileMetadataArray;\n};\n\nexport const getFileBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray = Object.values(filesMetadata).filter((fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n const fileList = await Promise.all(\n fileMetadataArray.map(async (fileMetadata) => {\n const file = await getFile(files, fileMetadata.docKey, locale);\n return file;\n })\n );\n\n return fileList;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKO;AACP,kBAAqB;AAEd,MAAM,gBAAgB,wBAAQ;AAE9B,MAAM,oBACX;AACK,MAAM,aAAa;AAEnB,MAAM,WAAW,OAGtB,OACA,OAAsB,kBACc;AACpC,QAAM,eAAe,MAAM,QAAQ;AAAA,IACjC,OAAO,QAAQ,KAAK,EACjB,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,IAAqB,CAAC,CAAC,EACzD,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,CAAC;AAAA,EACnD;AACA,QAAM,cAAc,OAAO,YAAY,YAAY;AACnD,SAAO;AACT;AAEO,MAAM,UAAU,OAGrB,OACA,QACA,SAAwB,kBACJ;AACpB,QAAM,aAAa,MAAM,MAAM;AAE/B,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,QAAQ,MAAgB,YAAY;AAAA,EACtD;AAEA,QAAM,OAAO,MAAM,MAAM,MAAM,IAAI,MAAM;AAEzC,MAAI,CAAC,MAAM;AACT,UAAM,cAAc,MAAM,MAAM,MAAM,EAAE,aAA8B;AAEtE,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI,MAAM,QAAQ,MAAgB,YAAY;AAAA,IACtD;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;
|
|
1
|
+
{"version":3,"sources":["../../src/common.ts"],"sourcesContent":["import {\n getLocalizedUrl,\n getMarkdownMetadata,\n Locales,\n LocalesValues,\n} from 'intlayer';\nimport { join } from 'path';\n\nexport const defaultLocale = Locales.ENGLISH;\n\nexport const GITHUB_URL_PREFIX =\n 'https://github.com/aymericzip/intlayer/blob/main/docs';\nexport const URL_PREFIX = 'https://intlayer.org/';\n\nexport const getFiles = async <\n F extends Record<`./${string}`, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n lang: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<string, string>> => {\n const filesEntries = await Promise.all(\n Object.entries(files)\n .map(([key, value]) => [key, value[lang as LocalesValues]])\n .map(async ([key, value]) => [key, await value])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFile = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<string> => {\n const fileRecord = files[docKey];\n\n if (!fileRecord) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n const file = await files[docKey]?.[locale];\n\n if (!file) {\n const englishFile = await files[docKey][defaultLocale as LocalesValues];\n\n if (!englishFile) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n return englishFile;\n }\n\n return file;\n};\n\nexport type FileMetadata = {\n docKey: string;\n url: string;\n relativeUrl: string;\n githubUrl: string;\n title: string;\n slugs: string[];\n description: string;\n keywords: string[];\n updatedAt: string;\n createdAt: string;\n author?: string;\n youtubeVideo?: string;\n applicationTemplate?: string;\n};\n\nexport const formatMetadata = (\n docKey: string,\n file: string,\n locale: LocalesValues = defaultLocale as LocalesValues\n): FileMetadata => {\n const metadata = getMarkdownMetadata(file);\n const relativeUrl = join('/', ...(metadata.slugs ?? []));\n\n const slicedDocKey = docKey.slice(1);\n\n return {\n ...metadata,\n docKey,\n githubUrl: `${GITHUB_URL_PREFIX}${slicedDocKey}`.replace(\n '/en/',\n `/${locale}/`\n ),\n relativeUrl: getLocalizedUrl(relativeUrl, locale),\n url: getLocalizedUrl(join(URL_PREFIX, relativeUrl), locale),\n } as FileMetadata;\n};\n\nexport const getFileMetadata = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n R extends FileMetadata,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<R> => {\n try {\n const file = await getFile(files, docKey, locale);\n\n return formatMetadata(docKey as string, file, locale) as R;\n } catch (error) {\n console.log({ error, docKey, locale });\n throw error;\n }\n};\n\nexport const getFileMetadataRecord = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<keyof F, FileMetadata>> => {\n const filesEntries = await Promise.all(\n Object.entries(files).map(async ([key]) => [\n key,\n await getFileMetadata(files, key as keyof F, locale),\n ])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFileMetadataBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray: FileMetadata[] = Object.values(filesMetadata).filter(\n (fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n if (locale !== defaultLocale) {\n const localizedFileMetadata = await Promise.all(\n fileMetadataArray.map(\n async (fileMetadata) =>\n await getFileMetadata(files, fileMetadata.docKey, locale)\n )\n );\n\n return localizedFileMetadata;\n }\n\n return fileMetadataArray;\n};\n\nexport const getFileBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray = Object.values(filesMetadata).filter((fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n const fileList = await Promise.all(\n fileMetadataArray.map(async (fileMetadata) => {\n const file = await getFile(files, fileMetadata.docKey, locale);\n return file;\n })\n );\n\n return fileList;\n};\n"],"mappings":"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","names":[]}
|
package/dist/esm/common.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common.ts"],"sourcesContent":["import {\n getLocalizedUrl,\n getMarkdownMetadata,\n Locales,\n LocalesValues,\n} from 'intlayer';\nimport { join } from 'path';\n\nexport const defaultLocale = Locales.ENGLISH;\n\nexport const GITHUB_URL_PREFIX =\n 'https://github.com/aymericzip/intlayer/blob/main/docs';\nexport const URL_PREFIX = 'https://intlayer.org/';\n\nexport const getFiles = async <\n F extends Record<`./${string}`, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n lang: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<string, string>> => {\n const filesEntries = await Promise.all(\n Object.entries(files)\n .map(([key, value]) => [key, value[lang as LocalesValues]])\n .map(async ([key, value]) => [key, await value])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFile = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<string> => {\n const fileRecord = files[docKey];\n\n if (!fileRecord) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n const file = await files[docKey]?.[locale];\n\n if (!file) {\n const englishFile = await files[docKey][defaultLocale as LocalesValues];\n\n if (!englishFile) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n return englishFile;\n }\n\n return file;\n};\n\nexport type FileMetadata = {\n docKey: string;\n url: string;\n relativeUrl: string;\n githubUrl: string;\n title: string;\n slugs: string[];\n description: string;\n keywords: string[];\n updatedAt: string;\n createdAt: string;\n author?: string;\n};\n\nexport const formatMetadata = (\n docKey: string,\n file: string,\n locale: LocalesValues = defaultLocale as LocalesValues\n): FileMetadata => {\n const metadata = getMarkdownMetadata(file);\n const relativeUrl = join('/', ...(metadata.slugs ?? []));\n\n const slicedDocKey = docKey.slice(1);\n\n return {\n ...metadata,\n docKey,\n githubUrl: `${GITHUB_URL_PREFIX}${slicedDocKey}`.replace(\n '/en/',\n `/${locale}/`\n ),\n relativeUrl: getLocalizedUrl(relativeUrl, locale),\n url: getLocalizedUrl(join(URL_PREFIX, relativeUrl), locale),\n } as FileMetadata;\n};\n\nexport const getFileMetadata = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n R extends FileMetadata,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<R> => {\n try {\n const file = await getFile(files, docKey, locale);\n\n return formatMetadata(docKey as string, file, locale) as R;\n } catch (error) {\n console.log({ error, docKey, locale });\n throw error;\n }\n};\n\nexport const getFileMetadataRecord = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<keyof F, FileMetadata>> => {\n const filesEntries = await Promise.all(\n Object.entries(files).map(async ([key]) => [\n key,\n await getFileMetadata(files, key as keyof F, locale),\n ])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFileMetadataBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray: FileMetadata[] = Object.values(filesMetadata).filter(\n (fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n if (locale !== defaultLocale) {\n const localizedFileMetadata = await Promise.all(\n fileMetadataArray.map(\n async (fileMetadata) =>\n await getFileMetadata(files, fileMetadata.docKey, locale)\n )\n );\n\n return localizedFileMetadata;\n }\n\n return fileMetadataArray;\n};\n\nexport const getFileBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray = Object.values(filesMetadata).filter((fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n const fileList = await Promise.all(\n fileMetadataArray.map(async (fileMetadata) => {\n const file = await getFile(files, fileMetadata.docKey, locale);\n return file;\n })\n );\n\n return fileList;\n};\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,YAAY;AAEd,MAAM,gBAAgB,QAAQ;AAE9B,MAAM,oBACX;AACK,MAAM,aAAa;AAEnB,MAAM,WAAW,OAGtB,OACA,OAAsB,kBACc;AACpC,QAAM,eAAe,MAAM,QAAQ;AAAA,IACjC,OAAO,QAAQ,KAAK,EACjB,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,IAAqB,CAAC,CAAC,EACzD,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,CAAC;AAAA,EACnD;AACA,QAAM,cAAc,OAAO,YAAY,YAAY;AACnD,SAAO;AACT;AAEO,MAAM,UAAU,OAGrB,OACA,QACA,SAAwB,kBACJ;AACpB,QAAM,aAAa,MAAM,MAAM;AAE/B,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,QAAQ,MAAgB,YAAY;AAAA,EACtD;AAEA,QAAM,OAAO,MAAM,MAAM,MAAM,IAAI,MAAM;AAEzC,MAAI,CAAC,MAAM;AACT,UAAM,cAAc,MAAM,MAAM,MAAM,EAAE,aAA8B;AAEtE,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI,MAAM,QAAQ,MAAgB,YAAY;AAAA,IACtD;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;
|
|
1
|
+
{"version":3,"sources":["../../src/common.ts"],"sourcesContent":["import {\n getLocalizedUrl,\n getMarkdownMetadata,\n Locales,\n LocalesValues,\n} from 'intlayer';\nimport { join } from 'path';\n\nexport const defaultLocale = Locales.ENGLISH;\n\nexport const GITHUB_URL_PREFIX =\n 'https://github.com/aymericzip/intlayer/blob/main/docs';\nexport const URL_PREFIX = 'https://intlayer.org/';\n\nexport const getFiles = async <\n F extends Record<`./${string}`, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n lang: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<string, string>> => {\n const filesEntries = await Promise.all(\n Object.entries(files)\n .map(([key, value]) => [key, value[lang as LocalesValues]])\n .map(async ([key, value]) => [key, await value])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFile = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<string> => {\n const fileRecord = files[docKey];\n\n if (!fileRecord) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n const file = await files[docKey]?.[locale];\n\n if (!file) {\n const englishFile = await files[docKey][defaultLocale as LocalesValues];\n\n if (!englishFile) {\n throw new Error(`File ${docKey as string} not found`);\n }\n\n return englishFile;\n }\n\n return file;\n};\n\nexport type FileMetadata = {\n docKey: string;\n url: string;\n relativeUrl: string;\n githubUrl: string;\n title: string;\n slugs: string[];\n description: string;\n keywords: string[];\n updatedAt: string;\n createdAt: string;\n author?: string;\n youtubeVideo?: string;\n applicationTemplate?: string;\n};\n\nexport const formatMetadata = (\n docKey: string,\n file: string,\n locale: LocalesValues = defaultLocale as LocalesValues\n): FileMetadata => {\n const metadata = getMarkdownMetadata(file);\n const relativeUrl = join('/', ...(metadata.slugs ?? []));\n\n const slicedDocKey = docKey.slice(1);\n\n return {\n ...metadata,\n docKey,\n githubUrl: `${GITHUB_URL_PREFIX}${slicedDocKey}`.replace(\n '/en/',\n `/${locale}/`\n ),\n relativeUrl: getLocalizedUrl(relativeUrl, locale),\n url: getLocalizedUrl(join(URL_PREFIX, relativeUrl), locale),\n } as FileMetadata;\n};\n\nexport const getFileMetadata = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n R extends FileMetadata,\n>(\n files: F,\n docKey: keyof F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<R> => {\n try {\n const file = await getFile(files, docKey, locale);\n\n return formatMetadata(docKey as string, file, locale) as R;\n } catch (error) {\n console.log({ error, docKey, locale });\n throw error;\n }\n};\n\nexport const getFileMetadataRecord = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n locale: LocalesValues = defaultLocale as LocalesValues\n): Promise<Record<keyof F, FileMetadata>> => {\n const filesEntries = await Promise.all(\n Object.entries(files).map(async ([key]) => [\n key,\n await getFileMetadata(files, key as keyof F, locale),\n ])\n );\n const filesResult = Object.fromEntries(filesEntries);\n return filesResult;\n};\n\nexport const getFileMetadataBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray: FileMetadata[] = Object.values(filesMetadata).filter(\n (fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n if (locale !== defaultLocale) {\n const localizedFileMetadata = await Promise.all(\n fileMetadataArray.map(\n async (fileMetadata) =>\n await getFileMetadata(files, fileMetadata.docKey, locale)\n )\n );\n\n return localizedFileMetadata;\n }\n\n return fileMetadataArray;\n};\n\nexport const getFileBySlug = async <\n F extends Record<string, Record<LocalesValues, Promise<string>>>,\n>(\n files: F,\n slugs: string | string[],\n locale: LocalesValues = defaultLocale as LocalesValues,\n strict = false\n) => {\n const slugsArray = Array.isArray(slugs) ? slugs : [slugs];\n const filesMetadata = await getFileMetadataRecord(\n files,\n defaultLocale as LocalesValues\n );\n\n let fileMetadataArray = Object.values(filesMetadata).filter((fileMetadata) =>\n slugsArray.every((slug) => fileMetadata.slugs?.includes(slug))\n );\n\n if (strict) {\n fileMetadataArray = fileMetadataArray.filter(\n (fileMetadata) => fileMetadata.slugs.length === slugsArray.length\n );\n }\n\n const fileList = await Promise.all(\n fileMetadataArray.map(async (fileMetadata) => {\n const file = await getFile(files, fileMetadata.docKey, locale);\n return file;\n })\n );\n\n return fileList;\n};\n"],"mappings":"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","names":[]}
|
package/dist/types/common.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export type FileMetadata = {
|
|
|
16
16
|
updatedAt: string;
|
|
17
17
|
createdAt: string;
|
|
18
18
|
author?: string;
|
|
19
|
+
youtubeVideo?: string;
|
|
20
|
+
applicationTemplate?: string;
|
|
19
21
|
};
|
|
20
22
|
export declare const formatMetadata: (docKey: string, file: string, locale?: LocalesValues) => FileMetadata;
|
|
21
23
|
export declare const getFileMetadata: <F extends Record<string, Record<LocalesValues, Promise<string>>>, R extends FileMetadata>(files: F, docKey: keyof F, locale?: LocalesValues) => Promise<R>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,OAAO,EACP,aAAa,EACd,MAAM,UAAU,CAAC;AAGlB,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C,eAAO,MAAM,iBAAiB,0DAC2B,CAAC;AAC1D,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAElD,eAAO,MAAM,QAAQ,GACnB,CAAC,SAAS,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAEvE,OAAO,CAAC,EACR,OAAM,aAA8C,KACnD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQhC,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAEhE,OAAO,CAAC,EACR,QAAQ,MAAM,CAAC,EACf,SAAQ,aAA8C,KACrD,OAAO,CAAC,MAAM,CAoBhB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,OAAO,EACP,aAAa,EACd,MAAM,UAAU,CAAC;AAGlB,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C,eAAO,MAAM,iBAAiB,0DAC2B,CAAC;AAC1D,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAElD,eAAO,MAAM,QAAQ,GACnB,CAAC,SAAS,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAEvE,OAAO,CAAC,EACR,OAAM,aAA8C,KACnD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQhC,CAAC;AAEF,eAAO,MAAM,OAAO,GAClB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAEhE,OAAO,CAAC,EACR,QAAQ,MAAM,CAAC,EACf,SAAQ,aAA8C,KACrD,OAAO,CAAC,MAAM,CAoBhB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,SAAQ,aAA8C,KACrD,YAgBF,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAChE,CAAC,SAAS,YAAY,EAEtB,OAAO,CAAC,EACR,QAAQ,MAAM,CAAC,EACf,SAAQ,aAA8C,KACrD,OAAO,CAAC,CAAC,CASX,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAEhE,OAAO,CAAC,EACR,SAAQ,aAA8C,KACrD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CASvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAEhE,OAAO,CAAC,EACR,OAAO,MAAM,GAAG,MAAM,EAAE,EACxB,SAAQ,aAA8C,EACtD,gBAAc,4BA+Bf,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAEhE,OAAO,CAAC,EACR,OAAO,MAAM,GAAG,MAAM,EAAE,EACxB,SAAQ,aAA8C,EACtD,gBAAc,sBA0Bf,CAAC"}
|
package/docs/ar/configuration.md
CHANGED
|
@@ -59,7 +59,7 @@ const config: IntlayerConfig = {
|
|
|
59
59
|
applicationContext: "This is a test application",
|
|
60
60
|
},
|
|
61
61
|
build: {
|
|
62
|
-
|
|
62
|
+
importMode: "dynamic",
|
|
63
63
|
},
|
|
64
64
|
};
|
|
65
65
|
|
|
@@ -89,7 +89,7 @@ const config = {
|
|
|
89
89
|
applicationContext: "This is a test application", // سياق التطبيق
|
|
90
90
|
},
|
|
91
91
|
build: {
|
|
92
|
-
|
|
92
|
+
importMode: "dynamic", // تفعيل الاستيراد الديناميكي
|
|
93
93
|
},
|
|
94
94
|
};
|
|
95
95
|
|
|
@@ -485,11 +485,9 @@ module.exports = config;
|
|
|
485
485
|
|
|
486
486
|
تنطبق خيارات البناء على إضافات `@intlayer/babel` و `@intlayer/swc`.
|
|
487
487
|
|
|
488
|
-
> في وضع التطوير، يستخدم Intlayer
|
|
488
|
+
> في وضع التطوير، يستخدم Intlayer استيرادات ثابتة للقواميس لتبسيط تجربة التطوير.
|
|
489
489
|
|
|
490
|
-
>
|
|
491
|
-
|
|
492
|
-
- **ملاحظة**: يتوفر `@intlayer/babel` بشكل افتراضي في حزمة `vite-intlayer`، لكن `@intlayer/swc` غير مثبت بشكل افتراضي في حزمة `next-intlayer` لأن إضافات SWC لا تزال تجريبية في Next.js.
|
|
490
|
+
> عند التحسين، سيقوم Intlayer باستبدال استدعاءات القواميس لتحسين التجزئة، بحيث يقوم البناء النهائي باستيراد القواميس المستخدمة فعليًا فقط.
|
|
493
491
|
|
|
494
492
|
#### الخصائص
|
|
495
493
|
|
|
@@ -499,21 +497,28 @@ module.exports = config;
|
|
|
499
497
|
- _القيمة الافتراضية_: `process.env.NODE_ENV === 'production'`
|
|
500
498
|
- _الوصف_: يتحكم في ما إذا كان يجب تحسين البناء.
|
|
501
499
|
- _مثال_: `true`
|
|
502
|
-
- _ملاحظة_:
|
|
503
|
-
- _ملاحظة_:
|
|
500
|
+
- _ملاحظة_: عند التمكين، سيقوم Intlayer باستبدال جميع استدعاءات القواميس لتحسين التجزئة. بهذه الطريقة سيقوم البناء النهائي باستيراد القواميس المستخدمة فقط. ستظل جميع عمليات الاستيراد كاستيرادات ثابتة لتجنب المعالجة غير المتزامنة عند تحميل القواميس.
|
|
501
|
+
- _ملاحظة_: سيقوم Intlayer باستبدال جميع استدعاءات `useIntlayer` بالوضع المحدد بواسطة خيار `importMode` و `getIntlayer` بـ `getDictionary`.
|
|
502
|
+
- _ملاحظة_: تعتمد هذه الخيارات على إضافات `@intlayer/babel` و `@intlayer/swc`.
|
|
504
503
|
- _ملاحظة_: تأكد من أن جميع المفاتيح معلنة بشكل ثابت في استدعاءات `useIntlayer`. مثال: `useIntlayer('navbar')`.
|
|
505
504
|
|
|
506
|
-
- **
|
|
507
|
-
|
|
508
|
-
- _النوع_: `
|
|
509
|
-
- _القيمة الافتراضية_: `
|
|
510
|
-
- _الوصف_: يتحكم في
|
|
511
|
-
- _مثال_: `
|
|
512
|
-
- _ملاحظة_:
|
|
513
|
-
|
|
514
|
-
|
|
505
|
+
- **importMode**:
|
|
506
|
+
|
|
507
|
+
- _النوع_: `'static' | 'dynamic' | 'async'`
|
|
508
|
+
- _القيمة الافتراضية_: `'static'`
|
|
509
|
+
- _الوصف_: يتحكم في كيفية استيراد القواميس.
|
|
510
|
+
- _مثال_: `'dynamic'`
|
|
511
|
+
- _ملاحظة_: الأوضاع المتاحة:
|
|
512
|
+
- "static": يتم استيراد القواميس بشكل ثابت. يستبدل `useIntlayer` بـ `useDictionary`.
|
|
513
|
+
- "dynamic": يتم استيراد القواميس ديناميكيًا باستخدام Suspense. يستبدل `useIntlayer` بـ `useDictionaryDynamic`.
|
|
514
|
+
- "async": يتم استيراد القواميس ديناميكيًا بشكل غير متزامن. يستبدل `useIntlayer` بـ `await useDictionaryAsync`.
|
|
515
|
+
- _ملاحظة_: تعتمد الاستيرادات الديناميكية على Suspense وقد تؤثر قليلاً على أداء العرض.
|
|
516
|
+
- _ملاحظة_: إذا تم تعطيلها، سيتم تحميل جميع اللغات مرة واحدة، حتى لو لم يتم استخدامها.
|
|
517
|
+
- _ملاحظة_: تعتمد هذه الخيارات على إضافات `@intlayer/babel` و `@intlayer/swc`.
|
|
518
|
+
- _ملاحظة_: تأكد من أن جميع المفاتيح معلنة بشكل ثابت في استدعاءات `useIntlayer`. مثال: `useIntlayer('navbar')`.
|
|
515
519
|
- _ملاحظة_: سيتم تجاهل هذا الخيار إذا تم تعطيل `optimize`.
|
|
516
|
-
- _ملاحظة_:
|
|
520
|
+
- _ملاحظة_: في معظم الحالات، سيتم استخدام `"dynamic"` للتطبيقات React، `"async"` لتطبيقات Vue.js.
|
|
521
|
+
- _ملاحظة_: لن تؤثر هذه الخيارات على الدوال `getIntlayer`، `getDictionary`، `useDictionary`، `useDictionaryAsync` و `useDictionaryDynamic`.
|
|
517
522
|
|
|
518
523
|
- **traversePattern**:
|
|
519
524
|
- _النوع_: `string[]`
|
|
@@ -103,7 +103,7 @@ const MyComponent = () => {
|
|
|
103
103
|
|
|
104
104
|
في وضع التطوير، يستخدم Intlayer استيرادًا ثابتًا مركزيًا للقواميس لتبسيط تجربة التطوير.
|
|
105
105
|
|
|
106
|
-
بتفعيل الخيار `
|
|
106
|
+
بتفعيل الخيار `importMode = "dynamic"` في [التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md)، سيستخدم Intlayer الاستيراد الديناميكي لتحميل القواميس. هذا الخيار معطل افتراضيًا لتجنب المعالجة غير المتزامنة عند عرض التطبيق.
|
|
107
107
|
|
|
108
108
|
> `@intlayer/babel` متاح افتراضيًا في حزمة `vite-intlayer`،
|
|
109
109
|
|