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,128 @@
1
+ {
2
+ "title": "Model Constant",
3
+ "description": "How to create and implement model.constant.ts files in Akan.js",
4
+ "scans": [
5
+ {
6
+ "type": "source",
7
+ "description": "Model decorator implementation",
8
+ "path": "pkgs/akanjs/constant/classMeta.ts"
9
+ },
10
+ {
11
+ "type": "source",
12
+ "description": "Field decorator implementation",
13
+ "path": "pkgs/akanjs/constant/fieldMeta.ts"
14
+ },
15
+ {
16
+ "type": "source",
17
+ "description": "Filter implementation",
18
+ "path": "pkgs/akanjs/constant/filterMeta.ts"
19
+ },
20
+ {
21
+ "type": "source",
22
+ "description": "via and sortOf implementations",
23
+ "path": "pkgs/akanjs/constant/constantDecorator.ts"
24
+ },
25
+ {
26
+ "type": "source",
27
+ "description": "GraphQL schema generation",
28
+ "path": "pkgs/akanjs/server/gql.ts"
29
+ },
30
+ {
31
+ "type": "source",
32
+ "description": "MongoDB schema generation",
33
+ "path": "pkgs/akanjs/server/schema.ts"
34
+ },
35
+ {
36
+ "type": "source",
37
+ "description": "Query resolver implementation",
38
+ "path": "pkgs/akanjs/server/resolver.ts"
39
+ },
40
+ {
41
+ "type": "source",
42
+ "description": "Search indexing implementation",
43
+ "path": "pkgs/akanjs/server/searchDaemon.ts"
44
+ },
45
+ {
46
+ "type": "example",
47
+ "description": "Simple model examples",
48
+ "path": "{apps,libs}/*/lib/*/*.constant.ts",
49
+ "query": "lines < 100",
50
+ "sample": 3
51
+ },
52
+ {
53
+ "type": "example",
54
+ "description": "Complex models with all types",
55
+ "path": "{apps,libs}/*/lib/*/*.constant.ts",
56
+ "filterText": "@Model\\.(Input|Object|Light|Full|Filter|Summary|Insight)",
57
+ "sample": 3
58
+ },
59
+ {
60
+ "type": "example",
61
+ "description": "Models with enum definitions",
62
+ "path": "{apps,libs}/*/lib/*/*.constant.ts",
63
+ "filterText": "enumOf",
64
+ "sample": 3
65
+ },
66
+ {
67
+ "type": "example",
68
+ "description": "Models with reference fields",
69
+ "path": "{apps,libs}/*/lib/*/*.constant.ts",
70
+ "filterText": "ref: \"",
71
+ "sample": 2
72
+ },
73
+ {
74
+ "type": "usage",
75
+ "description": "Usage of models in UI components",
76
+ "path": "{apps,libs}/*/lib/*/[A-Z]*.{Template,Unit,View}.tsx",
77
+ "sample": 3
78
+ }
79
+ ],
80
+ "update": {
81
+ "filePath": "./modelConstant.instruction.md",
82
+ "contents": [
83
+ "Purpose and role of model.constant.ts files",
84
+ "Model class hierarchy and relationships",
85
+ "File structure and organization conventions",
86
+ "Required imports and dependencies",
87
+ "Enum definition patterns",
88
+ "ModelInput implementation",
89
+ "ModelObject implementation",
90
+ "LightModel implementation",
91
+ "Full Model implementation",
92
+ "Insight Model implementation",
93
+ "Summary Model implementation",
94
+ "Filter Model implementation",
95
+ "Field decorators and options",
96
+ "Filter decorators and arguments",
97
+ "Inheritance with via() and sortOf()",
98
+ "Working with references to other models",
99
+ "Validation rules and constraints",
100
+ "Type safety considerations",
101
+ "Common mistakes and solutions",
102
+ "Best practices for maintainable models",
103
+ "Complete example with all model types"
104
+ ],
105
+ "rules": [
106
+ "Follow the model hierarchy: Input → Object → Light/Full → Filter/Summary/Insight",
107
+ "Always create an Input model with user-editable fields",
108
+ "Always create an Object model extending Input with system fields",
109
+ "Always create a Light model with essential fields for listings",
110
+ "Always create a Full model combining Object and Light models",
111
+ "Create Filter models with sortOf() and custom filter methods",
112
+ "Create Insight models for aggregation/analytics",
113
+ "Create Summary models for dashboards",
114
+ "Use consistent naming: ModelInput, ModelObject, LightModel, Model (full)",
115
+ "Use via() for inheritance and field selection",
116
+ "Mark field arrays as const with 'as const' assertion",
117
+ "Avoid getters, setters, and instance methods - use static methods if needed",
118
+ "Always use Field.Prop/Hidden/Secret/Resolve decorators",
119
+ "Define enums with enumOf() and export both const and type",
120
+ "Set appropriate field defaults, especially for arrays (empty array)",
121
+ "Add validation constraints (min, max, minlength, maxlength) where appropriate",
122
+ "Use proper reference format with { ref: 'ModelName' }",
123
+ "Group related models in the same file",
124
+ "Export all models and enums"
125
+ ]
126
+ },
127
+ "page": "/akanjs/(docs)/docs/module/constant/_index.tsx"
128
+ }
@@ -0,0 +1,506 @@
1
+ # Akan.js Model Constant Implementation Guide
2
+
3
+ ## Purpose and Role of Model Constant Files
4
+
5
+ Model constant files (`model.constant.ts`) serve as the foundation of the Akan.js framework by:
6
+
7
+ - Defining data structures for database schemas
8
+ - Generating GraphQL types for API interfaces
9
+ - Configuring validation rules for input data
10
+ - Establishing relationships between entities
11
+ - Supporting search indexing and optimization
12
+ - Enabling type-safe data manipulation
13
+ - Creating a single source of truth for the data model
14
+
15
+ ## Model Class Hierarchy and Relationships
16
+
17
+ ```mermaid
18
+ graph TD
19
+ Input[Model.Input] --> Object[Model.Object]
20
+ Object --> Light[Model.Light]
21
+ Object --> Full[Model.Full]
22
+ Object --> Insight[Model.Insight]
23
+ Insight --> Summary[Model.Summary]
24
+ Object --> Query[Model.Query]
25
+ Object --> Sort[Model.Sort]
26
+ ```
27
+
28
+ Each model type serves a specific purpose in the data lifecycle:
29
+
30
+ 1. **Input Model**: Data required to create a schema
31
+ 2. **Object Model**: Schema completed when data is created
32
+ 3. **Light Model**: Lightweight schema used when querying multiple data
33
+ 4. **Full Model**: Class-based complete form of data
34
+ 5. **Insight Model**: Statistical data extractable during queries
35
+ 6. **Summary Model**: Statistical data extracted periodically during monitoring
36
+ 7. **Query Model**: Defines query methods and statements
37
+ 8. **Sort Model**: Defines sort keys and values for data ordering
38
+
39
+ ## File Structure and Organization
40
+
41
+ ```typescript
42
+ // 1. Imports
43
+ import { enumOf, ID, Int } from "akanjs/base";
44
+ import { Field, Model } from "akanjs/constant";
45
+
46
+ // 2. Enums
47
+ export const StatusEnum = enumOf(["active", "inactive"] as const);
48
+ export type StatusEnum = enumOf<typeof StatusEnum>;
49
+
50
+ // 3. Input Model
51
+
52
+ export class DroneInput {
53
+ @Field.Prop(() => String)
54
+ name: string;
55
+ }
56
+
57
+ // 4. Object Model
58
+
59
+ export class DroneObject extends BaseModel(DroneInput) {
60
+ @Field.Prop(() => String, { enum: StatusEnum, default: "offline" })
61
+ status: StatusEnum;
62
+ }
63
+
64
+ // 5. Light Model
65
+
66
+ export class LightDrone extends Light(DroneObject, ["id", "name", "status"] as const) {
67
+ isConnected() {
68
+ return this.status !== "offline";
69
+ }
70
+ }
71
+
72
+ // 6. Full Model
73
+
74
+ export class Drone extends Full(DroneObject, LightDrone) {
75
+ isAvailable() {
76
+ return this.isConnected() && this.wsUri.startsWith("ws://");
77
+ }
78
+ }
79
+
80
+ // 7. Insight Model
81
+
82
+ export class DroneInsight {
83
+ @Field.Prop(() => Int, { default: 0, accumulate: { $sum: 1 } })
84
+ count: number;
85
+ }
86
+
87
+ // 9. Query Model
88
+ export const droneQuery = {
89
+ byName: (name: string) => ({ name }),
90
+ };
91
+
92
+ // 10. Sort Model
93
+ export const droneSort = {
94
+ alphabetical: { name: 1 },
95
+ };
96
+ ```
97
+
98
+ ## Required Imports
99
+
100
+ ```typescript
101
+ // Base types
102
+ import { enumOf, ID, Int, Float, String, Boolean, Date, type Dayjs, dayjs, JSON } from "akanjs/base";
103
+
104
+ // Model decorators
105
+ import { Field, Model } from "akanjs/constant";
106
+
107
+ // Related models (use Light models to prevent circular dependencies)
108
+ import { LightCategory } from "../category/category.constant";
109
+ ```
110
+
111
+ ## ModelInput Implementation
112
+
113
+ The Input model defines fields required for data creation:
114
+
115
+ ```typescript
116
+ export class DroneInput {
117
+ @Field.Prop(() => String)
118
+ name: string;
119
+
120
+ @Field.Prop(() => String, { default: "ws://10.10.150.10:9091" })
121
+ wsUri: string;
122
+ }
123
+ ```
124
+
125
+ **Usage Examples**:
126
+
127
+ ```typescript
128
+ // Document creation
129
+ new this.Drone({ name: "myDrone", wsUri: "ws://10.10.150.10:9091" });
130
+
131
+ // Service logic
132
+ this.createDrone({ name: "myDrone", wsUri: "ws://10.10.150.10:9091" });
133
+
134
+ // API call
135
+ fetch.createDrone({ name: "myDrone", wsUri: "ws://10.10.150.10:9091" });
136
+ ```
137
+
138
+ ## ModelObject Implementation
139
+
140
+ The Object model adds system-managed fields:
141
+
142
+ ```typescript
143
+ export const droneStatuses = ["active", "offline", "inactive"] as const;
144
+ export type DroneStatus = (typeof droneStatuses)[number];
145
+
146
+ export class DroneObject extends BaseModel(DroneInput) {
147
+ @Field.Prop(() => String, { enum: droneStatuses, default: "offline" })
148
+ status: DroneStatus;
149
+ }
150
+ ```
151
+
152
+ **Usage Examples**:
153
+
154
+ ```typescript
155
+ // Document lookup
156
+ const drone = await this.Drone.pickById("droneId"); // drone.status
157
+
158
+ // Service lookup
159
+ const drone = await this.getDrone("droneId"); // drone.status
160
+
161
+ // Store lookup
162
+ const drone = await fetch.drone("droneId"); // drone.status
163
+
164
+ // Component usage
165
+ const drone = st.use.drone(); // drone.status
166
+ ```
167
+
168
+ ## LightModel Implementation
169
+
170
+ Light model defines lightweight schema for list queries:
171
+
172
+ ```typescript
173
+ export class LightDrone extends Light(DroneObject, ["name", "status"] as const) {
174
+ isConnected() {
175
+ return this.status !== "offline";
176
+ }
177
+ }
178
+ ```
179
+
180
+ **Usage Examples**:
181
+
182
+ ```typescript
183
+ // Store query
184
+ const droneList = await fetch.droneList({ status: "active" });
185
+ // drone.name available, drone.wsUri not available
186
+
187
+ // Component usage
188
+ const droneMap = st.use.droneMap(); // Map<string, LightDrone>
189
+ ```
190
+
191
+ ## Full Model Implementation
192
+
193
+ Full model adds convenience functions:
194
+
195
+ ```typescript
196
+ export class Drone extends Full(DroneObject, LightDrone) {
197
+ static isDronesAllConnected(droneList: LightDrone[]) {
198
+ return droneList.every((drone) => drone.isConnected());
199
+ }
200
+
201
+ isAvailable() {
202
+ return this.isConnected() && this.wsUri.startsWith("ws://");
203
+ }
204
+ }
205
+ ```
206
+
207
+ **Usage Examples**:
208
+
209
+ ```typescript
210
+ // API response handling
211
+ const drone = await fetch.drone("droneId");
212
+ drone.isAvailable();
213
+
214
+ // Component logic
215
+ const droneMap = st.use.droneMap();
216
+ const droneList = [...droneMap.values()];
217
+ const isAllConnected = cnst.Drone.isDroneAllConnected(droneList);
218
+ ```
219
+
220
+ ## Insight Model Implementation
221
+
222
+ Insight model defines statistical fields:
223
+
224
+ ```typescript
225
+ export class DroneInsight {
226
+ @Field.Prop(() => Int, { default: 0, accumulate: { $sum: 1 } })
227
+ count: number;
228
+ }
229
+ ```
230
+
231
+ **Usage Examples**:
232
+
233
+ ```typescript
234
+ // Service usage
235
+ const droneInsight = await this.insight({ ...query });
236
+
237
+ // API call
238
+ const droneInsight = await fetch.droneInsight({ ...query });
239
+
240
+ // Component usage
241
+ const droneInsight = st.use.droneInsight(); // droneInsight.count
242
+ ```
243
+
244
+ **Usage Examples**:
245
+
246
+ ```typescript
247
+ // Service usage
248
+ const summary = await this.getActiveSummary();
249
+
250
+ // API call
251
+ const summary = await fetch.getActiveSummary();
252
+
253
+ // Component usage
254
+ const summary = st.use.summary(); // summary.totalDrone
255
+ ```
256
+
257
+ ## Query Model Implementation
258
+
259
+ Query model defines query methods:
260
+
261
+ ```typescript
262
+ export const droneQuery = {
263
+ ...baseQueries,
264
+ byName: (name: string) => ({ name }),
265
+ };
266
+ ```
267
+
268
+ **Usage Examples**:
269
+
270
+ ```typescript
271
+ // Document queries
272
+ const drone = await this.findByName("myDrone");
273
+ const drones = await this.listByName("myDrone");
274
+ const droneCount = await this.countByName("myDrone");
275
+
276
+ // Service queries
277
+ const drone = await this.findByName("myDrone");
278
+ const drones = await this.listByName("myDrone");
279
+ ```
280
+
281
+ ## Sort Model Implementation
282
+
283
+ Sort model defines sorting options:
284
+
285
+ ```typescript
286
+ export const droneSort = {
287
+ ...baseSorts,
288
+ alphabetical: { name: 1 },
289
+ };
290
+ ```
291
+
292
+ **Usage Examples**:
293
+
294
+ ```typescript
295
+ // Document sorting
296
+ const drones = await this.listByName("myDrone", { sort: "alphabetical" });
297
+
298
+ // Service sorting
299
+ const drones = await this.listByName("myDrone", { sort: "alphabetical" });
300
+ ```
301
+
302
+ ## Field Decorators and Options
303
+
304
+ | Option | Type | Default | Description | Example |
305
+ | ------------ | -------------------- | ------- | -------------------------------------- | ---------------------------------------------------------------------- |
306
+ | `nullable` | `boolean` | `false` | Field required status | `@Field.Prop(()=> String, { default: "untitled" }) title: string;` |
307
+ | `ref` | `string` | - | Reference collection name | `@Field.Prop(()=> ID, { ref: "drone" }) drone: string;` |
308
+ | `refPath` | `string` | - | Dynamic reference collection name | `@Field.Prop(()=> ID, { refPath: "rootType" }) root: string;` |
309
+ | `default` | `any` | - | Default value when no value entered | `@Field.Prop(()=> String, { default: "untitled" }) title: string;` |
310
+ | `type` | `string` | - | Preset validation (email/password/url) | `@Field.Prop(()=> String, { type: "email" }) email: string;` |
311
+ | `immutable` | `boolean` | `false` | Cannot be changed after creation | `@Field.Prop(()=> ID, { immutable: true }) creator: string;` |
312
+ | `min` | `number` | - | Minimum value for Int/Float fields | `@Field.Prop(()=> Int, { min: 0 }) progress: number;` |
313
+ | `max` | `number` | - | Maximum value for Int/Float fields | `@Field.Prop(()=> Float, { min: 0, max: 1 }) ratio: number;` |
314
+ | `enum` | `any[]` | - | Enum values restriction | `@Field.Prop(()=> String, { enum: ["active","inactive"] }) status;` |
315
+ | `minlength` | `number` | - | Minimum string length | `@Field.Prop(()=> String, { minlength: 2 }) name: string;` |
316
+ | `maxlength` | `number` | - | Maximum string length | `@Field.Prop(()=> String, { maxlength: 30 }) title: string;` |
317
+ | `query` | `object` | - | Query value for Summary fields | `@Field.Prop(() => Int, { query: { status: { $ne: 'inactive' } })` |
318
+ | `accumulate` | `object` | - | Aggregation value for Insight fields | `@Field.Prop(() => Int, { accumulate: { $sum: 1 } }) count: number;` |
319
+ | `example` | `any` | - | Example value for API docs | `@Field.Prop(()=> String, { example: "contact@akanjs.com" }) email;` |
320
+ | `of` | `any` | - | Value type for Map fields | `@Field.Prop(()=> Map, { of: Date }) readAts: Map<string, Dayjs>;` |
321
+ | `validate` | `(value) => boolean` | - | Custom validation function | `@Field.Prop(()=> String, { validate: (v)=> v.includes("@") }) email;` |
322
+
323
+ ## Advanced Field Types
324
+
325
+ ```mermaid
326
+ graph LR
327
+ Prop[Field.Prop] -->|General purpose| Standard
328
+ Hidden[Field.Hidden] -->|Backend only| Restricted
329
+ Secret[Field.Secret] -->|Security restricted| Sensitive
330
+ Resolve[Field.Resolve] -->|Computed| Virtual
331
+ ```
332
+
333
+ 1. **Field.Prop**
334
+ General schema field declaration, visible in both backend and frontend
335
+
336
+ ```typescript
337
+ @Field.Prop(() => String)
338
+ name: string;
339
+ ```
340
+
341
+ 2. **Field.Hidden**
342
+ Backend-only fields, restricted in frontend for security
343
+
344
+ ```typescript
345
+ @Field.Hidden(() => String)
346
+ internalCode: string;
347
+ ```
348
+
349
+ 3. **Field.Secret**
350
+ Security-sensitive fields with query restrictions
351
+
352
+ ```typescript
353
+ @Field.Secret(() => String)
354
+ apiKey: string;
355
+ ```
356
+
357
+ 4. **Field.Resolve**
358
+ Computed fields not stored in database
359
+ ```typescript
360
+ @Field.Resolve(() => Int)
361
+ get total() { return this.items.length }
362
+ ```
363
+
364
+ ## Advanced - Relation Patterns
365
+
366
+ ### 1. Scalar Embedded Style
367
+
368
+ ```typescript
369
+ export class DronePhysicalState {
370
+ @Field.Prop(() => [Float], { default: [0, 0, 0] })
371
+ rpy: [number, number, number];
372
+ }
373
+
374
+ export class DroneObject {
375
+ @Field.Prop(() => DronePhysicalState)
376
+ physicalState: DronePhysicalState;
377
+ }
378
+ ```
379
+
380
+ ### 2. Reference ID Style
381
+
382
+ ```typescript
383
+ export class MissionInput {
384
+ @Field.Prop(() => ID, { ref: "drone" })
385
+ drone: string;
386
+ }
387
+ ```
388
+
389
+ ### 3. Resolved Reference Style
390
+
391
+ ```typescript
392
+ export class DroneObject {
393
+ @Field.Prop(() => LightMission, { nullable: true })
394
+ mission: LightMission | null;
395
+ }
396
+ ```
397
+
398
+ **Important**: Avoid circular dependencies by importing directly from constant files:
399
+
400
+ ```typescript
401
+ // Correct
402
+ import { LightMission } from "../mission/mission.constant";
403
+
404
+ // Incorrect
405
+ import { LightMission } from "../cnst_";
406
+ ```
407
+
408
+ ## Best Practices for Maintainable Models
409
+
410
+ 1. **Consistent Naming**:
411
+
412
+ - Input: `DroneInput`
413
+ - Object: `DroneObject`
414
+ - Light: `LightDrone`
415
+ - Query: `droneQuery`
416
+ - Sort: `droneSort`
417
+
418
+ 2. **Reference Handling**:
419
+
420
+ - Use Light models for references
421
+ - Avoid circular dependencies
422
+ - Prefer direct imports over barrel files
423
+
424
+ 3. **Field Design**:
425
+
426
+ - Use proper field types (Prop, Hidden, Secret, Resolve)
427
+ - Set appropriate defaults (especially for arrays)
428
+ - Add validation where needed
429
+
430
+ 4. **Performance Optimization**:
431
+
432
+ - Use Light models for list queries
433
+ - Keep Insight/Summary models lean
434
+ - Use appropriate indexes for queries
435
+
436
+ 5. **Documentation**:
437
+ - Comment complex fields
438
+ - Explain non-obvious relationships
439
+ - Document query/sort usage patterns
440
+
441
+ ## Complete Example
442
+
443
+ ```typescript
444
+ import { ID, Int, String } from "akanjs/base";
445
+ import { Field, Model } from "akanjs/constant";
446
+
447
+ // Input Model
448
+
449
+ export class DroneInput {
450
+ @Field.Prop(() => String)
451
+ name: string;
452
+ }
453
+
454
+ // Object Model
455
+
456
+ export class DroneObject extends BaseModel(DroneInput) {
457
+ @Field.Prop(() => String, { enum: ["active", "offline"], default: "offline" })
458
+ status: string;
459
+ }
460
+
461
+ // Light Model
462
+
463
+ export class LightDrone extends Light(DroneObject, ["id", "name", "status"] as const) {
464
+ isConnected() {
465
+ return this.status === "active";
466
+ }
467
+ }
468
+
469
+ // Full Model
470
+
471
+ export class Drone extends Full(DroneObject, LightDrone) {
472
+ isAvailable() {
473
+ return this.isConnected() && this.battery > 20;
474
+ }
475
+ }
476
+
477
+ // Insight Model
478
+
479
+ export class DroneInsight {
480
+ @Field.Prop(() => Int, { accumulate: { $sum: 1 } })
481
+ count: number;
482
+ }
483
+
484
+ // Query Model
485
+ export const droneQuery = {
486
+ byStatus: (status: string) => ({ status }),
487
+ };
488
+
489
+ // Sort Model
490
+ export const droneSort = {
491
+ byName: { name: 1 },
492
+ };
493
+ ```
494
+
495
+ ## Summary Checklist
496
+
497
+ 1. [ ] Implement all required model types (Input, Object, Light, Full, Insight, Summary, Query, Sort)
498
+ 2. [ ] Define field options properly (nullable, ref, default, etc.)
499
+ 3. [ ] Add necessary validation rules
500
+ 4. [ ] Implement relation patterns where needed
501
+ 5. [ ] Use proper field types (Prop, Hidden, Secret, Resolve)
502
+ 6. [ ] Add convenience functions to Light/Full models
503
+ 7. [ ] Prevent circular dependencies in references
504
+ 8. [ ] Add comprehensive JSDoc comments
505
+ 9. [ ] Verify all examples in usage contexts
506
+ 10. [ ] Test query/sort functionality