@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.
Files changed (241) hide show
  1. package/dist/cjs/common.cjs.map +1 -1
  2. package/dist/esm/common.mjs.map +1 -1
  3. package/dist/types/common.d.ts +2 -0
  4. package/dist/types/common.d.ts.map +1 -1
  5. package/docs/ar/configuration.md +23 -18
  6. package/docs/ar/how_works_intlayer.md +1 -1
  7. package/docs/ar/intlayer_CMS.md +1 -0
  8. package/docs/ar/intlayer_cli.md +292 -177
  9. package/docs/ar/intlayer_visual_editor.md +1 -0
  10. package/docs/ar/intlayer_with_angular.md +1 -0
  11. package/docs/ar/intlayer_with_create_react_app.md +1 -0
  12. package/docs/ar/intlayer_with_lynx+react.md +1 -0
  13. package/docs/ar/intlayer_with_nextjs_14.md +1 -0
  14. package/docs/ar/intlayer_with_nextjs_15.md +3 -1
  15. package/docs/ar/intlayer_with_nuxt.md +1 -0
  16. package/docs/ar/intlayer_with_react_native+expo.md +1 -0
  17. package/docs/ar/intlayer_with_vite+preact.md +4 -3
  18. package/docs/ar/intlayer_with_vite+react.md +8 -4
  19. package/docs/ar/intlayer_with_vite+solid.md +4 -3
  20. package/docs/ar/intlayer_with_vite+svelte.md +4 -3
  21. package/docs/ar/intlayer_with_vite+vue.md +5 -4
  22. package/docs/ar/mcp_server.md +126 -92
  23. package/docs/de/configuration.md +23 -18
  24. package/docs/de/how_works_intlayer.md +1 -1
  25. package/docs/de/intlayer_CMS.md +1 -0
  26. package/docs/de/intlayer_cli.md +291 -171
  27. package/docs/de/intlayer_visual_editor.md +1 -0
  28. package/docs/de/intlayer_with_angular.md +1 -0
  29. package/docs/de/intlayer_with_create_react_app.md +1 -0
  30. package/docs/de/intlayer_with_lynx+react.md +1 -0
  31. package/docs/de/intlayer_with_nextjs_14.md +1 -0
  32. package/docs/de/intlayer_with_nextjs_15.md +3 -1
  33. package/docs/de/intlayer_with_nuxt.md +1 -0
  34. package/docs/de/intlayer_with_react_native+expo.md +1 -0
  35. package/docs/de/intlayer_with_vite+preact.md +4 -3
  36. package/docs/de/intlayer_with_vite+react.md +7 -4
  37. package/docs/de/intlayer_with_vite+solid.md +4 -3
  38. package/docs/de/intlayer_with_vite+svelte.md +4 -3
  39. package/docs/de/intlayer_with_vite+vue.md +5 -4
  40. package/docs/de/mcp_server.md +116 -112
  41. package/docs/en/configuration.md +41 -25
  42. package/docs/en/how_works_intlayer.md +1 -1
  43. package/docs/en/intlayer_CMS.md +1 -0
  44. package/docs/en/intlayer_cli.md +246 -138
  45. package/docs/en/intlayer_visual_editor.md +1 -0
  46. package/docs/en/intlayer_with_angular.md +1 -0
  47. package/docs/en/intlayer_with_create_react_app.md +1 -0
  48. package/docs/en/intlayer_with_lynx+react.md +1 -0
  49. package/docs/en/intlayer_with_nextjs_14.md +1 -0
  50. package/docs/en/intlayer_with_nextjs_15.md +3 -1
  51. package/docs/en/intlayer_with_nuxt.md +1 -0
  52. package/docs/en/intlayer_with_react_native+expo.md +1 -0
  53. package/docs/en/intlayer_with_vite+preact.md +6 -3
  54. package/docs/en/intlayer_with_vite+react.md +9 -3
  55. package/docs/en/intlayer_with_vite+solid.md +4 -3
  56. package/docs/en/intlayer_with_vite+svelte.md +4 -3
  57. package/docs/en/intlayer_with_vite+vue.md +7 -4
  58. package/docs/en/mcp_server.md +100 -107
  59. package/docs/en-GB/configuration.md +23 -18
  60. package/docs/en-GB/how_works_intlayer.md +1 -1
  61. package/docs/en-GB/intlayer_CMS.md +1 -0
  62. package/docs/en-GB/intlayer_cli.md +257 -138
  63. package/docs/en-GB/intlayer_visual_editor.md +1 -0
  64. package/docs/en-GB/intlayer_with_angular.md +1 -0
  65. package/docs/en-GB/intlayer_with_create_react_app.md +1 -0
  66. package/docs/en-GB/intlayer_with_lynx+react.md +1 -0
  67. package/docs/en-GB/intlayer_with_nextjs_14.md +1 -0
  68. package/docs/en-GB/intlayer_with_nextjs_15.md +3 -1
  69. package/docs/en-GB/intlayer_with_nuxt.md +1 -0
  70. package/docs/en-GB/intlayer_with_react_native+expo.md +1 -0
  71. package/docs/en-GB/intlayer_with_vite+preact.md +4 -3
  72. package/docs/en-GB/intlayer_with_vite+react.md +7 -4
  73. package/docs/en-GB/intlayer_with_vite+solid.md +4 -3
  74. package/docs/en-GB/intlayer_with_vite+svelte.md +4 -3
  75. package/docs/en-GB/intlayer_with_vite+vue.md +5 -4
  76. package/docs/en-GB/mcp_server.md +116 -82
  77. package/docs/es/configuration.md +28 -19
  78. package/docs/es/how_works_intlayer.md +1 -1
  79. package/docs/es/intlayer_CMS.md +1 -0
  80. package/docs/es/intlayer_cli.md +283 -164
  81. package/docs/es/intlayer_visual_editor.md +1 -0
  82. package/docs/es/intlayer_with_angular.md +1 -0
  83. package/docs/es/intlayer_with_create_react_app.md +1 -0
  84. package/docs/es/intlayer_with_lynx+react.md +1 -0
  85. package/docs/es/intlayer_with_nextjs_14.md +1 -0
  86. package/docs/es/intlayer_with_nextjs_15.md +3 -1
  87. package/docs/es/intlayer_with_nuxt.md +1 -0
  88. package/docs/es/intlayer_with_react_native+expo.md +1 -0
  89. package/docs/es/intlayer_with_vite+preact.md +4 -3
  90. package/docs/es/intlayer_with_vite+react.md +7 -4
  91. package/docs/es/intlayer_with_vite+solid.md +4 -3
  92. package/docs/es/intlayer_with_vite+svelte.md +4 -3
  93. package/docs/es/intlayer_with_vite+vue.md +5 -4
  94. package/docs/es/mcp_server.md +120 -86
  95. package/docs/es/vs_code_extension.md +1 -0
  96. package/docs/fr/configuration.md +23 -13
  97. package/docs/fr/how_works_intlayer.md +1 -1
  98. package/docs/fr/intlayer_CMS.md +1 -0
  99. package/docs/fr/intlayer_cli.md +280 -184
  100. package/docs/fr/intlayer_visual_editor.md +1 -0
  101. package/docs/fr/intlayer_with_angular.md +1 -0
  102. package/docs/fr/intlayer_with_create_react_app.md +1 -0
  103. package/docs/fr/intlayer_with_lynx+react.md +1 -0
  104. package/docs/fr/intlayer_with_nextjs_14.md +1 -0
  105. package/docs/fr/intlayer_with_nextjs_15.md +3 -1
  106. package/docs/fr/intlayer_with_nuxt.md +1 -0
  107. package/docs/fr/intlayer_with_react_native+expo.md +1 -0
  108. package/docs/fr/intlayer_with_vite+preact.md +5 -4
  109. package/docs/fr/intlayer_with_vite+react.md +7 -4
  110. package/docs/fr/intlayer_with_vite+solid.md +4 -3
  111. package/docs/fr/intlayer_with_vite+svelte.md +4 -3
  112. package/docs/fr/intlayer_with_vite+vue.md +5 -4
  113. package/docs/fr/mcp_server.md +121 -87
  114. package/docs/hi/configuration.md +23 -18
  115. package/docs/hi/how_works_intlayer.md +1 -1
  116. package/docs/hi/intlayer_CMS.md +1 -0
  117. package/docs/hi/intlayer_cli.md +295 -174
  118. package/docs/hi/intlayer_visual_editor.md +1 -0
  119. package/docs/hi/intlayer_with_angular.md +1 -0
  120. package/docs/hi/intlayer_with_create_react_app.md +1 -0
  121. package/docs/hi/intlayer_with_lynx+react.md +1 -0
  122. package/docs/hi/intlayer_with_nextjs_14.md +1 -0
  123. package/docs/hi/intlayer_with_nextjs_15.md +3 -1
  124. package/docs/hi/intlayer_with_nuxt.md +1 -0
  125. package/docs/hi/intlayer_with_react_native+expo.md +1 -0
  126. package/docs/hi/intlayer_with_vite+preact.md +4 -3
  127. package/docs/hi/intlayer_with_vite+react.md +7 -4
  128. package/docs/hi/intlayer_with_vite+solid.md +4 -3
  129. package/docs/hi/intlayer_with_vite+svelte.md +4 -3
  130. package/docs/hi/intlayer_with_vite+vue.md +5 -4
  131. package/docs/hi/mcp_server.md +118 -84
  132. package/docs/it/configuration.md +23 -18
  133. package/docs/it/how_works_intlayer.md +1 -1
  134. package/docs/it/intlayer_CMS.md +1 -0
  135. package/docs/it/intlayer_cli.md +282 -167
  136. package/docs/it/intlayer_visual_editor.md +1 -0
  137. package/docs/it/intlayer_with_angular.md +1 -0
  138. package/docs/it/intlayer_with_create_react_app.md +1 -0
  139. package/docs/it/intlayer_with_lynx+react.md +1 -0
  140. package/docs/it/intlayer_with_nextjs_14.md +1 -0
  141. package/docs/it/intlayer_with_nextjs_15.md +3 -1
  142. package/docs/it/intlayer_with_nuxt.md +1 -0
  143. package/docs/it/intlayer_with_react_native+expo.md +1 -0
  144. package/docs/it/intlayer_with_vite+preact.md +4 -3
  145. package/docs/it/intlayer_with_vite+react.md +7 -4
  146. package/docs/it/intlayer_with_vite+solid.md +4 -3
  147. package/docs/it/intlayer_with_vite+svelte.md +4 -3
  148. package/docs/it/intlayer_with_vite+vue.md +4 -4
  149. package/docs/it/mcp_server.md +120 -86
  150. package/docs/ja/configuration.md +23 -18
  151. package/docs/ja/how_works_intlayer.md +1 -1
  152. package/docs/ja/intlayer_CMS.md +1 -0
  153. package/docs/ja/intlayer_cli.md +285 -168
  154. package/docs/ja/intlayer_visual_editor.md +1 -0
  155. package/docs/ja/intlayer_with_angular.md +1 -0
  156. package/docs/ja/intlayer_with_create_react_app.md +1 -0
  157. package/docs/ja/intlayer_with_lynx+react.md +1 -0
  158. package/docs/ja/intlayer_with_nextjs_14.md +1 -0
  159. package/docs/ja/intlayer_with_nextjs_15.md +3 -1
  160. package/docs/ja/intlayer_with_nuxt.md +1 -0
  161. package/docs/ja/intlayer_with_react_native+expo.md +1 -0
  162. package/docs/ja/intlayer_with_vite+preact.md +4 -3
  163. package/docs/ja/intlayer_with_vite+react.md +7 -4
  164. package/docs/ja/intlayer_with_vite+solid.md +4 -3
  165. package/docs/ja/intlayer_with_vite+svelte.md +4 -3
  166. package/docs/ja/intlayer_with_vite+vue.md +5 -4
  167. package/docs/ja/mcp_server.md +121 -85
  168. package/docs/ko/configuration.md +23 -18
  169. package/docs/ko/how_works_intlayer.md +1 -1
  170. package/docs/ko/intlayer_CMS.md +1 -0
  171. package/docs/ko/intlayer_cli.md +291 -175
  172. package/docs/ko/intlayer_visual_editor.md +1 -0
  173. package/docs/ko/intlayer_with_angular.md +1 -0
  174. package/docs/ko/intlayer_with_create_react_app.md +1 -0
  175. package/docs/ko/intlayer_with_lynx+react.md +1 -0
  176. package/docs/ko/intlayer_with_nextjs_14.md +1 -0
  177. package/docs/ko/intlayer_with_nextjs_15.md +3 -1
  178. package/docs/ko/intlayer_with_nuxt.md +1 -0
  179. package/docs/ko/intlayer_with_react_native+expo.md +1 -0
  180. package/docs/ko/intlayer_with_vite+preact.md +4 -3
  181. package/docs/ko/intlayer_with_vite+react.md +7 -4
  182. package/docs/ko/intlayer_with_vite+solid.md +4 -3
  183. package/docs/ko/intlayer_with_vite+svelte.md +4 -3
  184. package/docs/ko/intlayer_with_vite+vue.md +5 -4
  185. package/docs/ko/mcp_server.md +117 -83
  186. package/docs/pt/configuration.md +23 -18
  187. package/docs/pt/how_works_intlayer.md +1 -1
  188. package/docs/pt/intlayer_CMS.md +1 -0
  189. package/docs/pt/intlayer_cli.md +274 -154
  190. package/docs/pt/intlayer_visual_editor.md +1 -0
  191. package/docs/pt/intlayer_with_angular.md +1 -0
  192. package/docs/pt/intlayer_with_create_react_app.md +1 -0
  193. package/docs/pt/intlayer_with_lynx+react.md +1 -0
  194. package/docs/pt/intlayer_with_nextjs_14.md +1 -0
  195. package/docs/pt/intlayer_with_nextjs_15.md +3 -1
  196. package/docs/pt/intlayer_with_nuxt.md +1 -0
  197. package/docs/pt/intlayer_with_react_native+expo.md +1 -0
  198. package/docs/pt/intlayer_with_vite+preact.md +4 -3
  199. package/docs/pt/intlayer_with_vite+react.md +7 -4
  200. package/docs/pt/intlayer_with_vite+solid.md +4 -3
  201. package/docs/pt/intlayer_with_vite+svelte.md +4 -3
  202. package/docs/pt/intlayer_with_vite+vue.md +4 -4
  203. package/docs/pt/mcp_server.md +121 -87
  204. package/docs/ru/configuration.md +23 -18
  205. package/docs/ru/how_works_intlayer.md +1 -1
  206. package/docs/ru/intlayer_CMS.md +1 -0
  207. package/docs/ru/intlayer_cli.md +287 -170
  208. package/docs/ru/intlayer_visual_editor.md +1 -0
  209. package/docs/ru/intlayer_with_angular.md +1 -0
  210. package/docs/ru/intlayer_with_create_react_app.md +1 -0
  211. package/docs/ru/intlayer_with_lynx+react.md +1 -0
  212. package/docs/ru/intlayer_with_nextjs_14.md +1 -0
  213. package/docs/ru/intlayer_with_nextjs_15.md +3 -1
  214. package/docs/ru/intlayer_with_nuxt.md +1 -0
  215. package/docs/ru/intlayer_with_react_native+expo.md +1 -0
  216. package/docs/ru/intlayer_with_vite+preact.md +4 -3
  217. package/docs/ru/intlayer_with_vite+react.md +7 -4
  218. package/docs/ru/intlayer_with_vite+solid.md +4 -3
  219. package/docs/ru/intlayer_with_vite+svelte.md +4 -3
  220. package/docs/ru/intlayer_with_vite+vue.md +5 -4
  221. package/docs/ru/mcp_server.md +119 -85
  222. package/docs/zh/configuration.md +23 -18
  223. package/docs/zh/how_works_intlayer.md +1 -1
  224. package/docs/zh/intlayer_CMS.md +1 -0
  225. package/docs/zh/intlayer_cli.md +275 -155
  226. package/docs/zh/intlayer_visual_editor.md +1 -0
  227. package/docs/zh/intlayer_with_angular.md +1 -0
  228. package/docs/zh/intlayer_with_create_react_app.md +1 -0
  229. package/docs/zh/intlayer_with_lynx+react.md +1 -0
  230. package/docs/zh/intlayer_with_nextjs_14.md +1 -0
  231. package/docs/zh/intlayer_with_nextjs_15.md +3 -1
  232. package/docs/zh/intlayer_with_nuxt.md +1 -0
  233. package/docs/zh/intlayer_with_react_native+expo.md +1 -0
  234. package/docs/zh/intlayer_with_vite+preact.md +4 -3
  235. package/docs/zh/intlayer_with_vite+react.md +7 -4
  236. package/docs/zh/intlayer_with_vite+solid.md +4 -3
  237. package/docs/zh/intlayer_with_vite+svelte.md +4 -3
  238. package/docs/zh/intlayer_with_vite+vue.md +5 -4
  239. package/docs/zh/mcp_server.md +119 -86
  240. package/package.json +10 -10
  241. package/src/common.ts +2 -0
@@ -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":"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","names":[]}
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":[]}
@@ -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":"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","names":[]}
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":[]}
@@ -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;CACjB,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"}
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"}
@@ -59,7 +59,7 @@ const config: IntlayerConfig = {
59
59
  applicationContext: "This is a test application",
60
60
  },
61
61
  build: {
62
- activateDynamicImport: true,
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
- activateDynamicImport: true, // تفعيل الاستيراد الديناميكي
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
- > من خلال تحسين البناء، سيقوم Intlayer باستبدال جميع استدعاءات القواميس لتحسين التجزئة. بهذه الطريقة سيقوم البناء النهائي باستيراد القواميس المستخدمة فقط.
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
- - _ملاحظة_: عند التمكين، سيقوم Intlayer بتحسين تجزئة القاموس عن طريق استبدال جميع استدعاءات `useIntlayer` بـ `useDictionary` و `getIntlayer` بـ `getDictionary`.
500
+ - _ملاحظة_: عند التمكين، سيقوم Intlayer باستبدال جميع استدعاءات القواميس لتحسين التجزئة. بهذه الطريقة سيقوم البناء النهائي باستيراد القواميس المستخدمة فقط. ستظل جميع عمليات الاستيراد كاستيرادات ثابتة لتجنب المعالجة غير المتزامنة عند تحميل القواميس.
501
+ - _ملاحظة_: سيقوم Intlayer باستبدال جميع استدعاءات `useIntlayer` بالوضع المحدد بواسطة خيار `importMode` و `getIntlayer` بـ `getDictionary`.
502
+ - _ملاحظة_: تعتمد هذه الخيارات على إضافات `@intlayer/babel` و `@intlayer/swc`.
504
503
  - _ملاحظة_: تأكد من أن جميع المفاتيح معلنة بشكل ثابت في استدعاءات `useIntlayer`. مثال: `useIntlayer('navbar')`.
505
504
 
506
- - **activateDynamicImport**:
507
-
508
- - _النوع_: `boolean`
509
- - _القيمة الافتراضية_: `false`
510
- - _الوصف_: يتحكم في ما إذا كان يجب استيراد محتوى القاموس ديناميكيًا لكل لغة.
511
- - _مثال_: `true`
512
- - _ملاحظة_: سيسمح باستيراد محتوى القاموس ديناميكيًا للغة الحالية فقط.
513
- - _ملاحظة_: تعتمد الاستيرادات الديناميكية على React Suspense وقد تؤثر قليلاً على أداء العرض. ولكن إذا تم تعطيلها، سيتم تحميل جميع اللغات مرة واحدة، حتى لو لم يتم استخدامها.
514
- - _ملاحظة_: عند التمكين، سيقوم Intlayer بتحسين تجزئة القاموس عن طريق استبدال جميع استدعاءات `useIntlayer` بـ `useDynamicDictionary`.
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
- - _ملاحظة_: تأكد من إعلان جميع المفاتيح بشكل ثابت في استدعاءات `useIntlayer`. على سبيل المثال `useIntlayer('navbar')`.
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
- بتفعيل الخيار `activateDynamicImport` في [التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md)، سيستخدم Intlayer الاستيراد الديناميكي لتحميل القواميس. هذا الخيار معطل افتراضيًا لتجنب المعالجة غير المتزامنة عند عرض التطبيق.
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
 
@@ -16,6 +16,7 @@ slugs:
16
16
  - doc
17
17
  - concept
18
18
  - cms
19
+ youtubeVideo: https://www.youtube.com/watch?v=UDDTnirwi_4
19
20
  ---
20
21
 
21
22
  # توثيق نظام إدارة المحتوى (CMS) الخاص بـ Intlayer