akanjs 0.0.1 → 2.0.0-beta.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 (682) hide show
  1. package/CODE_OF_CONDUCT.md +54 -0
  2. package/CONTRIBUTING.md +83 -0
  3. package/LICENSE +21 -0
  4. package/README.ko.md +244 -0
  5. package/README.md +237 -6
  6. package/base/base.ts +194 -0
  7. package/base/baseEnv.ts +162 -0
  8. package/base/index.ts +6 -0
  9. package/base/primitiveRegistry.ts +342 -0
  10. package/base/symbols.ts +11 -0
  11. package/base/types.ts +137 -0
  12. package/base/utils.ts +30 -0
  13. package/cli/application/application.command.ts +213 -0
  14. package/cli/application/application.interface.tsx +225 -0
  15. package/cli/application/application.runner.ts +359 -0
  16. package/cli/application/application.script.ts +244 -0
  17. package/cli/build.ts +25 -0
  18. package/cli/cloud/cloud.command.ts +48 -0
  19. package/cli/cloud/cloud.runner.ts +158 -0
  20. package/cli/cloud/cloud.script.ts +40 -0
  21. package/cli/guideline/guideline.command.ts +31 -0
  22. package/cli/guideline/guideline.prompt.ts +212 -0
  23. package/cli/guideline/guideline.runner.ts +53 -0
  24. package/cli/guideline/guideline.script.ts +33 -0
  25. package/cli/guidelines/___library/sharedUiStructureDescription.en.md +767 -0
  26. package/cli/guidelines/___library/utilUiStructureDescription.en.md +395 -0
  27. package/cli/guidelines/___lint/lintRuleDescription.en.md +64 -0
  28. package/cli/guidelines/___module/moduleStructureDescription.en.md +80 -0
  29. package/cli/guidelines/componentRule/componentRule.generate.json +131 -0
  30. package/cli/guidelines/componentRule/componentRule.instruction.md +637 -0
  31. package/cli/guidelines/cssRule/cssRule.generate.json +93 -0
  32. package/cli/guidelines/cssRule/cssRule.instruction.md +435 -0
  33. package/cli/guidelines/databaseModule/databaseModule.generate.json +51 -0
  34. package/cli/guidelines/databaseModule/databaseModule.instruction.md +612 -0
  35. package/cli/guidelines/docPageRule/docPageRule.generate.json +72 -0
  36. package/cli/guidelines/docPageRule/docPageRule.instruction.md +389 -0
  37. package/cli/guidelines/enumConstant/enumConstant.generate.json +24 -0
  38. package/cli/guidelines/enumConstant/enumConstant.instruction.md +232 -0
  39. package/cli/guidelines/framework/framework.generate.json +119 -0
  40. package/cli/guidelines/framework/framework.instruction.md +1110 -0
  41. package/cli/guidelines/howToUseStore/howToUseStore.generate.json +0 -0
  42. package/cli/guidelines/modelConstant/modelConstant.generate.json +128 -0
  43. package/cli/guidelines/modelConstant/modelConstant.instruction.md +506 -0
  44. package/cli/guidelines/modelDictionary/modelDictionary.generate.json +108 -0
  45. package/cli/guidelines/modelDictionary/modelDictionary.instruction.md +547 -0
  46. package/cli/guidelines/modelDocument/modelDocument.generate.json +129 -0
  47. package/cli/guidelines/modelDocument/modelDocument.instruction.md +536 -0
  48. package/cli/guidelines/modelService/modelService.generate.json +135 -0
  49. package/cli/guidelines/modelService/modelService.instruction.md +708 -0
  50. package/cli/guidelines/modelSignal/modelSignal.generate.json +201 -0
  51. package/cli/guidelines/modelSignal/modelSignal.instruction.md +552 -0
  52. package/cli/guidelines/modelStore/modelStore.generate.json +130 -0
  53. package/cli/guidelines/modelStore/modelStore.instruction.md +585 -0
  54. package/cli/guidelines/modelTemplate/modelTemplate.generate.json +104 -0
  55. package/cli/guidelines/modelTemplate/modelTemplate.instruction.md +604 -0
  56. package/cli/guidelines/modelUnit/modelUnit.generate.json +92 -0
  57. package/cli/guidelines/modelUnit/modelUnit.instruction.md +541 -0
  58. package/cli/guidelines/modelUtil/modelUtil.generate.json +93 -0
  59. package/cli/guidelines/modelUtil/modelUtil.instruction.md +752 -0
  60. package/cli/guidelines/modelView/modelView.generate.json +80 -0
  61. package/cli/guidelines/modelView/modelView.instruction.md +1005 -0
  62. package/cli/guidelines/modelZone/modelZone.generate.json +126 -0
  63. package/cli/guidelines/modelZone/modelZone.instruction.md +528 -0
  64. package/cli/guidelines/scalarConstant/scalarConstant.generate.json +106 -0
  65. package/cli/guidelines/scalarConstant/scalarConstant.instruction.md +442 -0
  66. package/cli/guidelines/scalarDictionary/scalarDictionary.generate.json +83 -0
  67. package/cli/guidelines/scalarDictionary/scalarDictionary.instruction.md +273 -0
  68. package/cli/guidelines/scalarModule/scalarModule.generate.json +35 -0
  69. package/cli/guidelines/scalarModule/scalarModule.instruction.md +81 -0
  70. package/cli/guidelines/sharedUiUsage/sharedUiUsage.generate.json +108 -0
  71. package/cli/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +310 -0
  72. package/cli/guidelines/utilUiUsage/utilUiUsage.generate.json +140 -0
  73. package/cli/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
  74. package/cli/index.js +11401 -0
  75. package/cli/index.ts +24 -0
  76. package/cli/library/library.command.ts +28 -0
  77. package/cli/library/library.runner.ts +69 -0
  78. package/cli/library/library.script.ts +39 -0
  79. package/cli/module/module.command.ts +35 -0
  80. package/cli/module/module.prompt.ts +18 -0
  81. package/cli/module/module.request.ts +319 -0
  82. package/cli/module/module.runner.ts +76 -0
  83. package/cli/module/module.script.ts +161 -0
  84. package/cli/package/package.command.ts +32 -0
  85. package/cli/package/package.runner.ts +64 -0
  86. package/cli/package/package.script.ts +35 -0
  87. package/cli/page/page.command.ts +14 -0
  88. package/cli/page/page.runner.ts +14 -0
  89. package/cli/page/page.script.ts +12 -0
  90. package/cli/scalar/scalar.command.ts +21 -0
  91. package/cli/scalar/scalar.prompt.ts +131 -0
  92. package/cli/scalar/scalar.runner.ts +38 -0
  93. package/cli/scalar/scalar.script.ts +16 -0
  94. package/cli/templates/__scalar/__model__/__model__.constant.ts +15 -0
  95. package/cli/templates/__scalar/__model__/__model__.dictionary.ts +19 -0
  96. package/cli/templates/__scalar/__model__/__model__.document.ts +15 -0
  97. package/cli/templates/app/akan.config.ts +14 -0
  98. package/cli/templates/app/capacitor.config.ts.template +8 -0
  99. package/cli/templates/app/common/commonLogic.ts +12 -0
  100. package/cli/templates/app/common/index.ts +10 -0
  101. package/cli/templates/app/env/env.client.debug.ts.template +7 -0
  102. package/cli/templates/app/env/env.client.develop.ts.template +7 -0
  103. package/cli/templates/app/env/env.client.local.ts.template +7 -0
  104. package/cli/templates/app/env/env.client.main.ts.template +7 -0
  105. package/cli/templates/app/env/env.client.testing.ts.template +7 -0
  106. package/cli/templates/app/env/env.client.ts +21 -0
  107. package/cli/templates/app/env/env.client.type.ts +16 -0
  108. package/cli/templates/app/env/env.server.debug.ts.template +7 -0
  109. package/cli/templates/app/env/env.server.develop.ts.template +9 -0
  110. package/cli/templates/app/env/env.server.local.ts.template +14 -0
  111. package/cli/templates/app/env/env.server.main.ts.template +9 -0
  112. package/cli/templates/app/env/env.server.testing.ts.template +6 -0
  113. package/cli/templates/app/env/env.server.ts +20 -0
  114. package/cli/templates/app/lib/___appName__/__appName__.dictionary.ts +17 -0
  115. package/cli/templates/app/lib/___appName__/__appName__.service.ts +13 -0
  116. package/cli/templates/app/lib/___appName__/__appName__.signal.ts +17 -0
  117. package/cli/templates/app/lib/___appName__/__appName__.store.ts +15 -0
  118. package/cli/templates/app/lib/option.ts +17 -0
  119. package/cli/templates/app/main.ts +16 -0
  120. package/cli/templates/app/package.json.template +5 -0
  121. package/cli/templates/app/page/_index.tsx +172 -0
  122. package/cli/templates/app/page/_layout.tsx +32 -0
  123. package/cli/templates/app/page/styles.css.template +53 -0
  124. package/cli/templates/app/public/favicon.ico +0 -0
  125. package/cli/templates/app/public/logo.png +0 -0
  126. package/cli/templates/app/srvkit/backendLogic.ts +12 -0
  127. package/cli/templates/app/srvkit/index.ts +10 -0
  128. package/cli/templates/app/tsconfig.json.template +21 -0
  129. package/cli/templates/app/ui/UiComponent.ts +16 -0
  130. package/cli/templates/app/ui/index.ts +10 -0
  131. package/cli/templates/app/webkit/frontendLogic.ts +12 -0
  132. package/cli/templates/app/webkit/index.ts +10 -0
  133. package/cli/templates/client.ts +46 -0
  134. package/cli/templates/crudPages/[__model__Id]/edit/page.tsx +47 -0
  135. package/cli/templates/crudPages/[__model__Id]/page.tsx +52 -0
  136. package/cli/templates/crudPages/new/page.tsx +42 -0
  137. package/cli/templates/crudPages/page.tsx +43 -0
  138. package/cli/templates/crudSinglePage/page.tsx +37 -0
  139. package/cli/templates/env/_env.server.type.ts +16 -0
  140. package/cli/templates/facetIndex/index.ts +32 -0
  141. package/cli/templates/index.ts +10 -0
  142. package/cli/templates/lib/__lib/lib.constant.ts +38 -0
  143. package/cli/templates/lib/__lib/lib.dictionary.ts +33 -0
  144. package/cli/templates/lib/__lib/lib.document.ts +35 -0
  145. package/cli/templates/lib/__lib/lib.service.ts +33 -0
  146. package/cli/templates/lib/__lib/lib.signal.ts +34 -0
  147. package/cli/templates/lib/__lib/lib.store.ts +33 -0
  148. package/cli/templates/lib/cnst.ts +29 -0
  149. package/cli/templates/lib/db.ts +32 -0
  150. package/cli/templates/lib/dict.ts +49 -0
  151. package/cli/templates/lib/sig.ts +60 -0
  152. package/cli/templates/lib/srv.ts +34 -0
  153. package/cli/templates/lib/st.ts +31 -0
  154. package/cli/templates/lib/useClient.ts +19 -0
  155. package/cli/templates/lib/useServer.ts +7 -0
  156. package/cli/templates/libRoot/.gitignore.template +16 -0
  157. package/cli/templates/libRoot/akan.config.ts +12 -0
  158. package/cli/templates/libRoot/base/baseLogic.ts +10 -0
  159. package/cli/templates/libRoot/base/index.ts +8 -0
  160. package/cli/templates/libRoot/common/commonLogic.ts +10 -0
  161. package/cli/templates/libRoot/common/index.ts +8 -0
  162. package/cli/templates/libRoot/env/env.server.example.ts.template +6 -0
  163. package/cli/templates/libRoot/env/env.server.testing.ts.template +6 -0
  164. package/cli/templates/libRoot/lib/___libName__/__libName__.dictionary.ts +15 -0
  165. package/cli/templates/libRoot/lib/___libName__/__libName__.service.ts +11 -0
  166. package/cli/templates/libRoot/lib/___libName__/__libName__.store.ts +13 -0
  167. package/cli/templates/libRoot/lib/option.ts +17 -0
  168. package/cli/templates/libRoot/package.json.template +5 -0
  169. package/cli/templates/libRoot/srvkit/backendLogic.ts +10 -0
  170. package/cli/templates/libRoot/srvkit/index.ts +8 -0
  171. package/cli/templates/libRoot/tsconfig.json.template +11 -0
  172. package/cli/templates/libRoot/ui/index.ts +7 -0
  173. package/cli/templates/libRoot/webkit/frontendLogic.ts +10 -0
  174. package/cli/templates/libRoot/webkit/index.ts +8 -0
  175. package/cli/templates/localDev/docker-compose.yaml.template +37 -0
  176. package/cli/templates/module/__Model__.Template.tsx +36 -0
  177. package/cli/templates/module/__Model__.Unit.tsx +26 -0
  178. package/cli/templates/module/__Model__.Util.tsx +30 -0
  179. package/cli/templates/module/__Model__.View.tsx +29 -0
  180. package/cli/templates/module/__Model__.Zone.tsx +43 -0
  181. package/cli/templates/module/__model__.constant.ts +24 -0
  182. package/cli/templates/module/__model__.dictionary.ts +30 -0
  183. package/cli/templates/module/__model__.document.ts +23 -0
  184. package/cli/templates/module/__model__.service.ts +16 -0
  185. package/cli/templates/module/__model__.signal.ts +27 -0
  186. package/cli/templates/module/__model__.store.ts +19 -0
  187. package/cli/templates/module/index.tsx +44 -0
  188. package/cli/templates/moduleRoot/index.tsx +31 -0
  189. package/cli/templates/pkgRoot/tsconfig.json.template +10 -0
  190. package/cli/templates/server.ts +45 -0
  191. package/cli/templates/workspaceRoot/.env.template +14 -0
  192. package/cli/templates/workspaceRoot/.gitignore.template +130 -0
  193. package/cli/templates/workspaceRoot/.vscode/settings.json.template +23 -0
  194. package/cli/templates/workspaceRoot/biome.json.template +175 -0
  195. package/cli/templates/workspaceRoot/bunfig.toml +4 -0
  196. package/cli/templates/workspaceRoot/infra/app/Chart.yaml.template +6 -0
  197. package/cli/templates/workspaceRoot/infra/app/templates/frontend.yaml.template +182 -0
  198. package/cli/templates/workspaceRoot/infra/app/values/_common-values.yaml.template +183 -0
  199. package/cli/templates/workspaceRoot/package.json.template +7 -0
  200. package/cli/templates/workspaceRoot/tsconfig.json.template +26 -0
  201. package/cli/testHelpers.ts +171 -0
  202. package/cli/workspace/workspace.command.ts +60 -0
  203. package/cli/workspace/workspace.runner.ts +57 -0
  204. package/cli/workspace/workspace.script.ts +68 -0
  205. package/client/capacitor.ts +68 -0
  206. package/client/clientRuntime.ts +141 -0
  207. package/client/cookie.ts +121 -0
  208. package/client/createFont.ts +8 -0
  209. package/client/csrTypes.ts +259 -0
  210. package/client/decorators.ts +25 -0
  211. package/client/device.ts +147 -0
  212. package/client/fetch.ts +1 -0
  213. package/client/index.ts +15 -0
  214. package/client/locale.ts +4 -0
  215. package/client/makePageProto.tsx +178 -0
  216. package/client/router.ts +286 -0
  217. package/client/rscNavigation.ts +19 -0
  218. package/client/storage.ts +33 -0
  219. package/client/translator.ts +43 -0
  220. package/client/types.ts +228 -0
  221. package/client/useClient.ts +1 -0
  222. package/common/Logger.ts +177 -0
  223. package/common/applyMixins.ts +14 -0
  224. package/common/capitalize.ts +4 -0
  225. package/common/deepObjectify.ts +27 -0
  226. package/common/formatNumber.ts +14 -0
  227. package/common/formatPhone.ts +7 -0
  228. package/common/getAllPropertyDescriptors.ts +13 -0
  229. package/common/hmrPhase.ts +17 -0
  230. package/common/httpClient.ts +101 -0
  231. package/common/index.ts +50 -0
  232. package/common/isDayjs.ts +3 -0
  233. package/common/isEmail.ts +2 -0
  234. package/common/isPhoneNumber.ts +8 -0
  235. package/common/isQueryEqual.ts +23 -0
  236. package/common/isValidDate.ts +14 -0
  237. package/common/localeConfig.ts +41 -0
  238. package/common/lowerlize.ts +4 -0
  239. package/common/mergeVersion.ts +10 -0
  240. package/common/objectify.ts +7 -0
  241. package/common/pathGet.ts +13 -0
  242. package/common/pathSet.ts +16 -0
  243. package/common/randomPick.ts +1 -0
  244. package/common/randomPicks.ts +12 -0
  245. package/common/routeConvention.ts +203 -0
  246. package/common/sleep.ts +8 -0
  247. package/common/splitVersion.ts +11 -0
  248. package/common/subRoute.ts +34 -0
  249. package/common/types.ts +15 -0
  250. package/constant/constantRegistry.ts +334 -0
  251. package/constant/crystalize.ts +45 -0
  252. package/constant/deserialize.ts +70 -0
  253. package/constant/fieldInfo.ts +415 -0
  254. package/constant/getDefault.ts +18 -0
  255. package/constant/immerify.ts +16 -0
  256. package/constant/index.ts +10 -0
  257. package/constant/purify.ts +118 -0
  258. package/constant/serialize.ts +87 -0
  259. package/constant/types.ts +105 -0
  260. package/constant/via.ts +360 -0
  261. package/devkit/aiEditor.ts +299 -0
  262. package/devkit/akanApp/akanApp.host.ts +356 -0
  263. package/devkit/akanApp/index.ts +1 -0
  264. package/devkit/akanConfig/akanConfig.ts +332 -0
  265. package/devkit/akanConfig/index.ts +2 -0
  266. package/devkit/akanConfig/types.ts +187 -0
  267. package/devkit/applicationBuildReporter.ts +69 -0
  268. package/devkit/applicationBuildRunner.ts +302 -0
  269. package/devkit/applicationReleasePackager.ts +205 -0
  270. package/devkit/artifact/implicitRootLayout.ts +155 -0
  271. package/devkit/artifact/index.ts +1 -0
  272. package/devkit/artifact/routeSeedIndex.ts +128 -0
  273. package/devkit/auth.ts +41 -0
  274. package/devkit/builder.ts +164 -0
  275. package/devkit/capacitor.base.config.ts +74 -0
  276. package/devkit/capacitorApp.ts +385 -0
  277. package/devkit/commandDecorators/argMeta.ts +88 -0
  278. package/devkit/commandDecorators/command.ts +314 -0
  279. package/devkit/commandDecorators/commandBuilder.ts +188 -0
  280. package/devkit/commandDecorators/commandMeta.ts +6 -0
  281. package/devkit/commandDecorators/dependencyBuilder.ts +100 -0
  282. package/devkit/commandDecorators/helpFormatter.ts +217 -0
  283. package/devkit/commandDecorators/index.ts +8 -0
  284. package/devkit/commandDecorators/targetMeta.ts +31 -0
  285. package/devkit/commandDecorators/types.ts +10 -0
  286. package/devkit/constants.ts +25 -0
  287. package/devkit/createTunnel.ts +36 -0
  288. package/devkit/dependencyScanner.ts +339 -0
  289. package/devkit/executors.ts +1326 -0
  290. package/devkit/extractDeps.ts +85 -0
  291. package/devkit/fileEditor.ts +106 -0
  292. package/devkit/fileSys.ts +39 -0
  293. package/devkit/frontendBuild/allRoutesBuilder.ts +103 -0
  294. package/devkit/frontendBuild/clientBuildTypes.ts +114 -0
  295. package/devkit/frontendBuild/clientEntriesBundler.ts +300 -0
  296. package/devkit/frontendBuild/clientEntryDiscovery.ts +196 -0
  297. package/devkit/frontendBuild/csrArtifactBuilder.ts +237 -0
  298. package/devkit/frontendBuild/cssCompiler.ts +279 -0
  299. package/devkit/frontendBuild/cssImportResolver.ts +116 -0
  300. package/devkit/frontendBuild/fontOptimizer.ts +427 -0
  301. package/devkit/frontendBuild/hmrChangeClassifier.ts +28 -0
  302. package/devkit/frontendBuild/hmrWatcher.ts +101 -0
  303. package/devkit/frontendBuild/index.ts +18 -0
  304. package/devkit/frontendBuild/pagesBundleBuilder.ts +137 -0
  305. package/devkit/frontendBuild/pagesEntrySourceGenerator.ts +37 -0
  306. package/devkit/frontendBuild/precompressArtifacts.ts +59 -0
  307. package/devkit/frontendBuild/routeClientBuilder.ts +290 -0
  308. package/devkit/frontendBuild/routesManifestArtifactSerializer.ts +62 -0
  309. package/devkit/frontendBuild/ssrBaseArtifactBuilder.ts +139 -0
  310. package/devkit/frontendBuild/vendorSpecifiers.ts +16 -0
  311. package/devkit/frontendBuild/watchRootResolver.ts +28 -0
  312. package/devkit/getCredentials.ts +19 -0
  313. package/devkit/getDirname.ts +3 -0
  314. package/devkit/getModelFileData.ts +59 -0
  315. package/devkit/getRelatedCnsts.ts +300 -0
  316. package/devkit/guideline.ts +19 -0
  317. package/devkit/incrementalBuilder/incrementalBuilder.host.ts +78 -0
  318. package/devkit/incrementalBuilder/incrementalBuilder.proc.ts +330 -0
  319. package/devkit/incrementalBuilder/index.ts +1 -0
  320. package/devkit/index.ts +36 -0
  321. package/devkit/lint/no-import-client-functions.grit +32 -0
  322. package/devkit/lint/no-import-external-library.grit +21 -0
  323. package/devkit/lint/no-js-private-class-method.grit +42 -0
  324. package/devkit/lint/no-use-client-in-server.grit +7 -0
  325. package/devkit/lint/non-scalar-props-restricted.grit +13 -0
  326. package/devkit/linter.ts +248 -0
  327. package/devkit/mobile/index.ts +1 -0
  328. package/devkit/mobile/mobileTarget.ts +47 -0
  329. package/devkit/prompter.ts +71 -0
  330. package/devkit/scanInfo.ts +605 -0
  331. package/devkit/selectModel.ts +11 -0
  332. package/devkit/spinner.ts +54 -0
  333. package/devkit/sshTunnel.ts +151 -0
  334. package/devkit/streamAi.ts +45 -0
  335. package/devkit/transforms/barrelAnalyzer.ts +249 -0
  336. package/devkit/transforms/barrelImportsPlugin.ts +451 -0
  337. package/devkit/transforms/externalizeFrameworkPlugin.ts +159 -0
  338. package/devkit/transforms/index.ts +5 -0
  339. package/devkit/transforms/rscUseClientTransform.ts +52 -0
  340. package/devkit/transforms/useClientBundlePlugin.ts +47 -0
  341. package/devkit/typeChecker.ts +260 -0
  342. package/devkit/types.ts +42 -0
  343. package/devkit/ui/MultiScrollList.tsx +228 -0
  344. package/devkit/ui/ScrollList.tsx +106 -0
  345. package/devkit/ui/index.ts +2 -0
  346. package/devkit/uploadRelease.ts +95 -0
  347. package/devkit/useStdoutDimensions.ts +20 -0
  348. package/dictionary/base.dictionary.ts +91 -0
  349. package/dictionary/dictInfo.ts +1079 -0
  350. package/dictionary/dictionary.ts +10 -0
  351. package/dictionary/index.ts +12 -0
  352. package/dictionary/locale.ts +230 -0
  353. package/dictionary/trans.ts +196 -0
  354. package/document/by.ts +39 -0
  355. package/document/dataLoader.ts +91 -0
  356. package/document/database.ts +168 -0
  357. package/document/databaseRegistry.ts +113 -0
  358. package/document/documentQuery.ts +143 -0
  359. package/document/documentSchema.ts +91 -0
  360. package/document/filterMeta.ts +210 -0
  361. package/document/index.ts +11 -0
  362. package/document/into.ts +169 -0
  363. package/document/loaderInfo.ts +50 -0
  364. package/document/schema.ts +24 -0
  365. package/document/types.ts +41 -0
  366. package/fetch/client/fetchClient.ts +600 -0
  367. package/fetch/client/httpClient.ts +157 -0
  368. package/fetch/client/index.ts +3 -0
  369. package/fetch/client/wsClient.ts +246 -0
  370. package/fetch/fetchType/appliedReturn.type.ts +108 -0
  371. package/fetch/fetchType/buildFetch.type.ts +24 -0
  372. package/fetch/fetchType/clientSignal.type.ts +22 -0
  373. package/fetch/fetchType/endpointFetch.type.ts +56 -0
  374. package/fetch/fetchType/index.ts +5 -0
  375. package/fetch/fetchType/sliceFetch.type.ts +173 -0
  376. package/fetch/index.ts +4 -0
  377. package/fetch/requestStorage.ts +127 -0
  378. package/fetch/serializer/fetch.serializer.ts +131 -0
  379. package/fetch/serializer/index.ts +1 -0
  380. package/fetch/types.ts +28 -0
  381. package/package.json +202 -5
  382. package/server/SSR_MEMORY_DIAGNOSIS.md +107 -0
  383. package/server/akanApp.ts +855 -0
  384. package/server/akanLib.ts +43 -0
  385. package/server/akanOption.ts +42 -0
  386. package/server/akanServer.ts +369 -0
  387. package/server/artifact/builderRpc.ts +124 -0
  388. package/server/artifact/index.ts +6 -0
  389. package/server/artifact/ipcTypes.ts +46 -0
  390. package/server/artifact/manifestTypes.ts +19 -0
  391. package/server/artifact/routeClientCache.ts +224 -0
  392. package/server/artifact/routeSeedIndexStore.ts +89 -0
  393. package/server/artifact/routesManifestStore.ts +120 -0
  394. package/server/decorators.ts +95 -0
  395. package/server/di/diLifecycle.ts +520 -0
  396. package/server/di/index.ts +4 -0
  397. package/server/di/predefinedAdaptor.ts +77 -0
  398. package/server/di/resolveAdaptorHierarchy.ts +82 -0
  399. package/server/di/resolveHierarchy.ts +89 -0
  400. package/server/di/resolveServiceHierarchy.ts +47 -0
  401. package/server/di/utils.ts +40 -0
  402. package/server/hmr/changeBatch.ts +14 -0
  403. package/server/hmr/clientScript.ts +310 -0
  404. package/server/hmr/devHmrController.ts +395 -0
  405. package/server/hmr/index.ts +4 -0
  406. package/server/hmr/wsHub.ts +56 -0
  407. package/server/imageOptimizer.ts +427 -0
  408. package/server/imageOptimizerError.ts +8 -0
  409. package/server/index.ts +14 -0
  410. package/server/lifecycle/shutdownManager.ts +52 -0
  411. package/server/logging/rotatingLogWriter.ts +190 -0
  412. package/server/processMetricsCollector.ts +78 -0
  413. package/server/proxy/akanResponse.ts +16 -0
  414. package/server/proxy/bunRequestFields.ts +12 -0
  415. package/server/proxy/hostBasePathWebProxy.ts +112 -0
  416. package/server/proxy/index.ts +15 -0
  417. package/server/proxy/localeWebProxy.ts +71 -0
  418. package/server/proxy/types.ts +41 -0
  419. package/server/proxy/webProxyRunner.ts +90 -0
  420. package/server/resolver/database.resolver.ts +340 -0
  421. package/server/resolver/index.ts +3 -0
  422. package/server/resolver/resolver.contract.fixture.ts +222 -0
  423. package/server/resolver/service.resolver.ts +176 -0
  424. package/server/resolver/signal.resolver.ts +386 -0
  425. package/server/robots.ts +32 -0
  426. package/server/routeElementComposer.tsx +91 -0
  427. package/server/routeTreeBuilder.ts +279 -0
  428. package/server/routing/apiRouter.ts +226 -0
  429. package/server/rscClient.tsx +140 -0
  430. package/server/rscWorker.tsx +625 -0
  431. package/server/rscWorkerHost.ts +616 -0
  432. package/server/sitemap.ts +90 -0
  433. package/server/ssrFromRscRenderer.tsx +285 -0
  434. package/server/ssrTypes.ts +48 -0
  435. package/server/types/react-server-dom-webpack.d.ts +91 -0
  436. package/server/types.tsx +109 -0
  437. package/server/vendor/akanjs-base.ts +1 -0
  438. package/server/vendor/akanjs-common.ts +1 -0
  439. package/server/vendor/akanjs-constant.ts +1 -0
  440. package/server/vendor/akanjs-store.ts +1 -0
  441. package/server/vendor/react-dom-client.ts +5 -0
  442. package/server/vendor/react-dom.ts +21 -0
  443. package/server/vendor/react-jsx-dev-runtime.ts +5 -0
  444. package/server/vendor/react-jsx-runtime.ts +5 -0
  445. package/server/vendor/react-refresh-runtime.ts +6 -0
  446. package/server/vendor/react-server-dom-webpack-client-browser.ts +12 -0
  447. package/server/vendor/react.ts +51 -0
  448. package/server/vendor/scheduler.ts +23 -0
  449. package/server/webRouter.ts +712 -0
  450. package/service/adapt.ts +47 -0
  451. package/service/base.service.ts +18 -0
  452. package/service/index.ts +10 -0
  453. package/service/injectInfo.ts +393 -0
  454. package/service/ipcTypes.ts +127 -0
  455. package/service/predefinedAdaptor/cache.adaptor.ts +105 -0
  456. package/service/predefinedAdaptor/compress.adaptor.ts +357 -0
  457. package/service/predefinedAdaptor/database.adaptor.ts +1310 -0
  458. package/service/predefinedAdaptor/index.ts +13 -0
  459. package/service/predefinedAdaptor/logging.adaptor.ts +36 -0
  460. package/service/predefinedAdaptor/queue.adaptor.ts +42 -0
  461. package/service/predefinedAdaptor/role.adaptor.ts +18 -0
  462. package/service/predefinedAdaptor/schedule.adaptor.ts +188 -0
  463. package/service/predefinedAdaptor/solidCache.adaptor.ts +143 -0
  464. package/service/predefinedAdaptor/solidPubsub.adaptor.ts +98 -0
  465. package/service/predefinedAdaptor/solidQueue.adaptor.ts +203 -0
  466. package/service/predefinedAdaptor/solidSqlite.ts +85 -0
  467. package/service/predefinedAdaptor/sqlitePath.ts +20 -0
  468. package/service/predefinedAdaptor/storage.adaptor.ts +121 -0
  469. package/service/predefinedAdaptor/websocket.adaptor.ts +313 -0
  470. package/service/serve.ts +223 -0
  471. package/service/serviceModule.ts +221 -0
  472. package/service/serviceRegistry.ts +26 -0
  473. package/service/types.ts +113 -0
  474. package/signal/base.signal.ts +46 -0
  475. package/signal/endpoint.ts +122 -0
  476. package/signal/endpointInfo.ts +374 -0
  477. package/signal/exception.ts +50 -0
  478. package/signal/guard.ts +18 -0
  479. package/signal/guards.ts +16 -0
  480. package/signal/index.ts +18 -0
  481. package/signal/intercept.ts +39 -0
  482. package/signal/internal.ts +56 -0
  483. package/signal/internalArg.ts +38 -0
  484. package/signal/internalInfo.ts +208 -0
  485. package/signal/middleware.ts +108 -0
  486. package/signal/serializer/fetch.serializer.ts +128 -0
  487. package/signal/serializer/index.ts +1 -0
  488. package/signal/serverSignal.ts +114 -0
  489. package/signal/signalContext.ts +446 -0
  490. package/signal/signalRegistry.ts +82 -0
  491. package/signal/slice.ts +158 -0
  492. package/signal/sliceInfo.ts +254 -0
  493. package/signal/types.ts +131 -0
  494. package/store/action.ts +1067 -0
  495. package/store/baseSt.ts +81 -0
  496. package/store/hooks.ts +2 -0
  497. package/store/index.ts +8 -0
  498. package/store/rootStore.ts +26 -0
  499. package/store/state.ts +226 -0
  500. package/store/stateBuilder.ts +429 -0
  501. package/store/stateInfo.ts +66 -0
  502. package/store/store.ts +194 -0
  503. package/store/storeInstance.ts +382 -0
  504. package/store/storeRegistry.ts +84 -0
  505. package/store/types.ts +69 -0
  506. package/store/withSelector.ts +62 -0
  507. package/test/index.ts +16 -0
  508. package/test/playwright.config.base.ts +48 -0
  509. package/test/playwright.pageAgent.ts +41 -0
  510. package/test/sample.ts +19 -0
  511. package/test/sampleOf.ts +70 -0
  512. package/test/signalTest.preload.ts +10 -0
  513. package/test/signalTestRuntime.ts +126 -0
  514. package/test/testServer.ts +187 -0
  515. package/ui/BottomSheet.tsx +103 -0
  516. package/ui/Button.tsx +70 -0
  517. package/ui/ClientSide.tsx +11 -0
  518. package/ui/Clipboard.tsx +49 -0
  519. package/ui/Constant/Doc.tsx +696 -0
  520. package/ui/Constant/Mermaid.tsx +149 -0
  521. package/ui/Constant/index.ts +6 -0
  522. package/ui/Constant/schemaDoc.ts +324 -0
  523. package/ui/Copy.tsx +27 -0
  524. package/ui/CsrImage.tsx +38 -0
  525. package/ui/Data/CardList.tsx +141 -0
  526. package/ui/Data/Dashboard.tsx +72 -0
  527. package/ui/Data/Insight.tsx +35 -0
  528. package/ui/Data/Item.tsx +285 -0
  529. package/ui/Data/ListContainer.tsx +320 -0
  530. package/ui/Data/Pagination.tsx +54 -0
  531. package/ui/Data/QueryMaker.tsx +21 -0
  532. package/ui/Data/TableList.tsx +161 -0
  533. package/ui/Data/index.ts +11 -0
  534. package/ui/Data/index_.tsx +11 -0
  535. package/ui/DatePicker.tsx +184 -0
  536. package/ui/Dialog/Action.tsx +15 -0
  537. package/ui/Dialog/Close.tsx +22 -0
  538. package/ui/Dialog/Content.tsx +11 -0
  539. package/ui/Dialog/Modal.tsx +137 -0
  540. package/ui/Dialog/Provider.tsx +33 -0
  541. package/ui/Dialog/Title.tsx +15 -0
  542. package/ui/Dialog/Trigger.tsx +22 -0
  543. package/ui/Dialog/context.ts +20 -0
  544. package/ui/Dialog/index.tsx +15 -0
  545. package/ui/DragAction.tsx +129 -0
  546. package/ui/DraggableList.tsx +230 -0
  547. package/ui/Dropdown.tsx +51 -0
  548. package/ui/Empty.tsx +32 -0
  549. package/ui/Field.tsx +1556 -0
  550. package/ui/FontFace.tsx +26 -0
  551. package/ui/Image.tsx +185 -0
  552. package/ui/InfiniteScroll.tsx +67 -0
  553. package/ui/Input.tsx +636 -0
  554. package/ui/KeyboardAvoiding.tsx +62 -0
  555. package/ui/Layout/BottomAction.tsx +15 -0
  556. package/ui/Layout/BottomInset.tsx +42 -0
  557. package/ui/Layout/BottomTab.tsx +71 -0
  558. package/ui/Layout/Header.tsx +38 -0
  559. package/ui/Layout/LeftSider.tsx +34 -0
  560. package/ui/Layout/Navbar.tsx +46 -0
  561. package/ui/Layout/RightSider.tsx +41 -0
  562. package/ui/Layout/Sider.tsx +69 -0
  563. package/ui/Layout/Template.tsx +11 -0
  564. package/ui/Layout/TopLeftAction.tsx +28 -0
  565. package/ui/Layout/Unit.tsx +19 -0
  566. package/ui/Layout/View.tsx +12 -0
  567. package/ui/Layout/Zone.tsx +10 -0
  568. package/ui/Layout/index.ts +27 -0
  569. package/ui/Link/Back.tsx +15 -0
  570. package/ui/Link/Close.tsx +20 -0
  571. package/ui/Link/CsrLink.tsx +41 -0
  572. package/ui/Link/Lang.tsx +16 -0
  573. package/ui/Link/SsrLink.tsx +68 -0
  574. package/ui/Link/index.tsx +32 -0
  575. package/ui/Link/types.ts +47 -0
  576. package/ui/Load/Edit.tsx +19 -0
  577. package/ui/Load/Edit_Client.tsx +120 -0
  578. package/ui/Load/Page.tsx +40 -0
  579. package/ui/Load/PageCSR.tsx +39 -0
  580. package/ui/Load/Pagination.tsx +89 -0
  581. package/ui/Load/Units.tsx +330 -0
  582. package/ui/Load/View.tsx +115 -0
  583. package/ui/Load/index.ts +11 -0
  584. package/ui/Load/index_.tsx +6 -0
  585. package/ui/Loading/Area.tsx +10 -0
  586. package/ui/Loading/Button.tsx +17 -0
  587. package/ui/Loading/Input.tsx +17 -0
  588. package/ui/Loading/ProgressBar.tsx +14 -0
  589. package/ui/Loading/Skeleton.tsx +22 -0
  590. package/ui/Loading/Spin.tsx +22 -0
  591. package/ui/Loading/index.tsx +8 -0
  592. package/ui/Menu.tsx +273 -0
  593. package/ui/Modal.tsx +87 -0
  594. package/ui/Model/AdminPanel.tsx +51 -0
  595. package/ui/Model/Edit.tsx +46 -0
  596. package/ui/Model/EditModal.tsx +301 -0
  597. package/ui/Model/EditWrapper.tsx +48 -0
  598. package/ui/Model/LoadInit.tsx +11 -0
  599. package/ui/Model/New.tsx +46 -0
  600. package/ui/Model/NewWrapper.tsx +20 -0
  601. package/ui/Model/NewWrapper_Client.tsx +57 -0
  602. package/ui/Model/Remove.tsx +75 -0
  603. package/ui/Model/RemoveWrapper.tsx +38 -0
  604. package/ui/Model/SureToRemove.tsx +108 -0
  605. package/ui/Model/View.tsx +65 -0
  606. package/ui/Model/ViewEditModal.tsx +125 -0
  607. package/ui/Model/ViewModal.tsx +71 -0
  608. package/ui/Model/ViewWrapper.tsx +38 -0
  609. package/ui/Model/index.ts +33 -0
  610. package/ui/Model/index_.tsx +16 -0
  611. package/ui/More.tsx +56 -0
  612. package/ui/ObjectId.tsx +29 -0
  613. package/ui/Pagination.tsx +120 -0
  614. package/ui/Popconfirm.tsx +135 -0
  615. package/ui/Portal.tsx +10 -0
  616. package/ui/Radio.tsx +53 -0
  617. package/ui/RecentTime.tsx +123 -0
  618. package/ui/Refresh.tsx +24 -0
  619. package/ui/ScreenNavigator.tsx +129 -0
  620. package/ui/Select.tsx +322 -0
  621. package/ui/Signal/Arg.tsx +352 -0
  622. package/ui/Signal/Doc.tsx +231 -0
  623. package/ui/Signal/Listener.tsx +74 -0
  624. package/ui/Signal/Message.tsx +267 -0
  625. package/ui/Signal/Object.tsx +131 -0
  626. package/ui/Signal/PubSub.tsx +247 -0
  627. package/ui/Signal/Request.tsx +30 -0
  628. package/ui/Signal/Response.tsx +76 -0
  629. package/ui/Signal/RestApi.tsx +390 -0
  630. package/ui/Signal/WebSocket.tsx +47 -0
  631. package/ui/Signal/index.ts +10 -0
  632. package/ui/Signal/makeExample.ts +75 -0
  633. package/ui/System/CSR.tsx +420 -0
  634. package/ui/System/Client.tsx +296 -0
  635. package/ui/System/Common.tsx +83 -0
  636. package/ui/System/DevModeToggle.tsx +21 -0
  637. package/ui/System/Gtag.tsx +69 -0
  638. package/ui/System/Messages.tsx +175 -0
  639. package/ui/System/Reconnect.tsx +156 -0
  640. package/ui/System/Root.tsx +10 -0
  641. package/ui/System/SSR.tsx +163 -0
  642. package/ui/System/SelectLanguage.tsx +47 -0
  643. package/ui/System/ThemeToggle.tsx +98 -0
  644. package/ui/System/index.tsx +23 -0
  645. package/ui/Tab/Menu.tsx +56 -0
  646. package/ui/Tab/Menus.tsx +10 -0
  647. package/ui/Tab/Panel.tsx +25 -0
  648. package/ui/Tab/Provider.tsx +25 -0
  649. package/ui/Tab/context.ts +16 -0
  650. package/ui/Tab/index.tsx +11 -0
  651. package/ui/Table.tsx +131 -0
  652. package/ui/ToggleSelect.tsx +144 -0
  653. package/ui/Unauthorized.tsx +29 -0
  654. package/ui/animated.tsx +8 -0
  655. package/ui/fontCss.ts +86 -0
  656. package/ui/index.ts +44 -0
  657. package/ui/styles.css +617 -0
  658. package/webkit/bootCsr.tsx +275 -0
  659. package/webkit/createRobotPage.ts +15 -0
  660. package/webkit/createSitemapPage.ts +4 -0
  661. package/webkit/index.ts +19 -0
  662. package/webkit/lazy.tsx +37 -0
  663. package/webkit/types.ts +7 -0
  664. package/webkit/useCamera.tsx +99 -0
  665. package/webkit/useCodepush.tsx +99 -0
  666. package/webkit/useContact.tsx +48 -0
  667. package/webkit/useCsrValues.ts +661 -0
  668. package/webkit/useDebounce.ts +24 -0
  669. package/webkit/useFetch.ts +48 -0
  670. package/webkit/useGeoLocation.tsx +24 -0
  671. package/webkit/useHistory.ts +76 -0
  672. package/webkit/useInterval.ts +21 -0
  673. package/webkit/useLocation.ts +69 -0
  674. package/webkit/usePurchase.tsx +156 -0
  675. package/webkit/usePushNoti.tsx +48 -0
  676. package/webkit/useThrottle.ts +22 -0
  677. package/src/index.js +0 -2
  678. package/src/index.js.map +0 -1
  679. package/src/lib/akan2.js +0 -4
  680. package/src/lib/akan2.js.map +0 -1
  681. package/src/run.js +0 -4
  682. package/src/run.js.map +0 -1
@@ -0,0 +1,1079 @@
1
+ import type { GetStateObject } from "akanjs/base";
2
+ import { capitalize } from "akanjs/common";
3
+ import type { BaseInsight, BaseObject } from "akanjs/constant";
4
+ import type { BaseFilterQueryKey, BaseFilterSortKey, FilterInfo, FilterInstance } from "akanjs/document";
5
+ import type { EndpointInfo, SliceInfo } from "akanjs/signal";
6
+ import type { DictionaryNode, RootDictionary } from "./trans";
7
+
8
+ type MutableDictionaryNode = DictionaryNode & { t?: string; desc?: DictionaryNode };
9
+ type EnumValueKey = string | number;
10
+
11
+ const ensureNode = (target: DictionaryNode, key: string): MutableDictionaryNode => {
12
+ target[key] ??= {};
13
+ return target[key] as MutableDictionaryNode;
14
+ };
15
+
16
+ const getRootModelNode = (rootDict: RootDictionary, language: string, refName: string): MutableDictionaryNode => {
17
+ rootDict[language] ??= {};
18
+ return ensureNode(rootDict[language], refName);
19
+ };
20
+
21
+ const getTranslatedRootModelNode = <Languages extends readonly string[]>(
22
+ rootDict: RootDictionary,
23
+ languages: Languages,
24
+ idx: number,
25
+ refName: string,
26
+ ): MutableDictionaryNode => getRootModelNode(rootDict, languages[idx] as string, refName);
27
+
28
+ class FieldTranslation<Languages extends [string, ...string[]]> {
29
+ static translate = <Languages extends [string, ...string[]]>(trans: Languages) =>
30
+ new FieldTranslation<Languages>(trans);
31
+ trans: Languages;
32
+ descTrans?: Languages;
33
+ constructor(trans: Languages) {
34
+ this.trans = trans;
35
+ }
36
+ desc(descTrans: Languages) {
37
+ this.descTrans = descTrans;
38
+ return this;
39
+ }
40
+ }
41
+
42
+ class FunctionTranslation<Languages extends [string, ...string[]], ArgName extends string = never> {
43
+ trans: Languages;
44
+ descTrans?: Languages;
45
+ argTrans: { [key in ArgName]: FieldTranslation<Languages> } = {} as {
46
+ [key in ArgName]: FieldTranslation<Languages>;
47
+ };
48
+ constructor(trans: Languages) {
49
+ this.trans = trans;
50
+ }
51
+ desc(descTrans: Languages) {
52
+ this.descTrans = descTrans;
53
+ return this;
54
+ }
55
+ arg<TransMap extends { [key: string]: FieldTranslation<Languages> }>(
56
+ translate: (t: (trans: Languages) => FieldTranslation<Languages>) => TransMap,
57
+ ) {
58
+ Object.assign(this.argTrans, translate(FieldTranslation.translate));
59
+ return this as unknown as FunctionTranslation<Languages, keyof TransMap & string>;
60
+ }
61
+ }
62
+ const fn = <Languages extends [string, ...string[]] = [string]>(trans: Languages) => new FunctionTranslation(trans);
63
+
64
+ type BaseModelCrudGetSignalTranslation<
65
+ T extends string,
66
+ Languages extends [string, ...string[]] = [string],
67
+ _CapitalizedRefName extends string = Capitalize<T>,
68
+ > = {
69
+ [K in T]: FunctionTranslation<Languages, `${T}Id`>;
70
+ } & {
71
+ [K in `light${_CapitalizedRefName}`]: FunctionTranslation<Languages, `${T}Id`>;
72
+ } & {
73
+ [K in `create${_CapitalizedRefName}`]: FunctionTranslation<Languages, "data">;
74
+ } & {
75
+ [K in `update${_CapitalizedRefName}`]: FunctionTranslation<Languages, `${T}Id` | "data">;
76
+ } & {
77
+ [K in `remove${_CapitalizedRefName}`]: FunctionTranslation<Languages, `${T}Id`>;
78
+ };
79
+ type GetBaseSignalKey<T extends string> = keyof BaseModelCrudGetSignalTranslation<T>;
80
+
81
+ export class ModelDictInfo<
82
+ Languages extends [string, ...string[]] = [string],
83
+ ModelKey extends string = keyof BaseObject,
84
+ InsightKey extends string = keyof BaseInsight,
85
+ QueryKey extends string = BaseFilterQueryKey,
86
+ SortKey extends string = BaseFilterSortKey,
87
+ EnumKey extends string = never,
88
+ BaseSignalKey extends string = never,
89
+ SliceKey extends string = never,
90
+ EndpointKey extends string = never,
91
+ ErrorKey extends string = never,
92
+ EtcKey extends string = never,
93
+ > {
94
+ static baseModelDictionary: {
95
+ [key in keyof BaseObject]: FieldTranslation<[string, string]>;
96
+ } = {
97
+ id: FieldTranslation.translate(["ID", "아이디"]).desc(["Unique ID value", "유니크한 아이디값"]),
98
+ createdAt: FieldTranslation.translate(["CreatedAt", "생성일"]).desc(["Data created time", "데이터 생성 시각"]),
99
+ updatedAt: FieldTranslation.translate(["UpdatedAt", "수정일"]).desc([
100
+ "Data updated time",
101
+ "데이터 마지막 수정 시각",
102
+ ]),
103
+ removedAt: FieldTranslation.translate(["RemovedAt", "삭제일"]).desc(["Data removed time", "데이터 삭제 시각"]),
104
+ };
105
+ static baseInsightDictionary: {
106
+ [key in keyof BaseInsight]: FieldTranslation<[string, string]>;
107
+ } = {
108
+ count: FieldTranslation.translate(["Count", "개수"]).desc(["Total number of items", "총 아이템 개수"]),
109
+ };
110
+ static baseQueryDictionary: {
111
+ [key in BaseFilterQueryKey]: FieldTranslation<[string, string]>;
112
+ } = {
113
+ any: fn(["Any", "전체"]).desc(["All", "전체"]),
114
+ };
115
+ static baseSortDictionary: {
116
+ [key in BaseFilterSortKey]: FieldTranslation<[string, string]>;
117
+ } = {
118
+ latest: FieldTranslation.translate(["Latest", "최신순"]).desc(["Latest", "최신순"]),
119
+ oldest: FieldTranslation.translate(["Oldest", "오래된순"]).desc(["Oldest", "오래된순"]),
120
+ };
121
+ static getBaseSignalDictionary<T extends string>(refName: T): BaseModelCrudGetSignalTranslation<T, [string, string]> {
122
+ const capRefName = capitalize(refName);
123
+ return {
124
+ [refName]: fn([`Get ${capRefName}`, `${capRefName} 조회`])
125
+ .desc([`Get ${capRefName}`, `${capRefName} 조회`])
126
+ .arg((t) => ({
127
+ [`${refName}Id`]: t(["Id", "아이디"]).desc([`Id of ${capRefName}`, `${capRefName} 아이디`]),
128
+ })),
129
+ [`light${capRefName}`]: fn([`Get light version of ${capRefName}`, `${capRefName} 경량화 버전 조회`])
130
+ .desc([`Get light version of ${capRefName}`, `${capRefName} 경량화 버전 조회`])
131
+ .arg((t) => ({
132
+ [`${refName}Id`]: t(["Id", "아이디"]).desc([`Id of ${capRefName}`, `${capRefName} 아이디`]),
133
+ })),
134
+ [`create${capRefName}`]: fn([`Create ${capRefName}`, `${capRefName} 생성`])
135
+ .desc([`Create ${capRefName}`, `${capRefName} 생성`])
136
+ .arg((t) => ({
137
+ data: t(["Data", "데이터"]).desc([`Data of ${capRefName}`, `${capRefName} 데이터`]),
138
+ })),
139
+ [`update${capRefName}`]: fn([`Update ${capRefName}`, `${capRefName} 수정`])
140
+ .desc([`Update ${capRefName}`, `${capRefName} 수정`])
141
+ .arg((t) => ({
142
+ [`${refName}Id`]: t(["Id", "아이디"]).desc([`Id of ${capRefName}`, `${capRefName} 아이디`]),
143
+ data: t(["Data", "데이터"]).desc([`Data of ${capRefName}`, `${capRefName} 데이터`]),
144
+ })),
145
+ [`remove${capRefName}`]: fn([`Remove ${capRefName}`, `${capRefName} 삭제`])
146
+ .desc([`Remove ${capRefName}`, `${capRefName} 삭제`])
147
+ .arg((t) => ({
148
+ [`${refName}Id`]: t(["Id", "아이디"]).desc([`Id of ${capRefName}`, `${capRefName} 아이디`]),
149
+ })),
150
+ } as unknown as BaseModelCrudGetSignalTranslation<T, [string, string]>;
151
+ }
152
+ static baseSliceDictionary: {
153
+ [key in ""]: FunctionTranslation<[string, string], "query">;
154
+ } = {
155
+ [""]: fn(["Universal", "유니버설"])
156
+ .desc(["Universal Slice", "유니버설 슬라이스"])
157
+ .arg((t) => ({
158
+ query: t(["Query", "쿼리"]).desc(["Query Description", "쿼리 설명"]),
159
+ })),
160
+ };
161
+
162
+ languages: Languages;
163
+ modelTranslation?: FieldTranslation<Languages>;
164
+ modelDictionary: { [K in ModelKey]: FieldTranslation<Languages> } = {} as {
165
+ [K in ModelKey]: FieldTranslation<Languages>;
166
+ };
167
+ insightDictionary: { [K in InsightKey]: FieldTranslation<Languages> } = {} as {
168
+ [K in InsightKey]: FieldTranslation<Languages>;
169
+ };
170
+ queryDictionary: { [K in QueryKey]: FunctionTranslation<Languages> } = {} as {
171
+ [K in QueryKey]: FunctionTranslation<Languages>;
172
+ };
173
+ sortDictionary: { [K in SortKey]: FieldTranslation<Languages> } = {} as {
174
+ [K in SortKey]: FieldTranslation<Languages>;
175
+ };
176
+ enumDictionary: {
177
+ [K in EnumKey]: { [key: string]: FieldTranslation<Languages> };
178
+ } = {} as {
179
+ [K in EnumKey]: { [key: string]: FieldTranslation<Languages> };
180
+ };
181
+ baseSignalDictionary: {
182
+ [K in BaseSignalKey]: FunctionTranslation<Languages>;
183
+ } = {} as {
184
+ [K in BaseSignalKey]: FunctionTranslation<Languages>;
185
+ };
186
+ sliceDictionary: { [K in SliceKey]: FunctionTranslation<Languages> } = {} as {
187
+ [K in SliceKey]: FunctionTranslation<Languages>;
188
+ };
189
+ endpointDictionary: { [K in EndpointKey]: FunctionTranslation<Languages> } = {} as {
190
+ [K in EndpointKey]: FunctionTranslation<Languages>;
191
+ };
192
+ errorDictionary: { [K in ErrorKey]: Languages } = {} as {
193
+ [K in ErrorKey]: Languages;
194
+ };
195
+ etcDictionary: { [K in EtcKey]: Languages } = {} as {
196
+ [K in EtcKey]: Languages;
197
+ };
198
+ constructor(languages: Languages) {
199
+ this.languages = languages;
200
+ }
201
+ of(translate: (t: (trans: Languages) => FieldTranslation<Languages>) => FieldTranslation<Languages>) {
202
+ this.modelTranslation = translate(FieldTranslation.translate);
203
+ return this;
204
+ }
205
+ model<Model extends object>(
206
+ translate: (t: (trans: Languages) => FieldTranslation<Languages>) => {
207
+ [K in Exclude<keyof GetStateObject<Model>, ModelKey>]: FieldTranslation<Languages>;
208
+ },
209
+ ) {
210
+ Object.assign(
211
+ this.modelDictionary,
212
+ translate(FieldTranslation.translate),
213
+ ModelDictInfo.baseModelDictionary,
214
+ ) as unknown as { [K in ModelKey]: FieldTranslation<Languages> };
215
+ return this as unknown as ModelDictInfo<
216
+ Languages,
217
+ keyof GetStateObject<Model> & string,
218
+ InsightKey,
219
+ QueryKey,
220
+ SortKey,
221
+ EnumKey,
222
+ BaseSignalKey,
223
+ SliceKey,
224
+ EndpointKey,
225
+ ErrorKey,
226
+ EtcKey
227
+ >;
228
+ }
229
+ insight<Insight extends object>(
230
+ translate: (t: (trans: Languages) => FieldTranslation<Languages>) => {
231
+ [K in Exclude<keyof GetStateObject<Insight>, InsightKey>]: FieldTranslation<Languages>;
232
+ },
233
+ ) {
234
+ Object.assign(
235
+ this.insightDictionary,
236
+ translate(FieldTranslation.translate),
237
+ ModelDictInfo.baseInsightDictionary,
238
+ ) as unknown as { [K in InsightKey]: FieldTranslation<Languages> };
239
+ return this as unknown as ModelDictInfo<
240
+ Languages,
241
+ ModelKey,
242
+ keyof GetStateObject<Insight> & string,
243
+ QueryKey,
244
+ SortKey,
245
+ EnumKey,
246
+ BaseSignalKey,
247
+ SliceKey,
248
+ EndpointKey,
249
+ ErrorKey,
250
+ EtcKey
251
+ >;
252
+ }
253
+ query<Filter extends FilterInstance>(
254
+ translate: (fn: (trans: Languages) => FunctionTranslation<Languages>) => {
255
+ [K in Exclude<keyof Filter["query"], QueryKey>]: Filter["query"][K] extends FilterInfo<infer ArgNames, any>
256
+ ? FunctionTranslation<Languages, ArgNames[number]>
257
+ : never;
258
+ },
259
+ ) {
260
+ Object.assign(this.queryDictionary, translate(fn), ModelDictInfo.baseQueryDictionary) as unknown as {
261
+ [K in keyof Filter["query"]]: FunctionTranslation<
262
+ Languages,
263
+ Filter["query"][K] extends FilterInfo<infer ArgNames, any> ? ArgNames[number] : never
264
+ >;
265
+ };
266
+ return this as unknown as ModelDictInfo<
267
+ Languages,
268
+ ModelKey,
269
+ InsightKey,
270
+ keyof Filter["query"] & string,
271
+ SortKey,
272
+ EnumKey,
273
+ BaseSignalKey,
274
+ SliceKey,
275
+ EndpointKey,
276
+ ErrorKey,
277
+ EtcKey
278
+ >;
279
+ }
280
+ sort<Filter extends FilterInstance>(
281
+ translate: (t: (trans: Languages) => FieldTranslation<Languages>) => {
282
+ [K in Exclude<keyof Filter["sort"], SortKey>]: FieldTranslation<Languages>;
283
+ },
284
+ ) {
285
+ Object.assign(
286
+ this.sortDictionary,
287
+ translate(FieldTranslation.translate),
288
+ ModelDictInfo.baseSortDictionary,
289
+ ) as unknown as { [K in SortKey]: FieldTranslation<Languages> };
290
+ return this as unknown as ModelDictInfo<
291
+ Languages,
292
+ ModelKey,
293
+ InsightKey,
294
+ QueryKey,
295
+ keyof Filter["sort"] & string,
296
+ EnumKey,
297
+ BaseSignalKey,
298
+ SliceKey,
299
+ EndpointKey,
300
+ ErrorKey,
301
+ EtcKey
302
+ >;
303
+ }
304
+
305
+ enum<Enum extends { refName: string; value: EnumValueKey }>(
306
+ enumName: Enum["refName"],
307
+ translate: (t: (trans: Languages) => FieldTranslation<Languages>) => {
308
+ [K in Enum["value"]]: FieldTranslation<Languages>;
309
+ },
310
+ ) {
311
+ Object.assign(this.enumDictionary, {
312
+ [enumName]: translate(FieldTranslation.translate),
313
+ });
314
+ return this as unknown as ModelDictInfo<
315
+ Languages,
316
+ ModelKey,
317
+ InsightKey,
318
+ QueryKey,
319
+ SortKey,
320
+ EnumKey | Enum["refName"],
321
+ BaseSignalKey,
322
+ SliceKey,
323
+ EndpointKey,
324
+ ErrorKey,
325
+ EtcKey
326
+ >;
327
+ }
328
+ slice<Slice>(
329
+ translate: (fn: (trans: Languages) => FunctionTranslation<Languages>) => {
330
+ [K in Exclude<keyof Slice, SliceKey>]: Slice[K] extends SliceInfo<
331
+ any,
332
+ any,
333
+ any,
334
+ any,
335
+ any,
336
+ any,
337
+ any,
338
+ infer ArgNames,
339
+ any,
340
+ any,
341
+ any
342
+ >
343
+ ? FunctionTranslation<Languages, ArgNames[number]>
344
+ : never;
345
+ },
346
+ ) {
347
+ Object.assign(this.sliceDictionary, translate(fn), ModelDictInfo.baseSliceDictionary) as unknown as {
348
+ [K in keyof Slice]: FunctionTranslation<Languages>;
349
+ };
350
+ return this as unknown as ModelDictInfo<
351
+ Languages,
352
+ ModelKey,
353
+ InsightKey,
354
+ QueryKey,
355
+ SortKey,
356
+ EnumKey,
357
+ BaseSignalKey,
358
+ keyof Slice & string,
359
+ EndpointKey,
360
+ ErrorKey,
361
+ EtcKey
362
+ >;
363
+ }
364
+ endpoint<Endpoint>(
365
+ translate: (fn: (trans: Languages) => FunctionTranslation<Languages>) => {
366
+ [K in Exclude<keyof Endpoint, EndpointKey>]: Endpoint[K] extends EndpointInfo<
367
+ any,
368
+ any,
369
+ infer ArgNames,
370
+ any,
371
+ any,
372
+ any,
373
+ any,
374
+ any,
375
+ any,
376
+ any
377
+ >
378
+ ? FunctionTranslation<Languages, ArgNames[number]>
379
+ : never;
380
+ },
381
+ ) {
382
+ Object.assign(this.endpointDictionary, translate(fn)) as unknown as {
383
+ [K in EndpointKey]: FunctionTranslation<Languages>;
384
+ };
385
+ return this as unknown as ModelDictInfo<
386
+ Languages,
387
+ ModelKey,
388
+ InsightKey,
389
+ QueryKey,
390
+ SortKey,
391
+ EnumKey,
392
+ BaseSignalKey,
393
+ SliceKey,
394
+ keyof Endpoint & string,
395
+ ErrorKey,
396
+ EtcKey
397
+ >;
398
+ }
399
+ error<ErrorDict extends { [key: string]: Languages }>(errorDictionary: ErrorDict) {
400
+ Object.assign(this.errorDictionary, errorDictionary);
401
+ return this as unknown as ModelDictInfo<
402
+ Languages,
403
+ ModelKey,
404
+ InsightKey,
405
+ QueryKey,
406
+ SortKey,
407
+ EnumKey,
408
+ BaseSignalKey,
409
+ SliceKey,
410
+ EndpointKey,
411
+ ErrorKey | (keyof ErrorDict & string),
412
+ EtcKey
413
+ >;
414
+ }
415
+ translate<EtcDict extends { [key: string]: Languages }>(etcDictionary: EtcDict) {
416
+ Object.assign(this.etcDictionary, etcDictionary);
417
+ return this as unknown as ModelDictInfo<
418
+ Languages,
419
+ ModelKey,
420
+ InsightKey,
421
+ QueryKey,
422
+ SortKey,
423
+ EnumKey,
424
+ BaseSignalKey,
425
+ SliceKey,
426
+ EndpointKey,
427
+ ErrorKey,
428
+ EtcKey | (keyof EtcDict & string)
429
+ >;
430
+ }
431
+ applyBaseSignal<RefName extends string>(refName: RefName) {
432
+ Object.assign(this.baseSignalDictionary, ModelDictInfo.getBaseSignalDictionary(refName));
433
+ return this as unknown as ModelDictInfo<
434
+ Languages,
435
+ ModelKey,
436
+ InsightKey,
437
+ QueryKey,
438
+ SortKey,
439
+ EnumKey,
440
+ GetBaseSignalKey<RefName>,
441
+ SliceKey,
442
+ EndpointKey,
443
+ ErrorKey,
444
+ EtcKey
445
+ >;
446
+ }
447
+ _registerToRoot(refName: string, rootDict: RootDictionary) {
448
+ this.languages.forEach((language) => {
449
+ getRootModelNode(rootDict, language, refName);
450
+ });
451
+ if (this.modelTranslation) {
452
+ this.modelTranslation.trans.forEach((t, idx) => {
453
+ getTranslatedRootModelNode(rootDict, this.languages, idx, refName).modelName = { t };
454
+ });
455
+ this.modelTranslation.descTrans?.forEach((t, idx) => {
456
+ getTranslatedRootModelNode(rootDict, this.languages, idx, refName).modelDesc = { t };
457
+ });
458
+ }
459
+ this.#registerInsightToRoot(refName, rootDict);
460
+ this.#registerQueryToRoot(refName, rootDict);
461
+ this.#registerSortToRoot(refName, rootDict);
462
+ this.#registerEnumToRoot(rootDict);
463
+ this.#registerBaseSignalToRoot(refName, rootDict);
464
+ this.#registerSliceToRoot(refName, rootDict);
465
+ this.#registerEndpointToRoot(refName, rootDict);
466
+ this.#registerErrorToRoot(refName, rootDict);
467
+ this.#registerModelToRoot(refName, rootDict);
468
+ this.#registerEtcToRoot(refName, rootDict);
469
+ }
470
+ #registerModelToRoot(refName: string, rootDict: RootDictionary) {
471
+ Object.entries(this.modelDictionary as { [key: string]: FieldTranslation<Languages> }).forEach(([key, value]) => {
472
+ value.trans.forEach((t, idx) => {
473
+ getTranslatedRootModelNode(rootDict, this.languages, idx, refName)[key] = { t };
474
+ });
475
+ value.descTrans?.forEach((t, idx) => {
476
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), key).desc = { t };
477
+ });
478
+ });
479
+ }
480
+ #registerInsightToRoot(refName: string, rootDict: RootDictionary) {
481
+ this.languages.forEach((language) => {
482
+ ensureNode(getRootModelNode(rootDict, language, refName), "insight");
483
+ });
484
+ Object.entries(this.insightDictionary as { [key: string]: FieldTranslation<Languages> }).forEach(([key, value]) => {
485
+ value.trans.forEach((t, idx) => {
486
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "insight")[key] = { t };
487
+ });
488
+ value.descTrans?.forEach((t, idx) => {
489
+ ensureNode(
490
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "insight"),
491
+ key,
492
+ ).desc = { t };
493
+ });
494
+ });
495
+ }
496
+ #registerQueryToRoot(refName: string, rootDict: RootDictionary) {
497
+ this.languages.forEach((language) => {
498
+ ensureNode(getRootModelNode(rootDict, language, refName), "query");
499
+ });
500
+ Object.entries(this.queryDictionary as { [key: string]: FunctionTranslation<Languages> }).forEach(
501
+ ([key, value]) => {
502
+ value.trans.forEach((t, idx) => {
503
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "query")[key] = { t, arg: {} };
504
+ });
505
+ value.descTrans?.forEach((t, idx) => {
506
+ ensureNode(
507
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "query"),
508
+ key,
509
+ ).desc = { t };
510
+ });
511
+ Object.entries(value.argTrans as { [key: string]: FieldTranslation<Languages> }).forEach(
512
+ ([argKey, argTrans]) => {
513
+ argTrans.trans.forEach((t, idx) => {
514
+ ensureNode(
515
+ ensureNode(
516
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "query"),
517
+ key,
518
+ ),
519
+ "arg",
520
+ )[argKey] = { t };
521
+ });
522
+ argTrans.descTrans?.forEach((t, idx) => {
523
+ ensureNode(
524
+ ensureNode(
525
+ ensureNode(
526
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "query"),
527
+ key,
528
+ ),
529
+ "arg",
530
+ ),
531
+ argKey,
532
+ ).desc = { t };
533
+ });
534
+ },
535
+ );
536
+ },
537
+ );
538
+ }
539
+ #registerSortToRoot(refName: string, rootDict: RootDictionary) {
540
+ this.languages.forEach((language) => {
541
+ ensureNode(getRootModelNode(rootDict, language, refName), "sort");
542
+ });
543
+ Object.entries(this.sortDictionary as { [key: string]: FieldTranslation<Languages> }).forEach(([key, value]) => {
544
+ value.trans.forEach((t, idx) => {
545
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "sort")[key] = { t };
546
+ });
547
+ value.descTrans?.forEach((t, idx) => {
548
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "sort"), key).desc = {
549
+ t,
550
+ };
551
+ });
552
+ });
553
+ }
554
+ #registerEnumToRoot(rootDict: RootDictionary) {
555
+ Object.entries(
556
+ this.enumDictionary as {
557
+ [key: string]: { [key: string]: FieldTranslation<Languages> };
558
+ },
559
+ ).forEach(([refName, enumTrans]) => {
560
+ this.languages.forEach((language) => {
561
+ getRootModelNode(rootDict, language, refName);
562
+ });
563
+ Object.entries(enumTrans as { [key: string]: FieldTranslation<Languages> }).forEach(([enumKey, enumValue]) => {
564
+ enumValue.trans.forEach((t, idx) => {
565
+ getTranslatedRootModelNode(rootDict, this.languages, idx, refName)[enumKey] = { t };
566
+ });
567
+ enumValue.descTrans?.forEach((t, idx) => {
568
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), enumKey).desc = { t };
569
+ });
570
+ });
571
+ });
572
+ }
573
+ #registerBaseSignalToRoot(refName: string, rootDict: RootDictionary) {
574
+ this.languages.forEach((language) => {
575
+ ensureNode(getRootModelNode(rootDict, language, refName), "signal");
576
+ });
577
+ Object.entries(
578
+ this.baseSignalDictionary as {
579
+ [key: string]: FunctionTranslation<Languages>;
580
+ },
581
+ ).forEach(([key, value]) => {
582
+ value.trans.forEach((t, idx) => {
583
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal")[key] = { t, arg: {} };
584
+ });
585
+ value.descTrans?.forEach((t, idx) => {
586
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"), key).desc =
587
+ { t };
588
+ });
589
+ Object.entries(value.argTrans as { [key: string]: FieldTranslation<Languages> }).forEach(([argKey, argTrans]) => {
590
+ argTrans.trans.forEach((t, idx) => {
591
+ ensureNode(
592
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"), key),
593
+ "arg",
594
+ )[argKey] = { t };
595
+ });
596
+ argTrans.descTrans?.forEach((t, idx) => {
597
+ ensureNode(
598
+ ensureNode(
599
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"), key),
600
+ "arg",
601
+ ),
602
+ argKey,
603
+ ).desc = { t };
604
+ });
605
+ });
606
+ });
607
+ }
608
+ #registerSliceToRoot(refName: string, rootDict: RootDictionary) {
609
+ this.languages.forEach((language) => {
610
+ ensureNode(getRootModelNode(rootDict, language, refName), "signal");
611
+ });
612
+ Object.entries(this.sliceDictionary as { [key: string]: FunctionTranslation<Languages> }).forEach(
613
+ ([sliceKey, sliceTrans]) => {
614
+ const listKey = `${refName}List${capitalize(sliceKey)}`;
615
+ const insightKey = `${refName}Insight${capitalize(sliceKey)}`;
616
+ sliceTrans.trans.forEach((t, idx) => {
617
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal")[listKey] = {
618
+ t: `Slice List - ${t}`,
619
+ arg: {},
620
+ };
621
+ });
622
+ sliceTrans.descTrans?.forEach((t, idx) => {
623
+ ensureNode(
624
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"),
625
+ listKey,
626
+ ).desc = { t: `Slice List - ${t}` };
627
+ });
628
+ sliceTrans.trans.forEach((t, idx) => {
629
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal")[insightKey] = {
630
+ t: `Slice Insight - ${t}`,
631
+ arg: {},
632
+ };
633
+ });
634
+ sliceTrans.descTrans?.forEach((t, idx) => {
635
+ ensureNode(
636
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"),
637
+ insightKey,
638
+ ).desc = { t: `Slice Insight - ${t}` };
639
+ });
640
+ Object.entries(sliceTrans.argTrans as { [key: string]: FieldTranslation<Languages> }).forEach(
641
+ ([argKey, argTrans]) => {
642
+ argTrans.trans.forEach((t, idx) => {
643
+ ensureNode(
644
+ ensureNode(
645
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"),
646
+ listKey,
647
+ ),
648
+ "arg",
649
+ )[argKey] = { t };
650
+ });
651
+ argTrans.descTrans?.forEach((t, idx) => {
652
+ ensureNode(
653
+ ensureNode(
654
+ ensureNode(
655
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"),
656
+ listKey,
657
+ ),
658
+ "arg",
659
+ ),
660
+ argKey,
661
+ ).desc = { t };
662
+ });
663
+ ["skip", "limit", "sort"].forEach((argKey) => {
664
+ argTrans.trans.forEach((t, idx) => {
665
+ ensureNode(
666
+ ensureNode(
667
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"),
668
+ listKey,
669
+ ),
670
+ "arg",
671
+ )[argKey] = { t: argKey };
672
+ });
673
+ argTrans.descTrans?.forEach((t, idx) => {
674
+ ensureNode(
675
+ ensureNode(
676
+ ensureNode(
677
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"),
678
+ listKey,
679
+ ),
680
+ "arg",
681
+ ),
682
+ argKey,
683
+ ).desc = { t: argKey };
684
+ });
685
+ });
686
+ argTrans.trans.forEach((t, idx) => {
687
+ ensureNode(
688
+ ensureNode(
689
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"),
690
+ insightKey,
691
+ ),
692
+ "arg",
693
+ )[argKey] = { t };
694
+ });
695
+ argTrans.descTrans?.forEach((t, idx) => {
696
+ ensureNode(
697
+ ensureNode(
698
+ ensureNode(
699
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"),
700
+ insightKey,
701
+ ),
702
+ "arg",
703
+ ),
704
+ argKey,
705
+ ).desc = { t };
706
+ });
707
+ },
708
+ );
709
+ },
710
+ );
711
+ }
712
+ #registerEndpointToRoot(refName: string, rootDict: RootDictionary) {
713
+ this.languages.forEach((language) => {
714
+ ensureNode(getRootModelNode(rootDict, language, refName), "signal");
715
+ });
716
+ Object.entries(
717
+ this.endpointDictionary as {
718
+ [key: string]: FunctionTranslation<Languages>;
719
+ },
720
+ ).forEach(([key, value]) => {
721
+ value.trans.forEach((t, idx) => {
722
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal")[key] = { t, arg: {} };
723
+ });
724
+ value.descTrans?.forEach((t, idx) => {
725
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"), key).desc =
726
+ { t };
727
+ });
728
+ Object.entries(value.argTrans as { [key: string]: FieldTranslation<Languages> }).forEach(([argKey, argTrans]) => {
729
+ argTrans.trans.forEach((t, idx) => {
730
+ ensureNode(
731
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"), key),
732
+ "arg",
733
+ )[argKey] = { t };
734
+ });
735
+ argTrans.descTrans?.forEach((t, idx) => {
736
+ ensureNode(
737
+ ensureNode(
738
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"), key),
739
+ "arg",
740
+ ),
741
+ argKey,
742
+ ).desc = { t };
743
+ });
744
+ });
745
+ });
746
+ }
747
+ #registerErrorToRoot(refName: string, rootDict: RootDictionary) {
748
+ this.languages.forEach((language) => {
749
+ ensureNode(getRootModelNode(rootDict, language, refName), "error");
750
+ });
751
+ Object.entries(this.errorDictionary as { [key: string]: Languages }).forEach(([key, value]) => {
752
+ value.forEach((t, idx) => {
753
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "error"), key).t = t;
754
+ });
755
+ });
756
+ }
757
+ #registerEtcToRoot(refName: string, rootDict: RootDictionary) {
758
+ Object.entries(this.etcDictionary as { [key: string]: Languages }).forEach(([key, value]) => {
759
+ value.forEach((t, idx) => {
760
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), key).t = t;
761
+ });
762
+ });
763
+ }
764
+ getEnum<Enum extends { refName: string; value: EnumValueKey }>(
765
+ enumName: EnumKey,
766
+ ): { [K in Enum["value"]]: FieldTranslation<Languages> } {
767
+ return this.enumDictionary[enumName] as unknown as {
768
+ [K in Enum["value"]]: FieldTranslation<Languages>;
769
+ };
770
+ }
771
+ }
772
+
773
+ type AnyModelDictInfo = ModelDictInfo<any, any, any, any, any, any, any, any, any, any, any>;
774
+
775
+ type MergeTwoModelDicts<ModelDict1, ModelDict2> =
776
+ ModelDict1 extends ModelDictInfo<
777
+ infer Languages1,
778
+ infer ModelKey1,
779
+ infer InsightKey1,
780
+ infer QueryKey1,
781
+ infer SortKey1,
782
+ infer EnumKey1,
783
+ infer BaseSignalKey1,
784
+ infer SliceKey1,
785
+ infer EndpointKey1,
786
+ infer ErrorKey1,
787
+ infer EtcKey1
788
+ >
789
+ ? ModelDict2 extends ModelDictInfo<
790
+ any,
791
+ infer ModelKey2,
792
+ infer InsightKey2,
793
+ infer QueryKey2,
794
+ infer SortKey2,
795
+ infer EnumKey2,
796
+ infer BaseSignalKey2,
797
+ infer SliceKey2,
798
+ infer EndpointKey2,
799
+ infer ErrorKey2,
800
+ infer EtcKey2
801
+ >
802
+ ? ModelDictInfo<
803
+ Languages1,
804
+ ModelKey1 | ModelKey2,
805
+ InsightKey1 | InsightKey2,
806
+ QueryKey1 | QueryKey2,
807
+ SortKey1 | SortKey2,
808
+ EnumKey1 | EnumKey2,
809
+ BaseSignalKey1 | BaseSignalKey2,
810
+ SliceKey1 | SliceKey2,
811
+ EndpointKey1 | EndpointKey2,
812
+ ErrorKey1 | ErrorKey2,
813
+ EtcKey1 | EtcKey2
814
+ >
815
+ : ModelDict1
816
+ : never;
817
+ type MergeModelDicts<ModelDicts extends AnyModelDictInfo[]> = ModelDicts extends [
818
+ infer First extends AnyModelDictInfo,
819
+ ...infer Rest extends AnyModelDictInfo[],
820
+ ]
821
+ ? Rest extends []
822
+ ? First
823
+ : MergeTwoModelDicts<First, MergeModelDicts<Rest>>
824
+ : never;
825
+ export const modelDictionary = <
826
+ Languages extends [string, ...string[]] = [string],
827
+ ExtendModelDicts extends AnyModelDictInfo[] = [],
828
+ >(
829
+ languages: Languages = ["en"] as unknown as Languages,
830
+ ...extendModelDicts: ExtendModelDicts
831
+ ): MergeModelDicts<[ModelDictInfo<Languages>, ...ExtendModelDicts]> => {
832
+ const modelDictionary = extendModelDicts.at(0) ?? new ModelDictInfo(languages);
833
+
834
+ return modelDictionary as unknown as MergeModelDicts<[ModelDictInfo<Languages>, ...ExtendModelDicts]>;
835
+ };
836
+
837
+ export class ScalarDictInfo<
838
+ Languages extends [string, ...string[]] = [string],
839
+ ModelKey extends string = keyof BaseObject,
840
+ EnumKey extends string = never,
841
+ ErrorKey extends string = never,
842
+ EtcKey extends string = never,
843
+ > {
844
+ languages: Languages;
845
+ modelTranslation?: FieldTranslation<Languages>;
846
+ modelDictionary: { [K in ModelKey]: FieldTranslation<Languages> } = {} as {
847
+ [K in ModelKey]: FieldTranslation<Languages>;
848
+ };
849
+ enumDictionary: {
850
+ [K in EnumKey]: { [key: string]: FieldTranslation<Languages> };
851
+ } = {} as {
852
+ [K in EnumKey]: { [key: string]: FieldTranslation<Languages> };
853
+ };
854
+ errorDictionary: { [K in ErrorKey]: Languages } = {} as {
855
+ [K in ErrorKey]: Languages;
856
+ };
857
+ etcDictionary: { [K in EtcKey]: Languages } = {} as {
858
+ [K in EtcKey]: Languages;
859
+ };
860
+ constructor(languages: Languages) {
861
+ this.languages = languages;
862
+ }
863
+ of(translate: (t: (trans: Languages) => FieldTranslation<Languages>) => FieldTranslation<Languages>) {
864
+ this.modelTranslation = translate(FieldTranslation.translate);
865
+ return this;
866
+ }
867
+ model<Model>(
868
+ translate: (t: (trans: Languages) => FieldTranslation<Languages>) => {
869
+ [K in keyof GetStateObject<Model>]: FieldTranslation<Languages>;
870
+ },
871
+ ) {
872
+ Object.assign(
873
+ this.modelDictionary,
874
+ translate(FieldTranslation.translate),
875
+ ModelDictInfo.baseModelDictionary,
876
+ ) as unknown as { [K in ModelKey]: FieldTranslation<Languages> };
877
+ return this as unknown as ScalarDictInfo<
878
+ Languages,
879
+ keyof GetStateObject<Model> & string,
880
+ EnumKey,
881
+ ErrorKey,
882
+ EtcKey
883
+ >;
884
+ }
885
+
886
+ enum<Enum extends { refName: string; value: EnumValueKey }>(
887
+ enumName: Enum["refName"],
888
+ translate: (t: (trans: Languages) => FieldTranslation<Languages>) => {
889
+ [K in Enum["value"]]: FieldTranslation<Languages>;
890
+ },
891
+ ) {
892
+ Object.assign(this.enumDictionary, {
893
+ [enumName]: translate(FieldTranslation.translate),
894
+ });
895
+ return this as unknown as ScalarDictInfo<Languages, ModelKey, EnumKey | Enum["refName"], ErrorKey, EtcKey>;
896
+ }
897
+ error<ErrorDict extends { [key: string]: Languages }>(errorDictionary: ErrorDict) {
898
+ Object.assign(this.errorDictionary, errorDictionary);
899
+ return this as unknown as ScalarDictInfo<Languages, ModelKey, EnumKey, keyof ErrorDict & string, EtcKey>;
900
+ }
901
+ translate<EtcDict extends { [key: string]: Languages }>(etcDictionary: EtcDict) {
902
+ Object.assign(this.etcDictionary, etcDictionary);
903
+ return this as unknown as ScalarDictInfo<Languages, ModelKey, EnumKey, ErrorKey, keyof EtcDict & string>;
904
+ }
905
+ _registerToRoot(refName: string, rootDict: RootDictionary) {
906
+ this.languages.forEach((language) => {
907
+ getRootModelNode(rootDict, language, refName);
908
+ });
909
+ if (this.modelTranslation) {
910
+ this.modelTranslation.trans.forEach((t, idx) => {
911
+ getTranslatedRootModelNode(rootDict, this.languages, idx, refName).modelName = { t };
912
+ });
913
+ this.modelTranslation.descTrans?.forEach((t, idx) => {
914
+ getTranslatedRootModelNode(rootDict, this.languages, idx, refName).modelDesc = { t };
915
+ });
916
+ }
917
+ this.#registerEnumToRoot(rootDict);
918
+ this.#registerErrorToRoot(refName, rootDict);
919
+ this.#registerModelToRoot(refName, rootDict);
920
+ this.#registerEtcToRoot(refName, rootDict);
921
+ }
922
+ #registerModelToRoot(refName: string, rootDict: RootDictionary) {
923
+ Object.entries(this.modelDictionary as { [key: string]: FieldTranslation<Languages> }).forEach(([key, value]) => {
924
+ value.trans.forEach((t, idx) => {
925
+ getTranslatedRootModelNode(rootDict, this.languages, idx, refName)[key] = { t };
926
+ });
927
+ value.descTrans?.forEach((t, idx) => {
928
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), key).desc = { t };
929
+ });
930
+ });
931
+ }
932
+ #registerEnumToRoot(rootDict: RootDictionary) {
933
+ Object.entries(
934
+ this.enumDictionary as {
935
+ [key: string]: { [key: string]: FieldTranslation<Languages> };
936
+ },
937
+ ).forEach(([refName, enumTrans]) => {
938
+ this.languages.forEach((language) => {
939
+ getRootModelNode(rootDict, language, refName);
940
+ });
941
+ Object.entries(enumTrans as { [key: string]: FieldTranslation<Languages> }).forEach(([enumKey, enumValue]) => {
942
+ enumValue.trans.forEach((t, idx) => {
943
+ getTranslatedRootModelNode(rootDict, this.languages, idx, refName)[enumKey] = { t };
944
+ });
945
+ enumValue.descTrans?.forEach((t, idx) => {
946
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), enumKey).desc = { t };
947
+ });
948
+ });
949
+ });
950
+ }
951
+ #registerErrorToRoot(refName: string, rootDict: RootDictionary) {
952
+ this.languages.forEach((language) => {
953
+ ensureNode(getRootModelNode(rootDict, language, refName), "error");
954
+ });
955
+ Object.entries(this.errorDictionary as { [key: string]: Languages }).forEach(([key, value]) => {
956
+ value.forEach((t, idx) => {
957
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "error"), key).t = t;
958
+ });
959
+ });
960
+ }
961
+ #registerEtcToRoot(refName: string, rootDict: RootDictionary) {
962
+ Object.entries(this.etcDictionary as { [key: string]: Languages }).forEach(([key, value]) => {
963
+ value.forEach((t, idx) => {
964
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), key).t = t;
965
+ });
966
+ });
967
+ }
968
+ }
969
+
970
+ export const scalarDictionary = <Languages extends [string, ...string[]] = [string]>(
971
+ languages: Languages = ["en"] as unknown as Languages,
972
+ ) => new ScalarDictInfo(languages);
973
+
974
+ export class ServiceDictInfo<
975
+ Languages extends [string, ...string[]] = [string],
976
+ EndpointKey extends string = never,
977
+ ErrorKey extends string = never,
978
+ EtcKey extends string = never,
979
+ > {
980
+ languages: Languages;
981
+ endpointDictionary: { [K in EndpointKey]: FunctionTranslation<Languages> } = {} as {
982
+ [K in EndpointKey]: FunctionTranslation<Languages>;
983
+ };
984
+ errorDictionary: { [K in ErrorKey]: Languages } = {} as {
985
+ [K in ErrorKey]: Languages;
986
+ };
987
+ etcDictionary: { [K in EtcKey]: Languages } = {} as {
988
+ [K in EtcKey]: Languages;
989
+ };
990
+ constructor(languages: Languages) {
991
+ this.languages = languages;
992
+ }
993
+ endpoint<Endpoint extends { [key: string]: EndpointInfo }>(
994
+ translate: (fn: (trans: Languages) => FunctionTranslation<Languages>) => {
995
+ [K in keyof Endpoint]: FunctionTranslation<Languages, Endpoint[K]["argNames"][number]>;
996
+ },
997
+ ) {
998
+ Object.assign(this.endpointDictionary, translate(fn)) as unknown as {
999
+ [K in EndpointKey]: FunctionTranslation<Languages>;
1000
+ };
1001
+ return this as unknown as ServiceDictInfo<Languages, keyof Endpoint & string, ErrorKey, EtcKey>;
1002
+ }
1003
+ error<ErrorDict extends { [key: string]: Languages }>(errorDictionary: ErrorDict) {
1004
+ Object.assign(this.errorDictionary, errorDictionary);
1005
+ return this as unknown as ServiceDictInfo<Languages, EndpointKey, keyof ErrorDict & string, EtcKey>;
1006
+ }
1007
+ translate<EtcDict extends { [key: string]: Languages }>(etcDictionary: EtcDict) {
1008
+ Object.assign(this.etcDictionary, etcDictionary);
1009
+ return this as unknown as ServiceDictInfo<Languages, EndpointKey, ErrorKey, keyof EtcDict & string>;
1010
+ }
1011
+
1012
+ _toTranslation(): { [key: string]: string[] } {
1013
+ return Object.assign({}, this.errorDictionary, this.etcDictionary);
1014
+ }
1015
+ _registerToRoot(refName: string, rootDict: RootDictionary) {
1016
+ this.languages.forEach((language) => {
1017
+ getRootModelNode(rootDict, language, refName);
1018
+ });
1019
+ this.#registerEndpointToRoot(refName, rootDict);
1020
+ this.#registerErrorToRoot(refName, rootDict);
1021
+ this.#registerEtcToRoot(refName, rootDict);
1022
+ }
1023
+
1024
+ #registerEndpointToRoot(refName: string, rootDict: RootDictionary) {
1025
+ this.languages.forEach((language) => {
1026
+ ensureNode(getRootModelNode(rootDict, language, refName), "signal");
1027
+ });
1028
+ Object.entries(
1029
+ this.endpointDictionary as {
1030
+ [key: string]: FunctionTranslation<Languages>;
1031
+ },
1032
+ ).forEach(([key, value]) => {
1033
+ value.trans.forEach((t, idx) => {
1034
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal")[key] = { t, arg: {} };
1035
+ });
1036
+ value.descTrans?.forEach((t, idx) => {
1037
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"), key).desc =
1038
+ { t };
1039
+ });
1040
+ Object.entries(value.argTrans as { [key: string]: FieldTranslation<Languages> }).forEach(([argKey, argTrans]) => {
1041
+ argTrans.trans.forEach((t, idx) => {
1042
+ ensureNode(
1043
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"), key),
1044
+ "arg",
1045
+ )[argKey] = { t };
1046
+ });
1047
+ argTrans.descTrans?.forEach((t, idx) => {
1048
+ ensureNode(
1049
+ ensureNode(
1050
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "signal"), key),
1051
+ "arg",
1052
+ ),
1053
+ argKey,
1054
+ ).desc = { t };
1055
+ });
1056
+ });
1057
+ });
1058
+ }
1059
+ #registerErrorToRoot(refName: string, rootDict: RootDictionary) {
1060
+ this.languages.forEach((language) => {
1061
+ ensureNode(getRootModelNode(rootDict, language, refName), "error");
1062
+ });
1063
+ Object.entries(this.errorDictionary as { [key: string]: Languages }).forEach(([key, value]) => {
1064
+ value.forEach((t, idx) => {
1065
+ ensureNode(ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), "error"), key).t = t;
1066
+ });
1067
+ });
1068
+ }
1069
+ #registerEtcToRoot(refName: string, rootDict: RootDictionary) {
1070
+ Object.entries(this.etcDictionary as { [key: string]: Languages }).forEach(([key, value]) => {
1071
+ value.forEach((t, idx) => {
1072
+ ensureNode(getTranslatedRootModelNode(rootDict, this.languages, idx, refName), key).t = t;
1073
+ });
1074
+ });
1075
+ }
1076
+ }
1077
+ export const serviceDictionary = <Languages extends [string, ...string[]] = [string]>(
1078
+ languages: Languages = ["en"] as unknown as Languages,
1079
+ ) => new ServiceDictInfo(languages);