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,415 @@
1
+ import {
2
+ type Any,
3
+ arraiedModel,
4
+ type Cls,
5
+ type Dayjs,
6
+ type EnumInstance,
7
+ type Float,
8
+ getNonArrayModel,
9
+ ID,
10
+ Int,
11
+ isEnum,
12
+ PRIMITIVE_CLIENT_VALUE,
13
+ PRIMITIVE_SERVER_VALUE,
14
+ PrimitiveRegistry,
15
+ type PrimitiveScalar,
16
+ type SingleValue,
17
+ type UnCls,
18
+ } from "akanjs/base";
19
+ import { ConstantRegistry } from "./constantRegistry";
20
+ import type { ConstantCls } from "./via";
21
+
22
+ export type ParamFieldType =
23
+ | (typeof PrimitiveScalar & {
24
+ [PRIMITIVE_CLIENT_VALUE]: string | number | boolean | Dayjs;
25
+ })
26
+ | EnumInstance<string, any>;
27
+
28
+ export type ConstantFieldType = typeof PrimitiveScalar | Cls | MapConstructor | EnumInstance<string, number>;
29
+ export type ConstantFieldTypeInput =
30
+ | ConstantFieldType
31
+ | ConstantFieldType[]
32
+ | ConstantFieldType[][]
33
+ | ConstantFieldType[][][];
34
+
35
+ export type FieldToValue<Field, MapValue = any> = Field extends null
36
+ ? FieldToValue<Exclude<Field, null>> | null
37
+ : Field extends MapConstructor
38
+ ? Map<string, FieldToValue<MapValue>>
39
+ : Field extends (infer F)[]
40
+ ? FieldToValue<F>[]
41
+ : Field extends { [PRIMITIVE_SERVER_VALUE]: infer V }
42
+ ? V
43
+ : Field extends EnumInstance<string, infer V>
44
+ ? V
45
+ : Field extends Cls
46
+ ? UnCls<Field>
47
+ : never;
48
+ export interface FieldInfoObject {
49
+ [key: string]: FieldInfo<any, ConstantFieldTypeInput | null, any>;
50
+ }
51
+ export type ExtractFieldInfoObject<Obj extends FieldInfoObject> = {
52
+ [K in keyof Obj]: Obj[K] extends FieldInfo<any, infer FieldValue, infer ExplicitType, infer MapValue>
53
+ ? unknown extends ExplicitType
54
+ ? FieldToValue<FieldValue, MapValue>
55
+ : ExplicitType
56
+ : never;
57
+ };
58
+
59
+ export interface ConstantFieldProps<
60
+ FieldType extends "property" | "hidden" | "resolve" = "property" | "hidden" | "resolve",
61
+ FieldValue = any,
62
+ MapValue = any,
63
+ Metadata = { [key: string]: any },
64
+ > {
65
+ nullable?: boolean;
66
+ ref?: string;
67
+ refPath?: string;
68
+ refType?: "child" | "parent" | "relation";
69
+ default?: FieldValue | ((doc: { id: string }) => FieldValue);
70
+ type?: FieldPreset;
71
+ fieldType?: FieldType;
72
+ immutable?: boolean;
73
+ min?: number;
74
+ max?: number;
75
+ enum?: EnumInstance;
76
+ select?: boolean;
77
+ minlength?: number;
78
+ maxlength?: number;
79
+ accumulate?: any;
80
+ example?: FieldValue;
81
+ of?: MapValue;
82
+ validate?: (value: FieldValue, model: any) => boolean;
83
+ text?: "search" | "filter";
84
+ meta?: Metadata;
85
+ }
86
+ export const fieldPresets = ["email", "password", "url"] as const;
87
+ export type FieldPreset = (typeof fieldPresets)[number];
88
+
89
+ class FieldInfo<
90
+ FieldType extends "property" | "hidden" | "resolve" = any,
91
+ Value extends ConstantFieldTypeInput | null = null,
92
+ ExplicitType = unknown,
93
+ MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never,
94
+ > {
95
+ readonly value: Value;
96
+ readonly type: ConstantFieldTypeInput;
97
+ readonly option: ConstantFieldProps;
98
+ declare explicitType: ExplicitType;
99
+ constructor(value: Value, option: ConstantFieldProps<FieldType, any, MapValue>) {
100
+ this.value = value;
101
+ const [singleValue, arrDepth] = getNonArrayModel(value as Cls);
102
+ const isEnumValue = isEnum(singleValue);
103
+ const valueType = isEnumValue ? arraiedModel((singleValue as EnumInstance).type, arrDepth) : value;
104
+ this.type = valueType as ConstantFieldTypeInput;
105
+ this.option = {
106
+ ...option,
107
+ ...(isEnumValue ? { enum: singleValue } : {}),
108
+ } as any;
109
+ }
110
+ optional() {
111
+ this.option.nullable = true;
112
+ return this as FieldInfo<FieldType, Value | null, ExplicitType | null, MapValue>;
113
+ }
114
+ meta(meta: ConstantFieldProps["meta"]) {
115
+ this.option.meta = meta;
116
+ return this;
117
+ }
118
+ toField() {
119
+ return ConstantField.fromFieldInfo(this);
120
+ }
121
+ }
122
+
123
+ interface ConstantFieldBuildProps<
124
+ FieldType extends "property" | "hidden" | "resolve" = any,
125
+ FieldValue = any,
126
+ MapValue = any,
127
+ Metadata = any,
128
+ Nullable extends boolean = boolean,
129
+ > {
130
+ nullable: Nullable;
131
+ ref?: string;
132
+ refPath?: string;
133
+ refType?: "child" | "parent" | "relation";
134
+ default: FieldValue | ((doc: { id: string }) => FieldValue);
135
+ type?: FieldPreset;
136
+ fieldType: FieldType;
137
+ immutable: boolean;
138
+ min?: number;
139
+ max?: number;
140
+ enum?: EnumInstance;
141
+ select: boolean;
142
+ minlength?: number;
143
+ maxlength?: number;
144
+ accumulate?: any;
145
+ example?: FieldValue;
146
+ of?: MapValue;
147
+ validate?: (value: FieldValue, model: any) => boolean;
148
+ text?: "search" | "filter";
149
+ modelRef: ConstantCls;
150
+ arrDepth: number;
151
+ optArrDepth: number;
152
+ meta: Metadata;
153
+ }
154
+
155
+ export interface FieldProps extends ConstantFieldBuildProps {
156
+ isClass: boolean;
157
+ isScalar: boolean;
158
+ isArray: boolean;
159
+ isMap: boolean;
160
+ }
161
+
162
+ export type FieldInfoObjectToFieldObject<Obj extends FieldInfoObject> = {
163
+ [K in keyof Obj]: Obj[K] extends FieldInfo<infer FieldType, infer Value, infer ExplicitType, infer MapValue>
164
+ ? ConstantField<
165
+ FieldType,
166
+ Value,
167
+ unknown extends ExplicitType ? FieldToValue<Value, MapValue> : ExplicitType,
168
+ MapValue
169
+ >
170
+ : never;
171
+ };
172
+
173
+ /** Runtime metadata for a single Akan constant field. */
174
+ export class ConstantField<
175
+ FieldType extends "property" | "hidden" | "resolve" = "property" | "hidden" | "resolve",
176
+ Value extends ConstantFieldTypeInput | null = any,
177
+ FieldValue = any,
178
+ MapValue = any,
179
+ Nullable extends boolean = false,
180
+ Metadata = { [key: string]: any },
181
+ > implements ConstantFieldBuildProps<FieldType, FieldValue, MapValue, Metadata>
182
+ {
183
+ static getBaseModelField(): FieldObject {
184
+ return {
185
+ id: field(ID).toField(),
186
+ createdAt: field(Date).toField(),
187
+ updatedAt: field(Date).toField(),
188
+ removedAt: field(Date).optional().toField(),
189
+ };
190
+ }
191
+ static getBaseInsightField(): FieldObject {
192
+ return {
193
+ count: field(Int, { default: 0, accumulate: { $sum: 1 } }).toField(),
194
+ };
195
+ }
196
+ readonly nullable: Nullable;
197
+ readonly ref?: string;
198
+ readonly refPath?: string;
199
+ readonly refType?: "child" | "parent" | "relation";
200
+ readonly default: FieldValue | ((doc: { id: string }) => FieldValue);
201
+ readonly type?: FieldPreset;
202
+ readonly fieldType: FieldType;
203
+ readonly immutable: boolean;
204
+ readonly min?: number;
205
+ readonly max?: number;
206
+ readonly enum?: EnumInstance;
207
+ readonly select: boolean;
208
+ readonly minlength?: number;
209
+ readonly maxlength?: number;
210
+ readonly accumulate?: any;
211
+ readonly example?: FieldValue;
212
+ readonly of?: MapValue;
213
+ readonly validate?: (value: FieldValue, model: any) => boolean;
214
+ readonly text?: "search" | "filter";
215
+ readonly modelRef: ConstantCls;
216
+ readonly arrDepth: number;
217
+ readonly optArrDepth: number;
218
+ readonly meta: Metadata;
219
+
220
+ constructor(props: ConstantFieldBuildProps<FieldType, FieldValue, MapValue, Metadata>) {
221
+ this.nullable = props.nullable as unknown as Nullable;
222
+ this.ref = props.ref;
223
+ this.refPath = props.refPath;
224
+ this.refType = props.refType;
225
+ this.default = props.default;
226
+ this.type = props.type;
227
+ this.fieldType = props.fieldType;
228
+ this.immutable = props.immutable;
229
+ this.min = props.min;
230
+ this.max = props.max;
231
+ this.enum = props.enum;
232
+ this.select = props.select;
233
+ this.minlength = props.minlength;
234
+ this.maxlength = props.maxlength;
235
+ this.accumulate = props.accumulate;
236
+ this.example = props.example;
237
+ this.of = props.of;
238
+ this.validate = props.validate;
239
+ this.text = props.text;
240
+ this.modelRef = props.modelRef;
241
+ this.arrDepth = props.arrDepth;
242
+ this.optArrDepth = props.optArrDepth;
243
+ this.meta = props.meta;
244
+ }
245
+
246
+ static fromFieldInfo<
247
+ FieldType extends "property" | "hidden" | "resolve" = any,
248
+ Value extends ConstantFieldTypeInput | null = null,
249
+ FieldValue = any,
250
+ MapValue = any,
251
+ Nullable extends boolean = false,
252
+ Metadata = { [key: string]: any },
253
+ >(
254
+ fieldInfo: FieldInfo<FieldType, Value, FieldValue, MapValue>,
255
+ ): ConstantField<FieldType, Value, FieldValue, MapValue, Nullable, Metadata> {
256
+ const [modelRef, arrDepth] = getNonArrayModel(fieldInfo.type as Cls);
257
+ const [option, optArrDepth] = getNonArrayModel(fieldInfo.option);
258
+
259
+ const isArray = arrDepth > 0;
260
+ const isMap = modelRef === Map;
261
+ if (isMap && !option.of) throw new Error("Map type must have 'of' option");
262
+
263
+ return new ConstantField({
264
+ nullable: option.nullable ?? ((option.default === "" ? true : false) as unknown as Nullable),
265
+ ref: option.ref,
266
+ refPath: option.refPath,
267
+ refType: option.refType,
268
+ default: option.default ?? (isArray ? [] : null),
269
+ type: option.type,
270
+ fieldType: option.fieldType ?? "property",
271
+ immutable: option.immutable ?? false,
272
+ min: option.min,
273
+ max: option.max,
274
+ enum: option.enum,
275
+ select: option.select ?? true,
276
+ minlength: option.minlength,
277
+ maxlength: option.maxlength,
278
+ accumulate: option.accumulate,
279
+ example: option.example,
280
+ of: option.of,
281
+ validate: option.validate,
282
+ text: option.text,
283
+ modelRef,
284
+ arrDepth: arrDepth,
285
+ optArrDepth: optArrDepth,
286
+ meta: (option.meta ?? {}) as Metadata,
287
+ } as ConstantFieldBuildProps<FieldType, FieldValue, MapValue, Metadata, Nullable>);
288
+ }
289
+ get isClass() {
290
+ return !PrimitiveRegistry.has(this.modelRef) && !this.isMap;
291
+ }
292
+ get isScalar() {
293
+ return ConstantRegistry.isScalar(this.modelRef) || PrimitiveRegistry.has(this.modelRef);
294
+ }
295
+ get isArray() {
296
+ return this.arrDepth > 0;
297
+ }
298
+ get isMap() {
299
+ return this.modelRef === Map;
300
+ }
301
+ getProps(): FieldProps {
302
+ return {
303
+ nullable: this.nullable as unknown as boolean,
304
+ ref: this.ref,
305
+ refPath: this.refPath,
306
+ refType: this.refType,
307
+ default: this.default,
308
+ type: this.type,
309
+ fieldType: this.fieldType,
310
+ immutable: this.immutable,
311
+ min: this.min,
312
+ max: this.max,
313
+ enum: this.enum,
314
+ select: this.select,
315
+ minlength: this.minlength,
316
+ maxlength: this.maxlength,
317
+ accumulate: this.accumulate,
318
+ example: this.example,
319
+ of: this.of,
320
+ validate: this.validate,
321
+ text: this.text,
322
+ modelRef: this.modelRef,
323
+ arrDepth: this.arrDepth,
324
+ optArrDepth: this.optArrDepth,
325
+ meta: this.meta,
326
+ isClass: this.isClass,
327
+ isScalar: this.isScalar,
328
+ isArray: this.isArray,
329
+ isMap: this.isMap,
330
+ };
331
+ }
332
+ }
333
+ export interface FieldObject {
334
+ [key: string]: ConstantField;
335
+ }
336
+
337
+ type FieldOption<
338
+ Value extends ConstantFieldTypeInput,
339
+ MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never,
340
+ Metadata extends { [key: string]: any } = { [key: string]: any },
341
+ _FieldToValue = FieldToValue<Value, MapValue> | null | undefined,
342
+ > =
343
+ | Omit<
344
+ ConstantFieldProps<"property" | "hidden" | "resolve", _FieldToValue, MapValue, Metadata>,
345
+ "enum" | "meta" | "nullable" | "fieldType" | "select"
346
+ >
347
+ | Omit<
348
+ ConstantFieldProps<"property" | "hidden" | "resolve", SingleValue<_FieldToValue>, MapValue, Metadata>,
349
+ "enum" | "meta" | "nullable" | "fieldType" | "select"
350
+ >[];
351
+
352
+ export type PlainTypeToFieldType<PlainType> = PlainType extends [infer First, ...infer Rest]
353
+ ? PlainTypeToFieldType<First>[]
354
+ : PlainType extends number
355
+ ? typeof Int | typeof Float
356
+ : PlainType extends string
357
+ ? StringConstructor
358
+ : typeof Any;
359
+
360
+ /** Builds a stored property field with optional validation, default, ref, text, and metadata options. */
361
+ export const field = <
362
+ ExplicitType,
363
+ Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>,
364
+ MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never,
365
+ >(
366
+ value: Value,
367
+ option: FieldOption<Value, MapValue> = {},
368
+ ) =>
369
+ new FieldInfo<"property", Value, ExplicitType, MapValue>(value, {
370
+ ...option,
371
+ fieldType: "property",
372
+ });
373
+
374
+ field.hidden = <
375
+ ExplicitType,
376
+ Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>,
377
+ MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never,
378
+ >(
379
+ value: Value,
380
+ option: FieldOption<Value, MapValue> = {},
381
+ ) =>
382
+ new FieldInfo<"hidden", Value | null, ExplicitType | null, MapValue>(value, {
383
+ ...option,
384
+ fieldType: "hidden",
385
+ nullable: true,
386
+ });
387
+ field.secret = <
388
+ ExplicitType,
389
+ Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>,
390
+ MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never,
391
+ >(
392
+ value: Value,
393
+ option: FieldOption<Value, MapValue> = {},
394
+ ) =>
395
+ new FieldInfo<"hidden", Value | null, ExplicitType | null, MapValue>(value, {
396
+ ...option,
397
+ fieldType: "hidden",
398
+ select: false,
399
+ nullable: true,
400
+ });
401
+ /** Builds a resolved field that is derived rather than treated as a stored property. */
402
+ export const resolve = <
403
+ ExplicitType,
404
+ Value extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>,
405
+ MapValue = Value extends MapConstructor ? typeof PrimitiveScalar : never,
406
+ >(
407
+ value: Value,
408
+ option: FieldOption<Value, MapValue> = {},
409
+ ) =>
410
+ new FieldInfo<"resolve", Value, ExplicitType, MapValue>(value, {
411
+ ...option,
412
+ fieldType: "resolve",
413
+ });
414
+ export type FieldBuilder = typeof field;
415
+ export type FieldResolver = typeof resolve;
@@ -0,0 +1,18 @@
1
+ import { FIELD_META, PRIMITIVE_DEFAULT_VALUE, type PrimitiveScalar } from "akanjs/base";
2
+ import type { FieldObject } from ".";
3
+ import type { DefaultOf } from "./types";
4
+
5
+ export const getDefault = <T>(fieldObj: FieldObject): DefaultOf<T> => {
6
+ const result: Record<string, unknown> = {};
7
+ for (const [key, field] of Object.entries(fieldObj)) {
8
+ if (field.fieldType === "hidden") result[key] = null;
9
+ else if (field.default) {
10
+ if (typeof field.default === "function") result[key] = (field.default as () => object)();
11
+ else result[key] = field.default as object;
12
+ } else if (field.isArray) result[key] = [];
13
+ else if (field.nullable) result[key] = null;
14
+ else if (field.isClass) result[key] = field.isScalar ? getDefault(field.modelRef[FIELD_META]) : null;
15
+ else result[key] = (field.modelRef as unknown as typeof PrimitiveScalar)[PRIMITIVE_DEFAULT_VALUE];
16
+ }
17
+ return result as DefaultOf<T>;
18
+ };
@@ -0,0 +1,16 @@
1
+ import { FIELD_META } from "akanjs/base";
2
+ import { immerable } from "immer";
3
+ import type { ConstantCls } from ".";
4
+
5
+ export const immerify = <T extends object>(modelRef: ConstantCls, objOrArr: T): T => {
6
+ if (Array.isArray(objOrArr)) return objOrArr.map((val) => immerify(modelRef, val as object)) as T;
7
+ const immeredObj = Object.assign({}, objOrArr, {
8
+ [immerable]: true,
9
+ }) as Record<string, unknown>;
10
+ const objRecord = objOrArr as Record<string, unknown>;
11
+ Object.entries(modelRef[FIELD_META]).forEach(([key, field]) => {
12
+ if (field.isScalar && field.isClass && !!objRecord[key])
13
+ immeredObj[key] = immerify(field.modelRef, objRecord[key] as object);
14
+ });
15
+ return immeredObj as T;
16
+ };
@@ -0,0 +1,10 @@
1
+ export * from "./constantRegistry";
2
+ export * from "./crystalize";
3
+ export * from "./deserialize";
4
+ export * from "./fieldInfo";
5
+ export * from "./getDefault";
6
+ export * from "./immerify";
7
+ export * from "./purify";
8
+ export * from "./serialize";
9
+ export * from "./types";
10
+ export * from "./via";
@@ -0,0 +1,118 @@
1
+ import {
2
+ applyFnToArrayObjects,
3
+ type Cls,
4
+ type Dayjs,
5
+ dayjs,
6
+ FIELD_META,
7
+ type GetStateObject,
8
+ getNonArrayModel,
9
+ ID,
10
+ PrimitiveRegistry,
11
+ type PrimitiveScalar,
12
+ type Upload,
13
+ } from "akanjs/base";
14
+ import { Logger } from "akanjs/common";
15
+
16
+ import { type BaseObject, type ConstantCls, ConstantRegistry, type DefaultOf, type FieldProps } from ".";
17
+
18
+ type Purified<O> = O extends BaseObject
19
+ ? string
20
+ : O extends BaseObject[]
21
+ ? string[]
22
+ : O extends Dayjs
23
+ ? Dayjs
24
+ : O extends object
25
+ ? PurifiedModel<O>
26
+ : O;
27
+ type PurifiedWithObjectToId<T, StateKeys extends keyof GetStateObject<T> = keyof GetStateObject<T>> = {
28
+ [K in StateKeys as null extends T[K] ? never : K]: Purified<T[K]>;
29
+ } & {
30
+ [K in StateKeys as null extends T[K] ? K : never]?: Purified<T[K]> | undefined;
31
+ };
32
+ export type PurifiedModel<T> = T extends Upload[]
33
+ ? FileList
34
+ : T extends (infer S)[]
35
+ ? PurifiedModel<S>[]
36
+ : T extends string | number | boolean | Dayjs
37
+ ? T
38
+ : T extends Map<infer K, infer V>
39
+ ? Map<K, PurifiedModel<V>>
40
+ : PurifiedWithObjectToId<T>;
41
+
42
+ export type PurifyFunc<Input, _DefaultInput = DefaultOf<Input>, _PurifiedInput = PurifiedModel<Input>> = (
43
+ self: _DefaultInput,
44
+ isChild?: boolean,
45
+ ) => _PurifiedInput | null;
46
+
47
+ const getPurifyFn = (modelRef: Cls): ((value: unknown) => unknown) => {
48
+ const [valueRef] = getNonArrayModel(modelRef);
49
+ const purifyFn = PrimitiveRegistry.has(valueRef)
50
+ ? (value: unknown) => (valueRef as unknown as typeof PrimitiveScalar)._serialize(value as never)
51
+ : (value: unknown) => value as object;
52
+ return purifyFn;
53
+ };
54
+
55
+ const purify = (field: FieldProps, key: string, value: unknown, self: Record<string, unknown>): unknown => {
56
+
57
+ if (
58
+ field.nullable &&
59
+ (value === null ||
60
+ value === undefined ||
61
+ (typeof value === "number" && Number.isNaN(value)) ||
62
+ (typeof value === "string" && !value.length))
63
+ )
64
+ return null;
65
+ if (field.isArray) {
66
+ if (!Array.isArray(value)) throw new Error(`Invalid Array Value in ${key} for value ${value}`);
67
+ if (field.minlength && value.length < field.minlength)
68
+ throw new Error(`Invalid Array Length (Min) in ${key} for value ${value}`);
69
+ else if (field.maxlength && value.length > field.maxlength)
70
+ throw new Error(`Invalid Array Length (Max) in ${key} for value ${value}`);
71
+ else if (field.optArrDepth === 0 && field.validate && !field.validate(value, self))
72
+ throw new Error(`Invalid Array Value (Failed to pass validation) in ${key} for value ${value}`);
73
+ return value.map((v) => purify({ ...field, isArray: field.arrDepth > 1, arrDepth: field.arrDepth - 1 }, key, v, v));
74
+ }
75
+ if (field.isMap && field.of) {
76
+ const purifyFn = PrimitiveRegistry.has(field.of as Cls)
77
+ ? getPurifyFn(field.of as Cls)
78
+ : (value: unknown) => makePurify(field.of as ConstantCls)(value as object);
79
+ return Object.fromEntries(
80
+ [...(value as Map<string, unknown>).entries()].map(([key, val]) => [key, applyFnToArrayObjects(val, purifyFn)]),
81
+ );
82
+ }
83
+ if (field.isClass) return makePurify(field.modelRef)(value as object, true) as object;
84
+ if (field.modelRef === Date && dayjs(value as Date).isBefore(dayjs(new Date("0000"))))
85
+ throw new Error(`Invalid Date Value (Default) in ${key} for value ${value}`);
86
+ if ([String, ID].includes(field.modelRef as unknown as StringConstructor | typeof ID) && (value === "" || !value))
87
+ throw new Error(`Invalid String Value (Default) in ${key} for value ${value}`);
88
+ if (field.validate && !field.validate(value, self))
89
+ throw new Error(`Invalid Value (Failed to pass validation) / ${value} in ${key}`);
90
+ if (!field.nullable && !value && value !== 0 && value !== false)
91
+ throw new Error(`Invalid Value (Nullable) in ${key} for value ${value}`);
92
+
93
+ const purifyFn = getPurifyFn(field.modelRef);
94
+ return purifyFn(value);
95
+ };
96
+
97
+ export const makePurify = <I>(modelRef: ConstantCls<I>): PurifyFunc<I> => {
98
+ const fn = ((self: Record<string, unknown>, isChild?: boolean): unknown => {
99
+ try {
100
+ if (isChild && !ConstantRegistry.isScalar(modelRef)) {
101
+ const id = self.id as string;
102
+ if (!id) throw new Error(`Invalid Value (No ID) for id ${modelRef}`);
103
+ return id;
104
+ }
105
+ const result: Record<string, unknown> = {};
106
+ Object.entries(modelRef[FIELD_META]).forEach(([key, field]) => {
107
+ const value = self[key] as object;
108
+ result[key] = purify(field.getProps(), key, value, self) as object;
109
+ });
110
+ return result;
111
+ } catch (err) {
112
+ if (isChild) throw new Error(err as string);
113
+ Logger.debug(err as string);
114
+ return null;
115
+ }
116
+ }) as PurifyFunc<I>;
117
+ return fn;
118
+ };
@@ -0,0 +1,87 @@
1
+ import {
2
+ applyFnToArrayObjects,
3
+ type Cls,
4
+ type Dayjs,
5
+ FIELD_META,
6
+ getNonArrayModel,
7
+ ID,
8
+ PrimitiveRegistry,
9
+ type PrimitiveScalar,
10
+ } from "akanjs/base";
11
+
12
+ import type { ConstantCls } from ".";
13
+
14
+ export type Serialized<O> = O extends (infer V)[]
15
+ ? Serialized<V>[]
16
+ : O extends Dayjs
17
+ ? Date
18
+ : O extends Map<infer K, infer V>
19
+ ? { [key in K & string]: Serialized<V> }
20
+ : O extends object
21
+ ? { [K in keyof O]: Serialized<O[K]> }
22
+ : O;
23
+
24
+ const getSerializeFn = (inputRef: Cls, { optional = false }: { optional?: boolean } = {}) => {
25
+ const serializeFn = PrimitiveRegistry.has(inputRef)
26
+ ? (value: unknown) => (inputRef as typeof PrimitiveScalar)._serialize(value as never, { optional })
27
+ : (value: unknown) => value as object;
28
+ return serializeFn;
29
+ };
30
+ const serializeInput = <Input = unknown>(
31
+ value: Input | Input[],
32
+ inputRef: ConstantCls<Input> | PrimitiveScalar,
33
+ arrDepth: number,
34
+ serializeType: "input" | "object" = "object",
35
+ { optional = false }: { optional?: boolean } = {},
36
+ ): Input | Input[] => {
37
+ if (arrDepth && Array.isArray(value))
38
+ return value.map((v) => serializeInput(v, inputRef, arrDepth - 1) as Input) as unknown as Input[];
39
+ else if ((inputRef as MapConstructor).prototype === Map.prototype) {
40
+ const [valueRef] = getNonArrayModel(inputRef as Cls);
41
+ const serializeFn = getSerializeFn(valueRef, { optional });
42
+ return Object.fromEntries(
43
+ [...(value as Map<string, unknown>).entries()].map(([key, val]) => [
44
+ key,
45
+ applyFnToArrayObjects(val, serializeFn),
46
+ ]),
47
+ ) as unknown as Input;
48
+ } else if (PrimitiveRegistry.has(inputRef as Cls)) {
49
+ const serializeFn = getSerializeFn(inputRef as Cls, { optional });
50
+ return serializeFn(value) as Input;
51
+ } else {
52
+ const modelRef = inputRef as ConstantCls;
53
+ return Object.fromEntries(
54
+ Object.entries(modelRef[FIELD_META]).map(([key, field]) => [
55
+ key,
56
+ field.isClass && !field.isScalar
57
+ ? serialize(ID, field.arrDepth, getRelationId((value as Record<string, unknown>)?.[key]), serializeType, {
58
+ nullable: field.nullable,
59
+ key,
60
+ })
61
+ : serialize(field.modelRef, field.arrDepth, (value as Record<string, unknown>)?.[key], serializeType, {
62
+ nullable: field.nullable,
63
+ key,
64
+ }),
65
+ ]),
66
+ ) as unknown as Input;
67
+ }
68
+ };
69
+
70
+ const getRelationId = (value: unknown): unknown => {
71
+ if (Array.isArray(value)) return value.map((item) => getRelationId(item));
72
+ if (value && typeof value === "object" && "id" in value) return (value as { id: unknown }).id;
73
+ return value;
74
+ };
75
+
76
+ export const serialize = (
77
+ argRef: ConstantCls | PrimitiveScalar,
78
+ arrDepth: number,
79
+ value: unknown,
80
+ serializeType: "input" | "object" = "object",
81
+ { nullable = false, key }: { nullable?: boolean; key?: string },
82
+ ) => {
83
+ if (nullable && (value === null || value === undefined)) return null;
84
+ else if (!nullable && (value === null || value === undefined))
85
+ throw new Error(`Invalid Value (Nullable) in ${argRef} for value ${value}${key ? ` in ${key}` : ""}`);
86
+ return serializeInput(value, argRef, arrDepth, serializeType, { optional: nullable }) as object[];
87
+ };