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
package/base/base.ts ADDED
@@ -0,0 +1,194 @@
1
+ import type { Cls } from ".";
2
+ import { Float, Int } from "./primitiveRegistry";
3
+
4
+ class EnumPrototype {}
5
+ export type EnumInstance<RefName extends string = string, T = string | number> = Cls<
6
+ { refName: RefName; value: T },
7
+ {
8
+ refName: RefName;
9
+ type: StringConstructor | typeof Int | typeof Float;
10
+ values: readonly T[];
11
+ valueMap: Map<T, number>;
12
+ has: (value: T) => boolean;
13
+ indexOf: (value: T) => number;
14
+ find: (callback: (value: T, index: number, array: readonly T[]) => boolean) => T;
15
+ findIndex: (callback: (value: T, index: number, array: readonly T[]) => boolean) => number;
16
+ filter: (callback: (value: T, index: number, array: readonly T[]) => boolean) => T[];
17
+ map: <R>(callback: (value: T, index: number, array: readonly T[]) => R) => R[];
18
+ forEach: (callback: (value: T, index: number, array: readonly T[]) => void) => void;
19
+ }
20
+ >;
21
+
22
+ /** Returns true when a class was created by `enumOf`. */
23
+ export const isEnum = (enumRef: Cls) => Object.getPrototypeOf(Object.getPrototypeOf(enumRef) ?? {}) === EnumPrototype;
24
+
25
+ /** Creates a typed scalar enum class from a readonly list of string or number values. */
26
+ export const enumOf = <RefName extends string, T = string | number>(
27
+ refName: RefName,
28
+ values: readonly T[],
29
+ ): EnumInstance<RefName, T> => {
30
+ const valueMap = new Map(values.map((value, idx) => [value, idx] as [T, number]));
31
+ const firstValue = values.at(0) as string | number | undefined;
32
+ if (firstValue === undefined) throw new Error("Enum values are empty");
33
+ const type =
34
+ typeof firstValue === "string"
35
+ ? String
36
+ : (values as readonly number[]).every((value: number) => value % 1 === 0)
37
+ ? Int
38
+ : Float;
39
+ class Enum extends EnumPrototype {
40
+ static readonly values = values;
41
+ static readonly valueMap = valueMap;
42
+ static readonly type = type;
43
+ static has(value: T): boolean {
44
+ return Enum.valueMap.has(value);
45
+ }
46
+ static indexOf(value: T): number {
47
+ const idx = Enum.valueMap.get(value);
48
+ if (idx === undefined) throw new Error(`Value ${value} is not in enum`);
49
+ return idx;
50
+ }
51
+ static find(callback: (value: T, index: number, array: readonly T[]) => boolean): T {
52
+ const val = Enum.values.find(callback);
53
+ if (val === undefined) throw new Error(`Value not found in enum`);
54
+ return val;
55
+ }
56
+ static findIndex(callback: (value: T, index: number, array: readonly T[]) => boolean): number {
57
+ const idx = Enum.values.findIndex(callback);
58
+ if (idx === -1) throw new Error(`Value not found in enum`);
59
+ return idx;
60
+ }
61
+ static filter(callback: (value: T, index: number, array: readonly T[]) => boolean): T[] {
62
+ return Enum.values.filter(callback);
63
+ }
64
+ static map<R>(callback: (value: T, index: number, array: readonly T[]) => R): R[] {
65
+ return Enum.values.map(callback);
66
+ }
67
+ static forEach(callback: (value: T, index: number, array: readonly T[]) => void): void {
68
+ Enum.values.forEach(callback);
69
+ }
70
+ static readonly refName = refName;
71
+ readonly refName = refName;
72
+ declare readonly value: T;
73
+ }
74
+ return Enum;
75
+ };
76
+
77
+ /** Id-keyed list helper used for light model collections and immutable-style list updates. */
78
+ export class DataList<Light extends { id: string }> {
79
+
80
+ #idMap: Map<string, number>;
81
+ length: number;
82
+ values: Light[];
83
+ constructor(data: Light[] | DataList<Light> = []) {
84
+ const values = Array.isArray(data) ? data : data.values;
85
+ this.values = [];
86
+ this.#idMap = new Map();
87
+ values.forEach((value) => {
88
+ const idx = this.#idMap.get(value.id);
89
+ if (idx === undefined) {
90
+ this.#idMap.set(value.id, this.values.length);
91
+ this.values.push(value);
92
+ } else this.values[idx] = value;
93
+ });
94
+ this.length = this.values.length;
95
+ }
96
+ indexOf(id: string) {
97
+ const idx = this.#idMap.get(id);
98
+ if (idx === undefined) throw new Error(`Value ${id} is not in list`);
99
+ return idx;
100
+ }
101
+ set(value: Light) {
102
+ const idx = this.#idMap.get(value.id);
103
+ if (idx !== undefined) this.values = [...this.values.slice(0, idx), value, ...this.values.slice(idx + 1)];
104
+ else {
105
+ this.#idMap.set(value.id, this.length);
106
+ this.values = [...this.values, value];
107
+ this.length++;
108
+ }
109
+ return this;
110
+ }
111
+ delete(id: string) {
112
+ const idx = this.#idMap.get(id);
113
+ if (idx === undefined) return this;
114
+ this.#idMap.delete(id);
115
+ this.values.splice(idx, 1);
116
+ this.values.slice(idx).forEach((value, i) => {
117
+ this.#idMap.set(value.id, i + idx);
118
+ });
119
+ this.length--;
120
+ return this;
121
+ }
122
+ get(id: string) {
123
+ const idx = this.#idMap.get(id);
124
+ if (idx === undefined) return undefined;
125
+ return this.values[idx];
126
+ }
127
+ at(idx: number) {
128
+ return this.values.at(idx);
129
+ }
130
+ pickAt(idx: number) {
131
+ const value = this.values.at(idx);
132
+ if (value === undefined) throw new Error(`Value at ${idx} is undefined`);
133
+ return value;
134
+ }
135
+ pick(id: string) {
136
+ return this.values[this.indexOf(id)];
137
+ }
138
+ has(id: string) {
139
+ return this.#idMap.has(id);
140
+ }
141
+ find(fn: (value: Light, idx: number) => boolean) {
142
+ const val = this.values.find(fn);
143
+ return val;
144
+ }
145
+ findIndex(fn: (value: Light, idx: number) => boolean) {
146
+ const val = this.values.findIndex(fn);
147
+ return val;
148
+ }
149
+ some(fn: (value: Light, idx: number) => boolean) {
150
+ return this.values.some(fn);
151
+ }
152
+ every(fn: (value: Light, idx: number) => boolean) {
153
+ return this.values.every(fn);
154
+ }
155
+ forEach(fn: (value: Light, idx: number) => void) {
156
+ this.values.forEach(fn);
157
+ }
158
+ map<T>(fn: (value: Light, idx: number) => T) {
159
+ return this.values.map(fn);
160
+ }
161
+ flatMap<T>(fn: (value: Light, idx: number, array: Light[]) => T | readonly T[]) {
162
+ return this.values.flatMap(fn);
163
+ }
164
+ sort(fn: (a: Light, b: Light) => number) {
165
+ return new DataList(this.values.sort(fn));
166
+ }
167
+ filter(fn: (value: Light, idx: number) => boolean) {
168
+ return new DataList(this.values.filter(fn));
169
+ }
170
+ reduce<T>(fn: (acc: T, value: Light, idx: number) => T, initialValue: T) {
171
+ return this.values.reduce(fn, initialValue);
172
+ }
173
+ slice(start: number, end = this.length) {
174
+ return new DataList(this.values.slice(start, end));
175
+ }
176
+ save() {
177
+ return new DataList(this);
178
+ }
179
+ [Symbol.iterator]() {
180
+ return this.values[Symbol.iterator]();
181
+ }
182
+ }
183
+
184
+ export const logo = `
185
+ _ _ _
186
+ / \\ | | ____ _ _ __ (_)___
187
+ / _ \\ | |/ / _' | '_ \\ | / __|
188
+ / ___ \\| < (_| | | | |_ | \\__ \\
189
+ /_/ \\_\\_|\\_\\__,_|_| |_(_)/ |___/
190
+ |__/
191
+ ? See more details on docs https://www.akanjs.com/docs
192
+ ★ Star Akanjs on GitHub https://github.com/akan-team/akanjs
193
+
194
+ `;
@@ -0,0 +1,162 @@
1
+ type ProcessEnvLike = { env?: Record<string, string | undefined> };
2
+
3
+ const globalWithProcess = globalThis as unknown as { process?: ProcessEnvLike };
4
+
5
+ globalWithProcess.process ??= {};
6
+ globalWithProcess.process.env ??= {};
7
+
8
+ export type Environment = "testing" | "debug" | "develop" | "main" | "local";
9
+ export type DatabaseMode = "single" | "multiple" | "cluster";
10
+ export interface BaseEnv {
11
+ repoName: string;
12
+ serveDomain: string;
13
+ appName: string;
14
+ environment: Environment;
15
+ operationMode: "local" | "edge" | "cloud" | "module";
16
+ tunnelUsername: string;
17
+ tunnelPassword: string;
18
+ databaseMode?: DatabaseMode;
19
+ }
20
+ export type BackendEnv = BaseEnv & {
21
+ hostname?: string | null;
22
+ port?: number;
23
+ database?: {
24
+ mode?: DatabaseMode;
25
+ driver?: "sqlite" | "libsql" | "postgres";
26
+ sqlite?: {
27
+ filePath?: string;
28
+ journalMode?: string;
29
+ busyTimeoutMs?: number;
30
+ synchronous?: string;
31
+ foreignKeys?: boolean;
32
+ cacheSize?: number;
33
+ tempStore?: string;
34
+ };
35
+ libsql?: {
36
+ url?: string;
37
+ authToken?: string;
38
+ };
39
+ postgres?: {
40
+ url?: string;
41
+ host?: string;
42
+ port?: number;
43
+ database?: string;
44
+ user?: string;
45
+ password?: string;
46
+ };
47
+ };
48
+ solid?: {
49
+ filePath?: string;
50
+ journalMode?: string;
51
+ busyTimeoutMs?: number;
52
+ synchronous?: string;
53
+ cleanupIntervalMs?: number;
54
+ queuePollIntervalMs?: number;
55
+ queueLeaseMs?: number;
56
+ };
57
+ onCleanup?: () => Promise<void>;
58
+ };
59
+
60
+ export type ClientEnv = BaseEnv & {
61
+ side: "server" | "client";
62
+ renderMode: "ssr" | "csr";
63
+ websocket: boolean;
64
+ clientHost: string;
65
+ clientPort: number;
66
+ clientHttpProtocol: "http:" | "https:";
67
+ clientHttpUri: string;
68
+ serverHost: string;
69
+ serverPort: number;
70
+ serverHttpProtocol: "http:" | "https:";
71
+ serverHttpUri: string;
72
+ serverWsProtocol: "ws:" | "wss:";
73
+ serverWsUri: string;
74
+ };
75
+
76
+ let cachedEnv: ClientEnv | undefined;
77
+
78
+ /** Reads and caches Akan runtime environment values from process/browser environment settings. */
79
+ export const getEnv = (): ClientEnv => {
80
+ if (cachedEnv) return cachedEnv;
81
+ const appName = process.env.AKAN_PUBLIC_APP_NAME ?? "unknown";
82
+ const repoName = process.env.AKAN_PUBLIC_REPO_NAME ?? "unknown";
83
+ const serveDomain = process.env.AKAN_PUBLIC_SERVE_DOMAIN ?? "unknown";
84
+ if (appName === "unknown") throw new Error("environment variable AKAN_PUBLIC_APP_NAME is required");
85
+ if (repoName === "unknown") throw new Error("environment variable AKAN_PUBLIC_REPO_NAME is required");
86
+ if (serveDomain === "unknown") throw new Error("environment variable AKAN_PUBLIC_SERVE_DOMAIN is required");
87
+ const environment = (process.env.AKAN_PUBLIC_ENV ?? "debug") as BaseEnv["environment"];
88
+ const operationMode = (process.env.AKAN_PUBLIC_OPERATION_MODE ?? "cloud") as BaseEnv["operationMode"];
89
+ const tunnelUsername = process.env.SSH_TUNNEL_USERNAME ?? "root";
90
+ const tunnelPassword = process.env.SSH_TUNNEL_PASSWORD ?? repoName;
91
+ const baseEnv: BaseEnv = {
92
+ repoName,
93
+ serveDomain,
94
+ appName,
95
+ environment,
96
+ operationMode,
97
+ tunnelUsername,
98
+ tunnelPassword,
99
+ databaseMode: process.env.AKAN_DATABASE_MODE as DatabaseMode | undefined,
100
+ } as const;
101
+ const side = typeof window === "undefined" ? "server" : "client";
102
+ const renderMode = (process.env.AKAN_PUBLIC_RENDER_ENV ?? "csr") as ClientEnv["renderMode"];
103
+ const clientHost =
104
+ process.env.AKAN_PUBLIC_CLIENT_HOST ??
105
+ (operationMode === "local" || side === "server" ? "localhost" : window.location.hostname);
106
+ const clientPort = parseInt(process.env.AKAN_PUBLIC_CLIENT_PORT ?? (operationMode === "local" ? "8282" : "443"));
107
+ const clientHttpProtocol =
108
+ side === "client"
109
+ ? (window.location.protocol as "http:" | "https:")
110
+ : clientHost === "localhost"
111
+ ? "http:"
112
+ : "https:";
113
+ const clientHttpUri = `${clientHttpProtocol}//${clientHost}${clientPort === 443 ? "" : `:${clientPort}`}`;
114
+ const serverHost =
115
+ process.env.SERVER_HOST ??
116
+ (operationMode === "local"
117
+ ? typeof window === "undefined"
118
+ ? "localhost"
119
+ : (window.location.host.split(":")[0] ?? "unknown")
120
+ : renderMode === "csr"
121
+ ? `${appName}-${environment}.${serveDomain}`
122
+ : side === "client"
123
+ ? (window.location.host.split(":")[0] ?? "unknown")
124
+ : "localhost");
125
+
126
+ const serverPort = parseInt(
127
+ process.env.AKAN_PUBLIC_SERVER_PORT ?? (operationMode === "local" || side === "server" ? "8282" : "443"),
128
+ );
129
+ const serverHttpProtocol: "http:" | "https:" =
130
+ (process.env.SERVER_HTTP_PROTOCOL as "http:" | "https:" | undefined) ??
131
+ (operationMode === "local"
132
+ ? side === "client"
133
+ ? (window.location.protocol as "http:" | "https:")
134
+ : ("http:" as const)
135
+ : renderMode === "csr"
136
+ ? ("https:" as const)
137
+ : side === "client"
138
+ ? (window.location.protocol as "http:" | "https:")
139
+ : ("http:" as const));
140
+ const serverHttpUri = `${serverHttpProtocol}//${serverHost}${serverPort === 443 ? "" : `:${serverPort}`}/api`;
141
+ const serverWsProtocol = serverHttpProtocol === "http:" ? "ws:" : "wss:";
142
+ const serverWsUri = `${serverWsProtocol}//${serverHost}${serverPort === 443 ? "" : `:${serverPort}`}`;
143
+
144
+ const env: ClientEnv = {
145
+ ...baseEnv,
146
+ side,
147
+ renderMode,
148
+ websocket: true,
149
+ clientHost,
150
+ clientPort,
151
+ clientHttpProtocol,
152
+ clientHttpUri,
153
+ serverHost,
154
+ serverPort,
155
+ serverHttpProtocol,
156
+ serverHttpUri,
157
+ serverWsProtocol,
158
+ serverWsUri,
159
+ } as const;
160
+ cachedEnv = env;
161
+ return env;
162
+ };
package/base/index.ts ADDED
@@ -0,0 +1,6 @@
1
+ export * from "./base";
2
+ export * from "./baseEnv";
3
+ export * from "./primitiveRegistry";
4
+ export * from "./symbols";
5
+ export * from "./types";
6
+ export * from "./utils";
@@ -0,0 +1,342 @@
1
+ import dayjsLib, { type Dayjs } from "dayjs";
2
+
3
+ import type { Cls } from "./types";
4
+
5
+ export type { Dayjs };
6
+
7
+ /** Shared dayjs factory re-export used by Akan documents, services, stores, and UI. */
8
+ export const dayjs = dayjsLib;
9
+
10
+ /** Registry that maps Akan primitive scalar names to their runtime scalar classes. */
11
+ export class PrimitiveRegistry {
12
+ static readonly #namePrimitiveMap = new Map<string, typeof PrimitiveScalar>();
13
+ static readonly #primitiveNameMap = new Map<typeof PrimitiveScalar, string>();
14
+ static register(scalar: typeof PrimitiveScalar, { overwrite = false } = {}) {
15
+ if (
16
+ !overwrite &&
17
+ (PrimitiveRegistry.#namePrimitiveMap.has(scalar.refName) || PrimitiveRegistry.#primitiveNameMap.has(scalar))
18
+ )
19
+ throw new Error(`Scalar ${scalar.refName} already registered`);
20
+ PrimitiveRegistry.#namePrimitiveMap.set(scalar.refName, scalar);
21
+ PrimitiveRegistry.#primitiveNameMap.set(scalar, scalar.refName);
22
+ }
23
+ static get(name: string): typeof PrimitiveScalar {
24
+ const scalar = PrimitiveRegistry.#namePrimitiveMap.get(name);
25
+ if (!scalar) throw new Error(`Scalar ${name} not found`);
26
+ return scalar;
27
+ }
28
+ static getName(scalar: typeof PrimitiveScalar): string {
29
+ const name = PrimitiveRegistry.#primitiveNameMap.get(scalar);
30
+ if (!name) throw new Error(`Scalar ${scalar} not found`);
31
+ return name;
32
+ }
33
+ static has(modelRef: Cls): boolean {
34
+ return PrimitiveRegistry.#primitiveNameMap.has(modelRef as typeof PrimitiveScalar);
35
+ }
36
+ static hasName(name: string): boolean {
37
+ return PrimitiveRegistry.#namePrimitiveMap.has(name);
38
+ }
39
+ static getNames(): string[] {
40
+ return [...PrimitiveRegistry.#namePrimitiveMap.keys()];
41
+ }
42
+ static getAll(): (typeof PrimitiveScalar)[] {
43
+ return [...PrimitiveRegistry.#namePrimitiveMap.values()];
44
+ }
45
+ }
46
+
47
+ export const PRIMITIVE_SERVER_VALUE = Symbol.for("PRIMITIVE_SERVER_VALUE");
48
+ export const PRIMITIVE_CLIENT_VALUE = Symbol.for("PRIMITIVE_CLIENT_VALUE");
49
+ export const PRIMITIVE_DEFAULT_VALUE = Symbol.for("PRIMITIVE_DEFAULT_VALUE");
50
+ export const PRIMITIVE_EXAMPLE_VALUE = Symbol.for("PRIMITIVE_EXAMPLE_VALUE");
51
+ export type PrimitiveValue = string | number | boolean | Dayjs | Date | null | undefined;
52
+ export class PrimitiveScalar {
53
+ static refName: string;
54
+ static [PRIMITIVE_SERVER_VALUE]: unknown;
55
+ static [PRIMITIVE_CLIENT_VALUE]: unknown;
56
+ static [PRIMITIVE_DEFAULT_VALUE]: unknown = null;
57
+ static [PRIMITIVE_EXAMPLE_VALUE]: unknown = null;
58
+
59
+ static validate(value: PrimitiveValue): boolean {
60
+ return true;
61
+ }
62
+ static parseValue(value: PrimitiveValue): PrimitiveValue {
63
+ return value;
64
+ }
65
+ static serializeValue(value: PrimitiveValue): PrimitiveValue {
66
+ return value;
67
+ }
68
+ static _parse(
69
+ this: typeof PrimitiveScalar,
70
+ input: PrimitiveValue,
71
+ { optional = false }: { optional?: boolean } = {},
72
+ ): PrimitiveValue {
73
+ if (optional && (input === null || input === undefined)) return undefined;
74
+
75
+ const value = this.parseValue(input);
76
+
77
+ this._checkValue(value, { optional });
78
+ return value;
79
+ }
80
+ static _serialize(
81
+ this: typeof PrimitiveScalar,
82
+ value: PrimitiveValue,
83
+ { optional = false }: { optional?: boolean } = {},
84
+ ): PrimitiveValue {
85
+
86
+ this._checkValue(value, { optional });
87
+ if (value === null || value === undefined) return undefined;
88
+
89
+ return this.serializeValue(value);
90
+ }
91
+ static _checkValue(
92
+ this: typeof PrimitiveScalar,
93
+ value: PrimitiveValue,
94
+ { optional = false }: { optional?: boolean } = {},
95
+ ): void {
96
+ if (value === null || value === undefined) {
97
+ if (optional) return;
98
+ else throw new Error(`Required ${this.refName} value: ${value}`);
99
+ }
100
+
101
+ if (!this.validate(value)) throw new Error(`Invalid ${this.refName} value: ${value}`);
102
+ }
103
+ }
104
+
105
+ /** Integer primitive scalar. Accepts safe integer numbers after parsing. */
106
+ export class Int extends PrimitiveScalar {
107
+ static override refName: "Int" = "Int";
108
+ static override [PRIMITIVE_SERVER_VALUE]: number;
109
+ static override [PRIMITIVE_CLIENT_VALUE]: number;
110
+ static override [PRIMITIVE_DEFAULT_VALUE]: number = 0;
111
+ static override [PRIMITIVE_EXAMPLE_VALUE]: number = 0;
112
+
113
+ static override validate(value: string | number): boolean {
114
+ return typeof value === "number" && Number.isSafeInteger(value);
115
+ }
116
+ static override parseValue(input: string | number): number {
117
+ return Number(input);
118
+ }
119
+ static override serializeValue(value: number): number {
120
+ return value;
121
+ }
122
+ }
123
+ PrimitiveRegistry.register(Int);
124
+
125
+ /** Floating point primitive scalar. Accepts finite numbers after parsing. */
126
+ export class Float extends PrimitiveScalar {
127
+ static override refName: "Float" = "Float";
128
+ static override [PRIMITIVE_SERVER_VALUE]: number;
129
+ static override [PRIMITIVE_CLIENT_VALUE]: number;
130
+ static override [PRIMITIVE_DEFAULT_VALUE]: number = 0;
131
+ static override [PRIMITIVE_EXAMPLE_VALUE]: number = 0;
132
+
133
+ static override validate(value: string | number): boolean {
134
+ return typeof value === "number" && Number.isFinite(value);
135
+ }
136
+ static override parseValue(input: string | number): number {
137
+ return Number(input);
138
+ }
139
+ static override serializeValue(value: number): number {
140
+ return value;
141
+ }
142
+ }
143
+ PrimitiveRegistry.register(Float);
144
+
145
+ /** 24-character hexadecimal id primitive used by Akan document and signal models. */
146
+ export class ID extends PrimitiveScalar {
147
+ static override refName: "ID" = "ID";
148
+ static override [PRIMITIVE_SERVER_VALUE]: string;
149
+ static override [PRIMITIVE_CLIENT_VALUE]: string;
150
+ static override [PRIMITIVE_DEFAULT_VALUE]: string = "";
151
+ static override [PRIMITIVE_EXAMPLE_VALUE]: string = "1234567890abcdef12345678";
152
+
153
+ static override validate(value: string): boolean {
154
+ if (typeof value !== "string") return false;
155
+ return /^[0-9a-fA-F]{24}$/.test(value);
156
+ }
157
+ static override parseValue(input: string): string {
158
+ return String(input);
159
+ }
160
+ static override serializeValue(value: string): string {
161
+ return String(value);
162
+ }
163
+ static override _checkValue(value: PrimitiveValue, options: { optional?: boolean } = {}): void {
164
+ if (value === ID[PRIMITIVE_DEFAULT_VALUE]) return;
165
+
166
+ super._checkValue(value, options);
167
+ }
168
+ }
169
+ PrimitiveRegistry.register(ID);
170
+
171
+ /** Open object primitive for intentionally flexible payloads or metadata blobs. */
172
+ export class Any extends PrimitiveScalar {
173
+ static override refName: "Any" = "Any";
174
+ static override [PRIMITIVE_DEFAULT_VALUE]: object | null = null;
175
+ static override [PRIMITIVE_EXAMPLE_VALUE]: object = {};
176
+ }
177
+ PrimitiveRegistry.register(Any);
178
+
179
+ export class Upload extends PrimitiveScalar {
180
+ static override refName: "Upload" = "Upload";
181
+ static override [PRIMITIVE_SERVER_VALUE]: File;
182
+ static override [PRIMITIVE_CLIENT_VALUE]: File;
183
+ static override [PRIMITIVE_DEFAULT_VALUE]: File | null = null;
184
+ static override [PRIMITIVE_EXAMPLE_VALUE] = "FileUpload";
185
+ __TEMP_TYPE__: "Upload" = "Upload";
186
+ }
187
+ PrimitiveRegistry.register(Upload);
188
+
189
+ declare global {
190
+ interface StringConstructor {
191
+ refName: "String";
192
+ [PRIMITIVE_SERVER_VALUE]: string;
193
+ [PRIMITIVE_CLIENT_VALUE]: string;
194
+ [PRIMITIVE_DEFAULT_VALUE]: string;
195
+ [PRIMITIVE_EXAMPLE_VALUE]: string;
196
+ validate(value: string): boolean;
197
+ parseValue(input: string): string;
198
+ serializeValue(value: string): string;
199
+ _parse(input: string): string;
200
+ _serialize(value: string): string;
201
+ _checkValue(value: string): void;
202
+ }
203
+ interface BooleanConstructor {
204
+ refName: "Boolean";
205
+ [PRIMITIVE_SERVER_VALUE]: boolean;
206
+ [PRIMITIVE_CLIENT_VALUE]: boolean;
207
+ [PRIMITIVE_DEFAULT_VALUE]: boolean;
208
+ [PRIMITIVE_EXAMPLE_VALUE]: boolean;
209
+ validate(value: boolean): boolean;
210
+ parseValue(input: boolean): boolean;
211
+ serializeValue(value: boolean): boolean;
212
+ _parse(input: boolean): boolean;
213
+ _serialize(value: boolean): boolean;
214
+ _checkValue(value: boolean): void;
215
+ }
216
+ interface DateConstructor {
217
+ refName: "Date";
218
+ [PRIMITIVE_SERVER_VALUE]: Dayjs;
219
+ [PRIMITIVE_CLIENT_VALUE]: Dayjs;
220
+ [PRIMITIVE_DEFAULT_VALUE]: Dayjs;
221
+ [PRIMITIVE_EXAMPLE_VALUE]: string;
222
+ validate(value: Date): boolean;
223
+ parseValue(input: Date): Dayjs;
224
+ serializeValue(value: Dayjs | Date): Date;
225
+ _parse(input: Date): Dayjs;
226
+ _serialize(value: Dayjs | Date): Date;
227
+ _checkValue(value: Date): void;
228
+ }
229
+ }
230
+
231
+ const scalarPrimitiveStatics = {
232
+ _parse(
233
+ this: typeof PrimitiveScalar,
234
+ input: PrimitiveValue,
235
+ { optional = false }: { optional?: boolean } = {},
236
+ ): PrimitiveValue {
237
+ if (optional && (input === null || input === undefined)) return undefined;
238
+ const value = this.parseValue(input);
239
+ this._checkValue(value, { optional });
240
+ return value;
241
+ },
242
+ _serialize(
243
+ this: typeof PrimitiveScalar,
244
+ value: PrimitiveValue,
245
+ { optional = false }: { optional?: boolean } = {},
246
+ ): PrimitiveValue {
247
+ if (optional && value === "") return undefined;
248
+ if (this.refName === "Date" && optional && typeof value === "string" && Number.isNaN(new Date(value).getTime()))
249
+ return undefined;
250
+ if (this.refName === "Date" && optional && value instanceof Date && Number.isNaN(value.getTime())) return undefined;
251
+ if (
252
+ optional &&
253
+ value &&
254
+ typeof value === "object" &&
255
+ "isValid" in value &&
256
+ !(value as { isValid: () => boolean }).isValid()
257
+ )
258
+ return undefined;
259
+ this._checkValue(value, { optional });
260
+ if (value === null || value === undefined) return undefined;
261
+ return this.serializeValue(value);
262
+ },
263
+ _checkValue(
264
+ this: typeof PrimitiveScalar,
265
+ value: PrimitiveValue,
266
+ { optional = false }: { optional?: boolean } = {},
267
+ ): void {
268
+ if (value === null || value === undefined) {
269
+ if (optional) return;
270
+ else throw new Error(`Required ${this.refName} value: ${value}`);
271
+ }
272
+ if (optional && value === "") return;
273
+ if (this.refName === "Date" && optional && typeof value === "string" && Number.isNaN(new Date(value).getTime()))
274
+ return;
275
+ if (this.refName === "Date" && optional && value instanceof Date && Number.isNaN(value.getTime())) return;
276
+ if (
277
+ optional &&
278
+ value &&
279
+ typeof value === "object" &&
280
+ "isValid" in value &&
281
+ !(value as { isValid: () => boolean }).isValid()
282
+ )
283
+ return;
284
+ if (!this.validate(value)) throw new Error(`Invalid ${this.refName} value: ${value}`);
285
+ },
286
+ };
287
+
288
+ Object.assign(String, scalarPrimitiveStatics, {
289
+ refName: "String",
290
+ [PRIMITIVE_DEFAULT_VALUE]: "",
291
+ [PRIMITIVE_EXAMPLE_VALUE]: "String",
292
+ validate(value: string) {
293
+ return typeof value === "string";
294
+ },
295
+ parseValue(input: string) {
296
+ return String(input);
297
+ },
298
+ serializeValue(value: string) {
299
+ return String(value);
300
+ },
301
+ });
302
+ PrimitiveRegistry.register(String);
303
+
304
+ Object.assign(Boolean, {
305
+ ...scalarPrimitiveStatics,
306
+ refName: "Boolean",
307
+ [PRIMITIVE_DEFAULT_VALUE]: false,
308
+ [PRIMITIVE_EXAMPLE_VALUE]: true,
309
+ validate(value: boolean) {
310
+ return typeof value === "boolean";
311
+ },
312
+ parseValue(input: boolean) {
313
+ return Boolean(input);
314
+ },
315
+ serializeValue(value: boolean) {
316
+ return Boolean(value);
317
+ },
318
+ });
319
+ PrimitiveRegistry.register(Boolean);
320
+
321
+ Object.assign(Date, {
322
+ ...scalarPrimitiveStatics,
323
+ refName: "Date",
324
+ [PRIMITIVE_DEFAULT_VALUE]: dayjs(new Date(-1)),
325
+ [PRIMITIVE_EXAMPLE_VALUE]: dayjs(new Date().toISOString()),
326
+ validate(value: Date | string | number) {
327
+ const date = new Date(value);
328
+ if (Number.isNaN(date.getTime())) return false;
329
+ return true;
330
+ },
331
+ parseValue(input: Date | string | number | Dayjs) {
332
+ return dayjs(input);
333
+ },
334
+ serializeValue(value: Dayjs | Date | string | number) {
335
+ if (value instanceof Date) return value;
336
+ if (typeof value === "string" || typeof value === "number") return dayjs(value).toDate();
337
+ return value.toDate();
338
+ },
339
+ });
340
+ PrimitiveRegistry.register(Date);
341
+
342
+ export type DefaultPrimitiveName = "String" | "Boolean" | "Date" | "Int" | "Float" | "ID" | "Any" | "Upload";