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,374 @@
1
+ import {
2
+ arraiedModel,
3
+ type Cls,
4
+ type Dayjs,
5
+ type EnumInstance,
6
+ getNonArrayModel,
7
+ isEnum,
8
+ type PromiseOrObject,
9
+ } from "akanjs/base";
10
+ import type {
11
+ ConstantFieldType,
12
+ ConstantFieldTypeInput,
13
+ DocumentModel,
14
+ FieldToValue,
15
+ ParamFieldType,
16
+ PlainTypeToFieldType,
17
+ PurifiedModel,
18
+ } from "akanjs/constant";
19
+ import type { ServiceModel } from "akanjs/service";
20
+ import type { InternalArgCls } from "./internalArg";
21
+ import type { ArgType, SignalOption } from "./types";
22
+
23
+ export type EndpointType = "query" | "mutation" | "pubsub" | "message";
24
+
25
+ export interface EndpointArgProps<Optional extends boolean = false> {
26
+ nullable?: Optional;
27
+ example?: string | number | boolean | Dayjs;
28
+ }
29
+ export interface InternalArgProps<Optional extends boolean = false> {
30
+ nullable?: Optional;
31
+ }
32
+
33
+ export interface ReturnInfo<Returns extends ConstantFieldTypeInput = any, Nullable extends boolean = false> {
34
+ returnRef: Returns;
35
+ arrDepth: number;
36
+ enum?: EnumInstance;
37
+ nullable?: Nullable;
38
+ }
39
+
40
+ export interface ArgInfo<ArgProps = any> {
41
+ type: ArgType;
42
+ name: string;
43
+ argRef: ConstantFieldType;
44
+ arrDepth: number;
45
+ enum?: EnumInstance;
46
+ option?: ArgProps;
47
+ }
48
+ export interface InternalArgInfo<Optional extends boolean = false> {
49
+ argRef: InternalArgCls;
50
+ option?: InternalArgProps<Optional>;
51
+ }
52
+ export class EndpointInfo<
53
+ ReqType extends EndpointType = EndpointType,
54
+ Srvs extends { [key: string]: any } = { [key: string]: any },
55
+ ArgNames extends string[] = any,
56
+ Args extends any[] = any,
57
+ InternalArgs extends any[] = any,
58
+ ServerArgs extends any[] = any,
59
+ Returns extends ConstantFieldTypeInput = ConstantFieldTypeInput,
60
+ ClientReturns = never,
61
+ ServerReturns = never,
62
+ Nullable extends boolean = boolean,
63
+ > {
64
+ readonly type: ReqType;
65
+ readonly argNames: ArgNames = [] as unknown as ArgNames;
66
+ readonly args: ArgInfo<EndpointArgProps<boolean>>[] = [];
67
+ readonly internalArgs: InternalArgInfo<boolean>[] = [];
68
+ readonly returns: ReturnInfo<Returns, Nullable>;
69
+ readonly signalOption: SignalOption<Returns, Nullable, any>;
70
+ execFn: ((...args: [...ServerArgs, ...InternalArgs]) => PromiseOrObject<any>) | null = null;
71
+ static getArgInfo(
72
+ type: ArgType,
73
+ name: string,
74
+ arg: ConstantFieldTypeInput,
75
+ option?: EndpointArgProps<boolean>,
76
+ ): ArgInfo {
77
+ const [singleArg, arrDepth] = getNonArrayModel(arg as Cls);
78
+ const isArgEnum = isEnum(singleArg);
79
+ const argRef = isArgEnum ? (singleArg as EnumInstance).type : singleArg;
80
+ return {
81
+ type,
82
+ name,
83
+ argRef: argRef as ConstantFieldType,
84
+ arrDepth,
85
+ enum: isArgEnum ? (singleArg as EnumInstance) : undefined,
86
+ option,
87
+ };
88
+ }
89
+ static getReturnInfo<
90
+ Returns extends ConstantFieldTypeInput = ConstantFieldTypeInput,
91
+ Nullable extends boolean = false,
92
+ >(modelRef: Returns, signalOption: SignalOption<Returns, Nullable> = {}): ReturnInfo<Returns, Nullable> {
93
+ const [singleReturn, arrDepth] = getNonArrayModel(modelRef as Cls);
94
+ const isReturnEnum = isEnum(singleReturn);
95
+ const returnRef = isReturnEnum ? (singleReturn as EnumInstance).type : singleReturn;
96
+ return {
97
+ returnRef: returnRef as Returns,
98
+ arrDepth,
99
+ enum: isReturnEnum ? (singleReturn as EnumInstance) : undefined,
100
+ nullable: (signalOption.nullable ?? false) as Nullable,
101
+ };
102
+ }
103
+
104
+ constructor(type: ReqType, returnRef: Returns, signalOption: SignalOption<Returns, Nullable> = {}) {
105
+ this.type = type;
106
+ this.returns = EndpointInfo.getReturnInfo(returnRef, signalOption);
107
+ this.signalOption = signalOption;
108
+ }
109
+ param<
110
+ ArgName extends string,
111
+ Arg extends ParamFieldType,
112
+ _ClientArg = FieldToValue<Arg>,
113
+ _ServerArg = DocumentModel<_ClientArg>,
114
+ >(name: string, arg: Arg, option?: Omit<EndpointArgProps, "nullable">) {
115
+ if (this.execFn) throw new Error("Query function is already set");
116
+ else if (this.args.at(-1)?.option?.nullable) throw new Error("Last argument is nullable");
117
+ this.argNames.push(name);
118
+ this.args.push(EndpointInfo.getArgInfo("param", name, arg, option));
119
+ return this as unknown as EndpointInfo<
120
+ ReqType,
121
+ Srvs,
122
+ [...ArgNames, ArgName],
123
+ [...Args, arg: _ClientArg],
124
+ InternalArgs,
125
+ [...ServerArgs, arg: _ServerArg],
126
+ Returns,
127
+ ClientReturns,
128
+ ServerReturns,
129
+ Nullable
130
+ >;
131
+ }
132
+ body<
133
+ ArgName extends string,
134
+ ExplicitType = unknown,
135
+ Arg extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>,
136
+ Optional extends boolean = false,
137
+ _ArgType = unknown extends ExplicitType ? FieldToValue<Arg> : ExplicitType,
138
+ _ClientArg = PurifiedModel<_ArgType>,
139
+ _ServerArg = DocumentModel<_ArgType>,
140
+ >(name: ArgName, arg: Arg, option?: EndpointArgProps<Optional>) {
141
+ if (this.execFn) throw new Error("Query function is already set");
142
+ this.argNames.push(name);
143
+ this.args.push(EndpointInfo.getArgInfo("body", name, arg, option));
144
+ return this as unknown as EndpointInfo<
145
+ ReqType,
146
+ Srvs,
147
+ [...ArgNames, ArgName],
148
+ Optional extends true ? [...Args, arg?: _ClientArg | null] : [...Args, arg: _ClientArg],
149
+ InternalArgs,
150
+ [...ServerArgs, arg: _ServerArg | (Optional extends true ? undefined : never)],
151
+ Returns,
152
+ ClientReturns,
153
+ ServerReturns,
154
+ Nullable
155
+ >;
156
+ }
157
+ room<
158
+ ArgName extends string,
159
+ ExplicitType = unknown,
160
+ Arg extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>,
161
+ _ArgType = unknown extends ExplicitType ? FieldToValue<Arg> : ExplicitType,
162
+ _ClientArg = PurifiedModel<_ArgType>,
163
+ _ServerArg = DocumentModel<_ArgType>,
164
+ >(name: string, arg: Arg, option?: Omit<EndpointArgProps, "nullable">) {
165
+ if (this.execFn) throw new Error("Query function is already set");
166
+ else if (this.args.at(-1)?.option?.nullable) throw new Error("Last argument is nullable");
167
+ this.argNames.push(name);
168
+ this.args.push(EndpointInfo.getArgInfo("room", name, arg, option));
169
+ return this as unknown as EndpointInfo<
170
+ ReqType,
171
+ Srvs,
172
+ [...ArgNames, ArgName],
173
+ [...Args, arg: _ClientArg],
174
+ InternalArgs,
175
+ [...ServerArgs, arg: _ServerArg],
176
+ Returns,
177
+ ClientReturns,
178
+ ServerReturns,
179
+ Nullable
180
+ >;
181
+ }
182
+ msg<
183
+ ArgName extends string,
184
+ ExplicitType = unknown,
185
+ Arg extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>,
186
+ Optional extends boolean = false,
187
+ _ArgType = unknown extends ExplicitType ? FieldToValue<Arg> : ExplicitType,
188
+ _ClientArg = PurifiedModel<_ArgType>,
189
+ _ServerArg = DocumentModel<_ArgType>,
190
+ >(name: string, arg: Arg, option?: EndpointArgProps<Optional>) {
191
+ if (this.execFn) throw new Error("Query function is already set");
192
+ else if (this.args.at(-1)?.option?.nullable) throw new Error("Last argument is nullable");
193
+ this.argNames.push(name);
194
+ this.args.push(EndpointInfo.getArgInfo("msg", name, arg, option));
195
+ return this as unknown as EndpointInfo<
196
+ ReqType,
197
+ Srvs,
198
+ [...ArgNames, ArgName],
199
+ Optional extends true ? [...Args, arg?: _ClientArg | null] : [...Args, arg: _ClientArg],
200
+ InternalArgs,
201
+ [...ServerArgs, arg: _ServerArg | (Optional extends true ? undefined : never)],
202
+ Returns,
203
+ ClientReturns,
204
+ ServerReturns,
205
+ Nullable
206
+ >;
207
+ }
208
+ search<
209
+ ArgName extends string,
210
+ ExplicitType = unknown,
211
+ Arg extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>,
212
+ _ArgType = unknown extends ExplicitType ? FieldToValue<Arg> : ExplicitType,
213
+ _ClientArg = PurifiedModel<_ArgType>,
214
+ _ServerArg = DocumentModel<_ArgType>,
215
+ >(name: string, arg: Arg, option?: Omit<EndpointArgProps, "nullable">) {
216
+ if (this.execFn) throw new Error("Query function is already set");
217
+ this.argNames.push(name);
218
+ this.args.push(EndpointInfo.getArgInfo("search", name, arg, { ...option, nullable: true }));
219
+ return this as unknown as EndpointInfo<
220
+ ReqType,
221
+ Srvs,
222
+ [...ArgNames, ArgName],
223
+ [...Args, arg?: _ClientArg | null],
224
+ InternalArgs,
225
+ [...ServerArgs, arg: _ServerArg | undefined],
226
+ Returns,
227
+ ClientReturns,
228
+ ServerReturns,
229
+ Nullable
230
+ >;
231
+ }
232
+ _addArgs(args: ArgInfo<EndpointArgProps<boolean>>[]) {
233
+ for (const arg of args) {
234
+ const argRef = arraiedModel(arg.enum ?? arg.argRef, arg.arrDepth);
235
+ switch (arg.type) {
236
+ case "param":
237
+ this.param(arg.name, argRef as ParamFieldType, arg.option);
238
+ break;
239
+ case "body":
240
+ this.body(arg.name, argRef, arg.option);
241
+ break;
242
+ case "search":
243
+ this.search(arg.name, argRef, arg.option);
244
+ break;
245
+ case "room":
246
+ this.room(arg.name, argRef, arg.option);
247
+ break;
248
+ case "msg":
249
+ this.msg(arg.name, argRef, arg.option);
250
+ break;
251
+ default:
252
+ throw new Error(`Invalid argument type: ${arg.type}`);
253
+ }
254
+ }
255
+ return this;
256
+ }
257
+ with<ArgType, Optional extends boolean = false>(
258
+ argRef: InternalArgCls<ArgType>,
259
+ option?: InternalArgProps<Optional>,
260
+ ) {
261
+ if (this.execFn) throw new Error("Query function is already set");
262
+ this.internalArgs.push({ argRef, option });
263
+ return this as unknown as EndpointInfo<
264
+ ReqType,
265
+ Srvs,
266
+ ArgNames,
267
+ Args,
268
+ [...InternalArgs, arg: NonNullable<ArgType> | (Optional extends true ? null : never)],
269
+ ServerArgs,
270
+ Returns,
271
+ ClientReturns,
272
+ ServerReturns,
273
+ Nullable
274
+ >;
275
+ }
276
+ _addInternalArgs(args: InternalArgInfo<boolean>[]) {
277
+ for (const arg of args) this.with(arg.argRef, arg.option);
278
+ return this;
279
+ }
280
+ exec<
281
+ ExecFn extends (
282
+ this: Srvs,
283
+ ...args: [...ServerArgs, ...InternalArgs]
284
+ ) => ReqType extends "pubsub"
285
+ ? Promise<void> | void
286
+ : PromiseOrObject<DocumentModel<FieldToValue<Returns>> | (Nullable extends true ? null | undefined : never)>,
287
+ >(
288
+ execFn: ExecFn,
289
+ ): EndpointInfo<
290
+ ReqType,
291
+ Srvs,
292
+ ArgNames,
293
+ Args,
294
+ InternalArgs,
295
+ ServerArgs,
296
+ Returns,
297
+ FieldToValue<Returns>,
298
+ ReturnType<ExecFn>,
299
+ Nullable
300
+ > {
301
+ if (this.execFn) throw new Error("Query function is already set");
302
+ this.execFn = execFn;
303
+ return this as unknown as EndpointInfo<
304
+ ReqType,
305
+ Srvs,
306
+ ArgNames,
307
+ Args,
308
+ InternalArgs,
309
+ ServerArgs,
310
+ Returns,
311
+ FieldToValue<Returns>,
312
+ ReturnType<ExecFn>,
313
+ Nullable
314
+ >;
315
+ }
316
+
317
+ getPath(key: string) {
318
+ if (this.signalOption.path) return `${this.signalOption.path.startsWith("/") ? "" : "/"}${this.signalOption.path}`;
319
+ else
320
+ return `/${[
321
+ this.signalOption.name ?? key,
322
+ ...this.args.filter((arg) => arg.type === "param").map((arg) => `:${arg.name}`),
323
+ ].join("/")}`;
324
+ }
325
+ }
326
+
327
+ export type BuildEndpoint<SrvModule extends ServiceModel = ServiceModel> = {
328
+ query: <Returns extends ConstantFieldTypeInput = ConstantFieldTypeInput, Nullable extends boolean = false>(
329
+ returnRef: Returns,
330
+ signalOption?: SignalOption<Returns, Nullable>,
331
+ ) => EndpointInfo<"query", SrvModule["srvMap"], [], [], [], [], Returns, never, never, Nullable>;
332
+ mutation: <Returns extends ConstantFieldTypeInput = ConstantFieldTypeInput, Nullable extends boolean = false>(
333
+ returnRef: Returns,
334
+ signalOption?: SignalOption<Returns, Nullable>,
335
+ ) => EndpointInfo<"mutation", SrvModule["srvMap"], [], [], [], [], Returns, never, never, Nullable>;
336
+ pubsub: <Returns extends ConstantFieldTypeInput = ConstantFieldTypeInput, Nullable extends boolean = false>(
337
+ returnRef: Returns,
338
+ signalOption?: SignalOption<Returns, Nullable>,
339
+ ) => EndpointInfo<"pubsub", SrvModule["srvMap"], [], [], [], [], Returns, never, never, Nullable>;
340
+ message: <Returns extends ConstantFieldTypeInput = ConstantFieldTypeInput, Nullable extends boolean = false>(
341
+ returnRef: Returns,
342
+ signalOption?: SignalOption<Returns, Nullable>,
343
+ ) => EndpointInfo<"message", SrvModule["srvMap"], [], [], [], [], Returns, never, never, Nullable>;
344
+ };
345
+
346
+ export const buildEndpoint = {
347
+ query: (returnRef: Cls, signalOption?: SignalOption<Cls>) => new EndpointInfo("query", returnRef, signalOption),
348
+ mutation: (returnRef: Cls, signalOption?: SignalOption<Cls>) => new EndpointInfo("mutation", returnRef, signalOption),
349
+ pubsub: (returnRef: Cls, signalOption?: SignalOption<Cls>) => new EndpointInfo("pubsub", returnRef, signalOption),
350
+ message: (returnRef: Cls, signalOption?: SignalOption<Cls>) => new EndpointInfo("message", returnRef, signalOption),
351
+ } as unknown as BuildEndpoint<any>;
352
+
353
+ export type EndpointBuilder<SrvModule extends ServiceModel = ServiceModel> = (builder: BuildEndpoint<SrvModule>) => {
354
+ [key: string]: EndpointInfo;
355
+ };
356
+
357
+ export type EndpInfoReqType<E> =
358
+ E extends EndpointInfo<infer T, any, any, any, any, any, any, any, any, any> ? T : never;
359
+ export type EndpInfoSrvs<E> = E extends EndpointInfo<any, infer S, any, any, any, any, any, any, any, any> ? S : never;
360
+ export type EndpInfoArgNames<E> =
361
+ E extends EndpointInfo<any, any, infer N, any, any, any, any, any, any, any> ? N : never;
362
+ export type EndpInfoArgs<E> = E extends EndpointInfo<any, any, any, infer A, any, any, any, any, any, any> ? A : never;
363
+ export type EndpInfoInternalArgs<E> =
364
+ E extends EndpointInfo<any, any, any, any, infer I, any, any, any, any, any> ? I : never;
365
+ export type EndpInfoServerArgs<E> =
366
+ E extends EndpointInfo<any, any, any, any, any, infer S, any, any, any, any> ? S : never;
367
+ export type EndpInfoReturnRef<E> =
368
+ E extends EndpointInfo<any, any, any, any, any, any, infer R, any, any, any> ? R : never;
369
+ export type EndpInfoClientReturns<E> =
370
+ E extends EndpointInfo<any, any, any, any, any, any, any, infer R, any, any> ? R : never;
371
+ export type EndpInfoServerReturns<E> =
372
+ E extends EndpointInfo<any, any, any, any, any, any, any, any, infer R, any> ? R : never;
373
+ export type EndpInfoNullable<E> =
374
+ E extends EndpointInfo<any, any, any, any, any, any, any, any, any, infer N> ? N : never;
@@ -0,0 +1,50 @@
1
+ export class Exception extends Error {
2
+ constructor(
3
+ public readonly statusCode: number,
4
+ message: string,
5
+ public readonly details?: unknown,
6
+ public readonly data?: unknown,
7
+ ) {
8
+ super(message);
9
+ this.name = this.constructor.name;
10
+ }
11
+
12
+ toJSON() {
13
+ return {
14
+ error: this.message,
15
+ statusCode: this.statusCode,
16
+ ...(this.details !== undefined ? { details: this.details } : {}),
17
+ ...(this.data !== undefined ? { data: this.data } : {}),
18
+ };
19
+ }
20
+ static BadRequest = class BadRequestException extends Exception {
21
+ constructor(message = "Bad Request", details?: unknown) {
22
+ super(400, message, details);
23
+ }
24
+ };
25
+ static Unauthorized = class UnauthorizedException extends Exception {
26
+ constructor(message = "Unauthorized", details?: unknown) {
27
+ super(401, message, details);
28
+ }
29
+ };
30
+ static Forbidden = class ForbiddenException extends Exception {
31
+ constructor(message = "Forbidden", details?: unknown) {
32
+ super(403, message, details);
33
+ }
34
+ };
35
+ static NotFound = class NotFoundException extends Exception {
36
+ constructor(message = "Not Found", details?: unknown) {
37
+ super(404, message, details);
38
+ }
39
+ };
40
+ static Conflict = class ConflictException extends Exception {
41
+ constructor(message = "Conflict", details?: unknown) {
42
+ super(409, message, details);
43
+ }
44
+ };
45
+ static Error = class InternalServerErrorException extends Exception {
46
+ constructor(message = "Internal Server Error", details?: unknown) {
47
+ super(500, message, details);
48
+ }
49
+ };
50
+ }
@@ -0,0 +1,18 @@
1
+ import type { Cls } from "akanjs/base";
2
+ import type { SignalContext } from "./signalContext";
3
+
4
+ export interface Guard {
5
+ canPass(context: SignalContext): boolean;
6
+ }
7
+
8
+ export type GuardCls<Name extends string = string> = Cls<Guard, { readonly name: Name }>;
9
+
10
+ /** Creates a named guard base class for signal access checks. */
11
+ export const guard = <T extends string>(name: T): GuardCls<T> => {
12
+ return class Guard {
13
+ static name = name;
14
+ canPass(context: SignalContext): boolean {
15
+ return true;
16
+ }
17
+ };
18
+ };
@@ -0,0 +1,16 @@
1
+ import type { Guard } from "./guard";
2
+ import type { SignalContext } from "./signalContext";
3
+
4
+ export class Public implements Guard {
5
+ static name = "Public";
6
+ canPass(context: SignalContext): boolean {
7
+ return true;
8
+ }
9
+ }
10
+
11
+ export class None implements Guard {
12
+ static name = "None";
13
+ canPass(context: SignalContext): boolean {
14
+ return false;
15
+ }
16
+ }
@@ -0,0 +1,18 @@
1
+ export * from "./base.signal";
2
+ export * from "./endpoint";
3
+ export * from "./endpointInfo";
4
+ export * from "./exception";
5
+ export * from "./guard";
6
+ export * from "./guards";
7
+ export * from "./intercept";
8
+ export * from "./internal";
9
+ export * from "./internalArg";
10
+ export * from "./internalInfo";
11
+ export * from "./middleware";
12
+ export * from "./serializer";
13
+ export * from "./serverSignal";
14
+ export * from "./signalContext";
15
+ export * from "./signalRegistry";
16
+ export * from "./slice";
17
+ export * from "./sliceInfo";
18
+ export * from "./types";
@@ -0,0 +1,39 @@
1
+ import { type Cls, INJECT_META } from "akanjs/base";
2
+ import { Logger } from "akanjs/common";
3
+ import { type ExtractInjectInfoObject, type InjectBuilder, type InjectInfo, injectionBuilder } from "akanjs/service";
4
+ import type { SignalContext } from "./signalContext";
5
+
6
+ export type InterceptorCls<Methods = {}, InjectMap extends { [key: string]: InjectInfo } = {}> = Cls<
7
+ Methods &
8
+ ExtractInjectInfoObject<InjectMap> & {
9
+ readonly logger: Logger;
10
+ onInit(): Promise<void>;
11
+ onDestroy(): Promise<void>;
12
+ intercept(context: SignalContext): AsyncGenerator<unknown> | Promise<unknown>;
13
+ },
14
+ { readonly [INJECT_META]: InjectMap; readonly refName: string }
15
+ >;
16
+
17
+ export function intercept<Name extends string>(name: Name): InterceptorCls;
18
+
19
+ export function intercept<Name extends string, Injection extends InjectBuilder<"use" | "env" | "memory">>(
20
+ refName: Name,
21
+ injectBuilder: Injection,
22
+ ): InterceptorCls<{}, ReturnType<Injection>>;
23
+
24
+ export function intercept(refName: string, injectBuilder?: InjectBuilder) {
25
+ const injectInfoMap = injectBuilder?.(injectionBuilder(refName)) ?? {};
26
+ return class Interceptor {
27
+ static readonly refName = refName;
28
+ static readonly [INJECT_META] = injectInfoMap;
29
+
30
+ readonly logger = new Logger(refName);
31
+ intercept(context: SignalContext): AsyncGenerator | Promise<(res: Response) => Promise<Response>> {
32
+ return Promise.resolve((res: Response) => Promise.resolve(res));
33
+ }
34
+ async onInit() {
35
+ }
36
+ async onDestroy() {
37
+ }
38
+ };
39
+ }
@@ -0,0 +1,56 @@
1
+ import { INTERNAL_META, type MergeAllKeyOfObjects } from "akanjs/base";
2
+ import { applyMixins } from "akanjs/common";
3
+ import {
4
+ type Adaptor,
5
+ type AdaptorCls,
6
+ dangerouslyAdapt,
7
+ type QueueAdaptor,
8
+ QueueAdaptorRole,
9
+ type ScheduleAdaptor,
10
+ Scheduler,
11
+ type ServiceModel,
12
+ } from "akanjs/service";
13
+ import { type BuildInternal, buildInternal, type InternalBuilder, type InternalInfo } from "./internalInfo";
14
+
15
+ export interface Internal extends Adaptor {
16
+ schedule: ScheduleAdaptor;
17
+ queue: QueueAdaptor;
18
+ }
19
+
20
+ export type InternalCls<
21
+ SrvModule extends ServiceModel = ServiceModel,
22
+ InternalInfoMap extends { [key: string]: InternalInfo } = { [key: string]: InternalInfo },
23
+ > = AdaptorCls & { refName: SrvModule["srv"]["refName"]; srv: SrvModule; [INTERNAL_META]: InternalInfoMap };
24
+
25
+ /** Builds an internal adaptor for schedules, queues, processes, and server-only jobs. */
26
+ export function internal<
27
+ SrvModule extends ServiceModel,
28
+ InternalInfoMap extends ReturnType<InternalBuilder<SrvModule>>,
29
+ LibInternals extends InternalCls[],
30
+ >(
31
+ srv: SrvModule,
32
+ internalBuilder: (builder: BuildInternal<SrvModule>) => InternalInfoMap,
33
+ ...libInternals: LibInternals
34
+ ): InternalCls<SrvModule, MergeAllKeyOfObjects<LibInternals, typeof INTERNAL_META> & InternalInfoMap> {
35
+ const refName = srv.srv.refName;
36
+ const srvKeys = [
37
+ ...new Set([
38
+ ...Object.keys(srv.srvMap),
39
+ ...libInternals.flatMap((libInternal) => Object.keys(libInternal.srv.srvMap)),
40
+ ]),
41
+ ];
42
+ const internalCls = class Internal extends dangerouslyAdapt(`${refName}Internal`, ({ plug, service }) => ({
43
+ schedule: plug(Scheduler),
44
+ queue: plug(QueueAdaptorRole),
45
+ ...Object.fromEntries(srvKeys.map((srvRefName) => [srvRefName, service()])),
46
+ })) {
47
+ static srv = srv;
48
+ static [INTERNAL_META] = internalBuilder(buildInternal as any);
49
+ };
50
+ libInternals.forEach((libInternal) => {
51
+ Object.assign(internalCls[INTERNAL_META], libInternal[INTERNAL_META]);
52
+ Object.assign(internalCls.srv.srvMap, libInternal.srv.srvMap);
53
+ });
54
+ applyMixins(internalCls, libInternals);
55
+ return internalCls as any;
56
+ }
@@ -0,0 +1,38 @@
1
+ import type { Cls, PromiseOrObject } from "akanjs/base";
2
+ import type { SignalContext } from "./signalContext";
3
+
4
+ export interface InternalArg<ArgType = unknown> {
5
+ getArg: (context: SignalContext) => PromiseOrObject<ArgType | null>;
6
+ }
7
+ export type InternalArgCls<ArgType = unknown> = Cls<InternalArg<ArgType>>;
8
+
9
+ /** Injects the current Bun request into an endpoint/internal handler. */
10
+ export class Req implements InternalArg {
11
+ getArg(context: SignalContext): Bun.BunRequest {
12
+ const httpContext = context.getHttpContext();
13
+ return httpContext.req;
14
+ }
15
+ }
16
+ /** Injects the current mutable response context into an endpoint/internal handler. */
17
+ export class Res implements InternalArg {
18
+ getArg(context: SignalContext) {
19
+ const httpContext = context.getHttpContext();
20
+ return httpContext.res;
21
+ }
22
+ }
23
+
24
+ /** Injects websocket state and subscription hooks into message/pubsub handlers. */
25
+ export class Ws implements InternalArg {
26
+ onDisconnect?: () => void;
27
+ onUnsubscribe?: () => void;
28
+ getArg(context: SignalContext) {
29
+ const webSocketContext = context.getWebSocketContext();
30
+ const ws = webSocketContext.ws;
31
+ return {
32
+ ws,
33
+ subscribe: webSocketContext.eventType === "subscribe",
34
+ on: webSocketContext.on,
35
+ off: webSocketContext.off,
36
+ };
37
+ }
38
+ }