akanjs 0.0.1 → 2.0.0-beta.1

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 +11399 -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 +59 -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 +1325 -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,106 @@
1
+ {
2
+ "title": "Scalar Constant",
3
+ "description": "how to generate a scalar.constant.ts file",
4
+ "scans": [
5
+ {
6
+ "type": "source",
7
+ "description": "core constant library source code for scalar definitions",
8
+ "path": "pkgs/akanjs/constant/classMeta.ts"
9
+ },
10
+ {
11
+ "type": "source",
12
+ "description": "field metadata implementation",
13
+ "path": "pkgs/akanjs/constant/fieldMeta.ts"
14
+ },
15
+ {
16
+ "type": "source",
17
+ "description": "via() function and scalar implementation",
18
+ "path": "pkgs/akanjs/constant/baseGql.ts"
19
+ },
20
+ {
21
+ "type": "source",
22
+ "description": "base scalar types and enumOf implementation",
23
+ "path": "pkgs/akanjs/base/base.ts"
24
+ },
25
+ {
26
+ "type": "source",
27
+ "description": "GqlScalar type definition",
28
+ "path": "pkgs/akanjs/base/scalar.ts"
29
+ },
30
+ {
31
+ "type": "source",
32
+ "description": "constant metadata usage in graphql schema generation",
33
+ "path": "pkgs/akanjs/server/gql.ts"
34
+ },
35
+ {
36
+ "type": "source",
37
+ "description": "constant metadata usage in mongoDB schema generation",
38
+ "path": "pkgs/akanjs/server/schema.ts"
39
+ },
40
+ {
41
+ "type": "example",
42
+ "description": "simple scalar.constant.ts file examples",
43
+ "path": "{apps,libs}/*/lib/__scalar/*/*.constant.ts",
44
+ "query": "lines < 30",
45
+ "sample": 5
46
+ },
47
+ {
48
+ "type": "example",
49
+ "description": "complex scalar.constant.ts file examples with enum definitions",
50
+ "path": "{apps,libs}/*/lib/__scalar/*/*.constant.ts",
51
+ "query": "lines > 30 && /enumOf/",
52
+ "sample": 3
53
+ },
54
+ {
55
+ "type": "example",
56
+ "description": "scalar.constant.ts file examples with static methods",
57
+ "path": "{apps,libs}/*/lib/__scalar/*/*.constant.ts",
58
+ "query": "/static\\s+\\w+/",
59
+ "sample": 3
60
+ },
61
+ {
62
+ "type": "example",
63
+ "description": "scalar.constant.ts file examples with nested scalar references",
64
+ "path": "{apps,libs}/*/lib/__scalar/*/*.constant.ts",
65
+ "query": "/import.*\\.constant/",
66
+ "sample": 3
67
+ }
68
+ ],
69
+ "update": {
70
+ "filePath": "./scalarConstant.instruction.md",
71
+ "contents": [
72
+ "Purpose of scalar constants in Akan.js",
73
+ "File structure and location conventions",
74
+ "Naming standards for directories, files, classes and enums",
75
+ "Required imports from akanjs/constant and akanjs/base",
76
+ "Basic syntax with via() function",
77
+ "Field definitions with field() helper function",
78
+ "Field options reference table (default, min, max, minlength, maxlength, validate, example)",
79
+ "Available field types (String, Int, Float, Boolean, Date, ID)",
80
+ "Array fields using bracket notation [Type]",
81
+ "Optional fields using .optional() chain method",
82
+ "Enum definition with enumOf(name, values) class pattern",
83
+ "Instance methods in scalar classes",
84
+ "Static methods in scalar classes",
85
+ "Common mistakes and fixes",
86
+ "Implementation checklist",
87
+ "Full examples of scalar.constant.ts files"
88
+ ],
89
+ "rules": [
90
+ "One scalar.constant.ts should contain only one scalar class extending via(). If you need more than one scalar model, make another scalar.constant.ts file.",
91
+ "The directory and filename convention is camelCase, such as `encourageInfo/encourageInfo.constant.ts`",
92
+ "The class name should be PascalCase, matching the camelCase directory name (e.g., EncourageInfo for encourageInfo)",
93
+ "Use `extends via((field) => ({...}))` pattern to define scalar classes, not decorators",
94
+ "Import `via` from `akanjs/constant` and `enumOf`, `ID`, `Int`, `Float`, `dayjs` from `akanjs/base`",
95
+ "The values of enum strings must be camelCase (e.g., 'waitPay', not 'WAIT_PAY')",
96
+ "Define enums using class pattern: `export class EnumName extends enumOf('enumName', [...] as const) {}`",
97
+ "The first argument of enumOf() is the enum name string used in dictionary/GraphQL",
98
+ "Use .optional() chain method for nullable fields, not { nullable: true } option",
99
+ "Use bracket notation for arrays ([Type]) rather than generics (Array<Type>)",
100
+ "Use factory functions for dynamic defaults: { default: () => dayjs() }, not { default: dayjs() }",
101
+ "Always export both the scalar class and enum classes",
102
+ "Add 'as const' to enum value arrays for better TypeScript type inference"
103
+ ]
104
+ },
105
+ "page": "/akanjs/(docs)/docs/scalar/constant/_index.tsx"
106
+ }
@@ -0,0 +1,442 @@
1
+ # Scalar Constant Implementation Guide for Akan.js
2
+
3
+ ## Purpose of Scalar Constants
4
+
5
+ Scalar constants in Akan.js serve as the foundation for complex data modeling by:
6
+
7
+ - Defining reusable value objects that can be embedded in other models
8
+ - Representing complex data types without creating database collections
9
+ - Providing standardized field definitions across the application
10
+ - Enabling type-safe data modeling and validation
11
+ - Serving as building blocks for larger domain models
12
+
13
+ ## File Structure and Location
14
+
15
+ ### Location Convention
16
+
17
+ ```
18
+ {app,lib}/
19
+ └── */lib/__scalar/
20
+ └── <scalarName>/ # camelCase directory
21
+ └── <scalarName>.constant.ts # scalar definition file
22
+ ```
23
+
24
+ ### Naming Standards
25
+
26
+ - **Directory**: `camelCase` (e.g., `encourageInfo`, `geoLocation`)
27
+ - **File**: `<scalarName>.constant.ts` (matches directory name)
28
+ - **Scalar Class**: `PascalCase` (e.g., `EncourageInfo`, `GeoLocation`)
29
+ - **Enum Class**: `PascalCase` (e.g., `Journey`, `NotiSetting`)
30
+ - **Enum Values**: `camelCase` (e.g., `firstJoin`, `waitPay`)
31
+
32
+ ## Required Imports
33
+
34
+ ### Essential Framework Imports
35
+
36
+ ```typescript
37
+ import { via } from "akanjs/constant";
38
+ ```
39
+
40
+ ### Common Base Types
41
+
42
+ ```typescript
43
+ import { ID, Int, Float, dayjs, enumOf } from "akanjs/base";
44
+ ```
45
+
46
+ ### Cross-Scalar References
47
+
48
+ ```typescript
49
+ import { OtherScalar } from "../otherScalar/otherScalar.constant";
50
+ ```
51
+
52
+ ## Basic Syntax with via()
53
+
54
+ The `via()` function is the foundation for defining scalars. It takes a callback that receives the `field()` function, which you use to define each field's type and options.
55
+
56
+ ### Basic Structure
57
+
58
+ ```typescript
59
+ import { via } from "akanjs/constant";
60
+
61
+ export class ScalarName extends via((field) => ({
62
+ fieldName: field(FieldType),
63
+ fieldWithOptions: field(FieldType, { ...options }),
64
+ })) {
65
+ // Optional: Add instance methods here
66
+ }
67
+ ```
68
+
69
+ ### Simple Example
70
+
71
+ ```typescript
72
+ import { via } from "akanjs/constant";
73
+
74
+ export class RestrictInfo extends via((field) => ({
75
+ until: field(Date),
76
+ reason: field(String),
77
+ })) {}
78
+ ```
79
+
80
+ ### Key Patterns
81
+
82
+ | Pattern | Description |
83
+ | -------------------------- | -------------------------------------------------------------------------------- |
84
+ | `via((field) => ({...}))` | Creates a class with typed fields. The callback receives the `field()` helper. |
85
+ | `field(Type)` | Defines a single field. First argument is the type (String, Number, Date, etc.). |
86
+ | `field(Type, { options })` | Optional second argument is an options object for defaults, validation, etc. |
87
+
88
+ ## Available Field Types
89
+
90
+ ### Primitive Types
91
+
92
+ ```typescript
93
+ import { ID, Int, Float } from "akanjs/base";
94
+ import { via } from "akanjs/constant";
95
+
96
+ export class Example extends via((field) => ({
97
+ // String type
98
+ name: field(String),
99
+
100
+ // Number types
101
+ count: field(Int), // Integer
102
+ price: field(Float), // Floating point
103
+
104
+ // Boolean type
105
+ isActive: field(Boolean),
106
+
107
+ // Date type (internally uses Dayjs)
108
+ createdAt: field(Date),
109
+
110
+ // ID type (MongoDB ObjectId)
111
+ referenceId: field(ID),
112
+ })) {}
113
+ ```
114
+
115
+ ### Array Types
116
+
117
+ Array types are defined by wrapping the type in square brackets:
118
+
119
+ ```typescript
120
+ export class Example extends via((field) => ({
121
+ // Array of strings
122
+ tags: field([String]),
123
+
124
+ // Array of numbers
125
+ scores: field([Int]),
126
+
127
+ // Array of other scalars
128
+ items: field([OtherScalar]),
129
+
130
+ // Nested arrays (2D matrix)
131
+ matrix: field([[Int]]),
132
+ })) {}
133
+ ```
134
+
135
+ ### Optional Fields
136
+
137
+ Optional fields can be defined using the `.optional()` chain:
138
+
139
+ ```typescript
140
+ import { ID, Int } from "akanjs/base";
141
+ import { via } from "akanjs/constant";
142
+
143
+ export class FileMeta extends via((field) => ({
144
+ fileId: field(ID).optional(), // Optional field
145
+ lastModifiedAt: field(Date),
146
+ size: field(Int),
147
+ })) {}
148
+ ```
149
+
150
+ ## Field Options Reference
151
+
152
+ | Option | Type | Default | Description | Example |
153
+ | ----------- | -------- | ----------- | ------------------------------------------------ | ----------------------------- |
154
+ | `default` | Any/Func | `undefined` | Default field value (static or factory function) | `{ default: 0 }` |
155
+ | `min` | Number | - | Minimum numeric value | `{ min: 0 }` |
156
+ | `max` | Number | - | Maximum numeric value | `{ max: 100 }` |
157
+ | `minlength` | Number | - | Minimum string length | `{ minlength: 3 }` |
158
+ | `maxlength` | Number | - | Maximum string length | `{ maxlength: 255 }` |
159
+ | `validate` | Function | - | Custom validation function | `{ validate: isPhoneNumber }` |
160
+ | `example` | Any | - | Example value for documentation | `{ example: [0, 0] }` |
161
+
162
+ ### Field Options Examples
163
+
164
+ ```typescript
165
+ import { dayjs, Int, Float } from "akanjs/base";
166
+ import { isPhoneNumber } from "akanjs/common";
167
+ import { via } from "akanjs/constant";
168
+
169
+ export class OrderInfo extends via((field) => ({
170
+ // Static default value
171
+ quantity: field(Int, { default: 1 }),
172
+
173
+ // Dynamic default using factory function
174
+ orderedAt: field(Date, { default: () => dayjs() }),
175
+
176
+ // Number range validation
177
+ rating: field(Float, { min: 0, max: 5 }),
178
+
179
+ // String length validation
180
+ description: field(String, { minlength: 10, maxlength: 500 }),
181
+
182
+ // Custom validation function
183
+ phone: field(String, { validate: isPhoneNumber }),
184
+
185
+ // Combined options
186
+ price: field(Float, {
187
+ default: 0,
188
+ min: 0,
189
+ example: 29.99,
190
+ }),
191
+ })) {}
192
+ ```
193
+
194
+ ### Static vs Dynamic Defaults
195
+
196
+ - Use **static values** for constants: `{ default: 0 }`, `{ default: "active" }`
197
+ - Use **factory functions** for values computed at creation time: `{ default: () => dayjs() }`, `{ default: () => new ObjectId() }`
198
+
199
+ ## Enum Definition with enumOf()
200
+
201
+ The `enumOf()` function creates typed enum classes. Define enums before using them in your scalar fields.
202
+
203
+ ### Basic Enum
204
+
205
+ ```typescript
206
+ import { enumOf } from "akanjs/base";
207
+ import { via } from "akanjs/constant";
208
+
209
+ // Simple enum definition
210
+ export class NotiSetting extends enumOf("notiSetting", ["disagree", "fewer", "normal", "block"]) {}
211
+
212
+ // Using enum in a scalar
213
+ export class NotiInfo extends via((field) => ({
214
+ setting: field(NotiSetting, { default: "normal" }),
215
+ })) {}
216
+ ```
217
+
218
+ ### Enum with 'as const'
219
+
220
+ For better TypeScript type inference, use `as const`:
221
+
222
+ ```typescript
223
+ import { dayjs, enumOf } from "akanjs/base";
224
+ import { via } from "akanjs/constant";
225
+
226
+ // Use "as const" for better type inference
227
+ export class Status extends enumOf("status", ["pending", "active", "completed", "cancelled"] as const) {}
228
+
229
+ export class Order extends via((field) => ({
230
+ status: field(Status, { default: "pending" }),
231
+ orderedAt: field(Date, { default: () => dayjs() }),
232
+ })) {}
233
+ ```
234
+
235
+ ### Enum Key Points
236
+
237
+ | Point | Description |
238
+ | ---------------------- | ---------------------------------------------------------------------------------------- |
239
+ | `enumOf(name, values)` | First argument is the enum name (used in dictionary/GraphQL). Second is the value array. |
240
+ | camelCase Values | Always use camelCase for enum values (e.g., `"waitPay"`, not `"WAIT_PAY"`). |
241
+ | `as const` | Add `as const` to the values array for better TypeScript type inference. |
242
+
243
+ ## Instance Methods
244
+
245
+ You can add instance methods directly to the scalar class for computed properties and utility functions:
246
+
247
+ ```typescript
248
+ import { Int } from "akanjs/base";
249
+ import { via } from "akanjs/constant";
250
+
251
+ export class Stock extends via((field) => ({
252
+ total: field(Int, { default: 0, min: 0 }),
253
+ current: field(Int, { default: 0, min: 0 }),
254
+ })) {
255
+ getPercentage() {
256
+ if (this.total === 0) return 0;
257
+ return (this.current / this.total) * 100;
258
+ }
259
+ }
260
+ ```
261
+
262
+ ### Method Guidelines
263
+
264
+ - Instance methods have access to all fields via `this`
265
+ - Use them for calculations based on field values
266
+ - Methods defined in `constant.ts` are available on both server and client
267
+ - For server-only logic, use `document.ts` instead
268
+
269
+ ## Static Methods
270
+
271
+ Scalar classes can include static methods for common operations:
272
+
273
+ ```typescript
274
+ import { enumOf, Float } from "akanjs/base";
275
+ import { via } from "akanjs/constant";
276
+
277
+ export class CoordinateType extends enumOf("coordinateType", ["Point"] as const) {}
278
+
279
+ export class Coordinate extends via((field) => ({
280
+ type: field(CoordinateType, { default: "Point" }),
281
+ coordinates: field([Float], { default: [0, 0], example: [127.114367, 37.497114] }),
282
+ altitude: field(Float, { default: 0 }),
283
+ })) {
284
+ static getDistanceKm(loc1: Coordinate, loc2: Coordinate) {
285
+ const [lon1, lat1] = loc1.coordinates;
286
+ const [lon2, lat2] = loc2.coordinates;
287
+ const R = 6371; // Earth's radius in kilometers
288
+ // Distance calculation logic...
289
+ return distance;
290
+ }
291
+
292
+ static moveMeters(loc: Coordinate, x: number, y: number): Coordinate {
293
+ // Calculate new position...
294
+ return { ...loc, coordinates: [newLon, newLat] };
295
+ }
296
+ }
297
+ ```
298
+
299
+ ## Common Mistakes and Fixes
300
+
301
+ | Issue | Wrong ❌ | Correct ✅ |
302
+ | --------------- | ---------------------------------- | ----------------------------------------- |
303
+ | Enum case | `enumOf("status", ["ACTIVE"])` | `enumOf("status", ["active"])` |
304
+ | Array syntax | `field(Array<Int>)` | `field([Int])` |
305
+ | Dynamic default | `{ default: dayjs() }` | `{ default: () => dayjs() }` |
306
+ | Missing export | `class Status extends enumOf(...)` | `export class Status extends enumOf(...)` |
307
+ | Optional field | `field(ID, { nullable: true })` | `field(ID).optional()` |
308
+
309
+ ### Important Note
310
+
311
+ For Date defaults that should be computed at creation time, **always use a factory function**:
312
+
313
+ ```typescript
314
+ // ❌ Wrong - creates a single fixed date at module load
315
+ { default: dayjs() }
316
+
317
+ // ✅ Correct - creates a new date each time
318
+ { default: () => dayjs() }
319
+ ```
320
+
321
+ ## Implementation Checklist
322
+
323
+ ### File-Level
324
+
325
+ - [ ] File location: `__scalar/<camelCase>/<camelCase>.constant.ts`
326
+ - [ ] Import `via` from `akanjs/constant`
327
+ - [ ] Import `enumOf` from `akanjs/base` (if using enums)
328
+ - [ ] Export all classes (scalar and enums)
329
+
330
+ ### Naming
331
+
332
+ - [ ] Use PascalCase for class names
333
+ - [ ] Use camelCase for enum values
334
+ - [ ] Class name matches directory name in PascalCase
335
+
336
+ ### Field Definition
337
+
338
+ - [ ] Use `[Type]` syntax for arrays
339
+ - [ ] Use factory functions for dynamic defaults
340
+ - [ ] Use `.optional()` for nullable fields
341
+ - [ ] Add `as const` for large enum value arrays
342
+
343
+ ## Full Examples
344
+
345
+ ### Basic Scalar Example
346
+
347
+ ```typescript
348
+ // libs/payment/lib/__scalar/amount/amount.constant.ts
349
+ import { Float } from "akanjs/base";
350
+ import { via } from "akanjs/constant";
351
+
352
+ export class Amount extends via((field) => ({
353
+ value: field(Float, { min: 0, default: 0 }),
354
+ currency: field(String, { default: "USD" }),
355
+ })) {}
356
+ ```
357
+
358
+ ### Scalar with Enum
359
+
360
+ ```typescript
361
+ // apps/akasys/lib/__scalar/version/version.constant.ts
362
+ import { dayjs, enumOf } from "akanjs/base";
363
+ import { via } from "akanjs/constant";
364
+
365
+ export class VersionStatus extends enumOf("versionStatus", ["active", "expired"] as const) {}
366
+
367
+ export class Version extends via((field) => ({
368
+ source: field(File).optional(),
369
+ appBuild: field(File).optional(),
370
+ build: field(File).optional(),
371
+ status: field(VersionStatus, { default: "active" }),
372
+ at: field(Date, { default: () => dayjs() }),
373
+ })) {}
374
+ ```
375
+
376
+ ### Scalar with Optional Fields
377
+
378
+ ```typescript
379
+ // apps/angelo/lib/__scalar/estimate/estimate.constant.ts
380
+ import { Float, Int } from "akanjs/base";
381
+ import { via } from "akanjs/constant";
382
+
383
+ export class Estimate extends via((field) => ({
384
+ name: field(String),
385
+ value: field(Float, { min: 0, default: 0 }),
386
+ num: field(Int, { min: 1, default: 1 }),
387
+ unit: field(String).optional(),
388
+ note: field(String).optional(),
389
+ })) {}
390
+ ```
391
+
392
+ ### Complex Scalar with Static Methods
393
+
394
+ ```typescript
395
+ // libs/util/lib/__scalar/coordinate/coordinate.constant.ts
396
+ import { enumOf, Float } from "akanjs/base";
397
+ import { via } from "akanjs/constant";
398
+
399
+ export class CoordinateType extends enumOf("coordinateType", ["Point"] as const) {}
400
+
401
+ export class Coordinate extends via((field) => ({
402
+ type: field(CoordinateType, { default: "Point" }),
403
+ coordinates: field([Float], { default: [0, 0], example: [127.114367, 37.497114] }),
404
+ altitude: field(Float, { default: 0 }),
405
+ })) {
406
+ static getDistanceKm(loc1: Coordinate, loc2: Coordinate) {
407
+ const [lon1, lat1] = loc1.coordinates;
408
+ const [lon2, lat2] = loc2.coordinates;
409
+ const R = 6371;
410
+ // ... calculation logic
411
+ return distance;
412
+ }
413
+
414
+ static moveMeters(loc: Coordinate, x: number, y: number, z: number = 0): Coordinate {
415
+ const [lon, lat] = loc.coordinates;
416
+ const dx = ((x / 1000 / 6371) * (180 / Math.PI)) / Math.cos(lat * (Math.PI / 180));
417
+ const dy = (y / 1000 / 6371) * (180 / Math.PI);
418
+ return { ...loc, coordinates: [lon + dx, lat + dy], altitude: loc.altitude + z };
419
+ }
420
+ }
421
+ ```
422
+
423
+ ## Pro Tips
424
+
425
+ - **Keep scalars focused**: If it grows too large, split it into multiple scalars
426
+ - **Value objects only**: Avoid adding ID or timestamp fields (use Models for that)
427
+ - **Define enums first**: Define enums before the scalar class that uses them
428
+ - **Dictionary support**: Don't forget to create `dictionary.ts` for i18n support
429
+ - **Reusability**: Create separate scalars for commonly used structures
430
+
431
+ ## Summary
432
+
433
+ 1. **Location**: `__scalar/<camelCase>/<camelCase>.constant.ts`
434
+ 2. **Import**: `via` from `akanjs/constant`, `enumOf` from `akanjs/base`
435
+ 3. **Scalar Class**: `export class Name extends via((field) => ({...})) {}`
436
+ 4. **Enum Class**: `export class EnumName extends enumOf("enumName", [...] as const) {}`
437
+ 5. **Fields**: `field(Type)` or `field(Type, { options })`
438
+ 6. **Optional**: Use `.optional()` chain method
439
+ 7. **Arrays**: Use `[Type]` syntax
440
+ 8. **Enum Values**: Always camelCase
441
+
442
+ Following these patterns ensures type-safe, maintainable scalar definitions that integrate seamlessly with the Akan.js framework's data modeling layer.
@@ -0,0 +1,83 @@
1
+ {
2
+ "title": "Scalar Dictionary",
3
+ "description": "How to create and maintain scalar.dictionary.ts files in Akan.js",
4
+ "scans": [
5
+ {
6
+ "type": "source",
7
+ "description": "scalarDictionary builder function implementation",
8
+ "path": "pkgs/akanjs/dictionary/scalarDictionary.ts"
9
+ },
10
+ {
11
+ "type": "source",
12
+ "description": "Translation types and interfaces",
13
+ "path": "pkgs/akanjs/dictionary/trans.ts"
14
+ },
15
+ {
16
+ "type": "source",
17
+ "description": "Dictionary exports and types",
18
+ "path": "pkgs/akanjs/dictionary/index.ts"
19
+ },
20
+ {
21
+ "type": "example",
22
+ "description": "Simple scalar dictionary examples",
23
+ "path": "{apps,libs}/**/lib/__scalar/*/*.dictionary.ts",
24
+ "query": "lines < 30",
25
+ "sample": 3
26
+ },
27
+ {
28
+ "type": "example",
29
+ "description": "Scalar dictionaries with enum translations",
30
+ "path": "{apps,libs}/**/lib/__scalar/*/*.dictionary.ts",
31
+ "query": "/\\.enum</",
32
+ "sample": 3
33
+ },
34
+ {
35
+ "type": "example",
36
+ "description": "Complete scalar dictionary with field and enum translations",
37
+ "path": "{apps,libs}/**/lib/__scalar/*/*.dictionary.ts",
38
+ "query": "lines > 30",
39
+ "sample": 2
40
+ },
41
+ {
42
+ "type": "example",
43
+ "description": "Scalar dictionaries with multiple enums",
44
+ "path": "{apps,libs}/**/lib/__scalar/*/*.dictionary.ts",
45
+ "query": "/\\.enum<.*\\.enum</",
46
+ "sample": 2
47
+ }
48
+ ],
49
+ "update": {
50
+ "filePath": "./scalarDictionary.instruction.md",
51
+ "contents": [
52
+ "Purpose of scalar dictionary files",
53
+ "File structure and naming conventions",
54
+ "Required imports from akanjs/dictionary",
55
+ "scalarDictionary() builder pattern",
56
+ "Builder methods: .of(), .model<T>(), .enum<T>()",
57
+ "Translation format with t() function and .desc() method",
58
+ "Type imports from constant file using import type",
59
+ "Enum name matching with enumOf() name",
60
+ "Type safety through generic parameters",
61
+ "Common mistakes and fixes",
62
+ "Best practices for translations",
63
+ "Implementation checklist",
64
+ "Full examples with multiple enums"
65
+ ],
66
+ "rules": [
67
+ "Import scalarDictionary from 'akanjs/dictionary'",
68
+ "Import types from constant file using 'import type' syntax",
69
+ "Initialize with language order array: scalarDictionary(['en', 'ko'])",
70
+ "Use .of() method to define scalar name and description",
71
+ "Use .model<Type>() method with generic to define field translations",
72
+ "Use .enum<Type>('enumName', ...) method to define enum translations",
73
+ "The enum name string in .enum() must exactly match the first argument of enumOf() in constant file",
74
+ "Always chain .desc() after t() to provide descriptions: t([...]).desc([...])",
75
+ "Use exactly two string elements in translation arrays: [English, Korean]",
76
+ "Export as 'dictionary': export const dictionary = scalarDictionary(...)...",
77
+ "Use type generics (.model<Type>, .enum<Type>) for TypeScript validation",
78
+ "Provide meaningful descriptions that explain purpose, not just repeat labels",
79
+ "Match language order consistently across all dictionaries in the project"
80
+ ]
81
+ },
82
+ "page": "/akanjs/(docs)/docs/scalar/dictionary/_index.tsx"
83
+ }