akanjs 0.0.1 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (682) hide show
  1. package/CODE_OF_CONDUCT.md +54 -0
  2. package/CONTRIBUTING.md +83 -0
  3. package/LICENSE +21 -0
  4. package/README.ko.md +244 -0
  5. package/README.md +237 -6
  6. package/base/base.ts +194 -0
  7. package/base/baseEnv.ts +162 -0
  8. package/base/index.ts +6 -0
  9. package/base/primitiveRegistry.ts +342 -0
  10. package/base/symbols.ts +11 -0
  11. package/base/types.ts +137 -0
  12. package/base/utils.ts +30 -0
  13. package/cli/application/application.command.ts +213 -0
  14. package/cli/application/application.interface.tsx +225 -0
  15. package/cli/application/application.runner.ts +359 -0
  16. package/cli/application/application.script.ts +244 -0
  17. package/cli/build.ts +25 -0
  18. package/cli/cloud/cloud.command.ts +48 -0
  19. package/cli/cloud/cloud.runner.ts +158 -0
  20. package/cli/cloud/cloud.script.ts +40 -0
  21. package/cli/guideline/guideline.command.ts +31 -0
  22. package/cli/guideline/guideline.prompt.ts +212 -0
  23. package/cli/guideline/guideline.runner.ts +53 -0
  24. package/cli/guideline/guideline.script.ts +33 -0
  25. package/cli/guidelines/___library/sharedUiStructureDescription.en.md +767 -0
  26. package/cli/guidelines/___library/utilUiStructureDescription.en.md +395 -0
  27. package/cli/guidelines/___lint/lintRuleDescription.en.md +64 -0
  28. package/cli/guidelines/___module/moduleStructureDescription.en.md +80 -0
  29. package/cli/guidelines/componentRule/componentRule.generate.json +131 -0
  30. package/cli/guidelines/componentRule/componentRule.instruction.md +637 -0
  31. package/cli/guidelines/cssRule/cssRule.generate.json +93 -0
  32. package/cli/guidelines/cssRule/cssRule.instruction.md +435 -0
  33. package/cli/guidelines/databaseModule/databaseModule.generate.json +51 -0
  34. package/cli/guidelines/databaseModule/databaseModule.instruction.md +612 -0
  35. package/cli/guidelines/docPageRule/docPageRule.generate.json +72 -0
  36. package/cli/guidelines/docPageRule/docPageRule.instruction.md +389 -0
  37. package/cli/guidelines/enumConstant/enumConstant.generate.json +24 -0
  38. package/cli/guidelines/enumConstant/enumConstant.instruction.md +232 -0
  39. package/cli/guidelines/framework/framework.generate.json +119 -0
  40. package/cli/guidelines/framework/framework.instruction.md +1110 -0
  41. package/cli/guidelines/howToUseStore/howToUseStore.generate.json +0 -0
  42. package/cli/guidelines/modelConstant/modelConstant.generate.json +128 -0
  43. package/cli/guidelines/modelConstant/modelConstant.instruction.md +506 -0
  44. package/cli/guidelines/modelDictionary/modelDictionary.generate.json +108 -0
  45. package/cli/guidelines/modelDictionary/modelDictionary.instruction.md +547 -0
  46. package/cli/guidelines/modelDocument/modelDocument.generate.json +129 -0
  47. package/cli/guidelines/modelDocument/modelDocument.instruction.md +536 -0
  48. package/cli/guidelines/modelService/modelService.generate.json +135 -0
  49. package/cli/guidelines/modelService/modelService.instruction.md +708 -0
  50. package/cli/guidelines/modelSignal/modelSignal.generate.json +201 -0
  51. package/cli/guidelines/modelSignal/modelSignal.instruction.md +552 -0
  52. package/cli/guidelines/modelStore/modelStore.generate.json +130 -0
  53. package/cli/guidelines/modelStore/modelStore.instruction.md +585 -0
  54. package/cli/guidelines/modelTemplate/modelTemplate.generate.json +104 -0
  55. package/cli/guidelines/modelTemplate/modelTemplate.instruction.md +604 -0
  56. package/cli/guidelines/modelUnit/modelUnit.generate.json +92 -0
  57. package/cli/guidelines/modelUnit/modelUnit.instruction.md +541 -0
  58. package/cli/guidelines/modelUtil/modelUtil.generate.json +93 -0
  59. package/cli/guidelines/modelUtil/modelUtil.instruction.md +752 -0
  60. package/cli/guidelines/modelView/modelView.generate.json +80 -0
  61. package/cli/guidelines/modelView/modelView.instruction.md +1005 -0
  62. package/cli/guidelines/modelZone/modelZone.generate.json +126 -0
  63. package/cli/guidelines/modelZone/modelZone.instruction.md +528 -0
  64. package/cli/guidelines/scalarConstant/scalarConstant.generate.json +106 -0
  65. package/cli/guidelines/scalarConstant/scalarConstant.instruction.md +442 -0
  66. package/cli/guidelines/scalarDictionary/scalarDictionary.generate.json +83 -0
  67. package/cli/guidelines/scalarDictionary/scalarDictionary.instruction.md +273 -0
  68. package/cli/guidelines/scalarModule/scalarModule.generate.json +35 -0
  69. package/cli/guidelines/scalarModule/scalarModule.instruction.md +81 -0
  70. package/cli/guidelines/sharedUiUsage/sharedUiUsage.generate.json +108 -0
  71. package/cli/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +310 -0
  72. package/cli/guidelines/utilUiUsage/utilUiUsage.generate.json +140 -0
  73. package/cli/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
  74. package/cli/index.js +11399 -0
  75. package/cli/index.ts +24 -0
  76. package/cli/library/library.command.ts +28 -0
  77. package/cli/library/library.runner.ts +69 -0
  78. package/cli/library/library.script.ts +39 -0
  79. package/cli/module/module.command.ts +35 -0
  80. package/cli/module/module.prompt.ts +18 -0
  81. package/cli/module/module.request.ts +319 -0
  82. package/cli/module/module.runner.ts +76 -0
  83. package/cli/module/module.script.ts +161 -0
  84. package/cli/package/package.command.ts +32 -0
  85. package/cli/package/package.runner.ts +64 -0
  86. package/cli/package/package.script.ts +35 -0
  87. package/cli/page/page.command.ts +14 -0
  88. package/cli/page/page.runner.ts +14 -0
  89. package/cli/page/page.script.ts +12 -0
  90. package/cli/scalar/scalar.command.ts +21 -0
  91. package/cli/scalar/scalar.prompt.ts +131 -0
  92. package/cli/scalar/scalar.runner.ts +38 -0
  93. package/cli/scalar/scalar.script.ts +16 -0
  94. package/cli/templates/__scalar/__model__/__model__.constant.ts +15 -0
  95. package/cli/templates/__scalar/__model__/__model__.dictionary.ts +19 -0
  96. package/cli/templates/__scalar/__model__/__model__.document.ts +15 -0
  97. package/cli/templates/app/akan.config.ts +14 -0
  98. package/cli/templates/app/capacitor.config.ts.template +8 -0
  99. package/cli/templates/app/common/commonLogic.ts +12 -0
  100. package/cli/templates/app/common/index.ts +10 -0
  101. package/cli/templates/app/env/env.client.debug.ts.template +7 -0
  102. package/cli/templates/app/env/env.client.develop.ts.template +7 -0
  103. package/cli/templates/app/env/env.client.local.ts.template +7 -0
  104. package/cli/templates/app/env/env.client.main.ts.template +7 -0
  105. package/cli/templates/app/env/env.client.testing.ts.template +7 -0
  106. package/cli/templates/app/env/env.client.ts +21 -0
  107. package/cli/templates/app/env/env.client.type.ts +16 -0
  108. package/cli/templates/app/env/env.server.debug.ts.template +7 -0
  109. package/cli/templates/app/env/env.server.develop.ts.template +9 -0
  110. package/cli/templates/app/env/env.server.local.ts.template +14 -0
  111. package/cli/templates/app/env/env.server.main.ts.template +9 -0
  112. package/cli/templates/app/env/env.server.testing.ts.template +6 -0
  113. package/cli/templates/app/env/env.server.ts +20 -0
  114. package/cli/templates/app/lib/___appName__/__appName__.dictionary.ts +17 -0
  115. package/cli/templates/app/lib/___appName__/__appName__.service.ts +13 -0
  116. package/cli/templates/app/lib/___appName__/__appName__.signal.ts +17 -0
  117. package/cli/templates/app/lib/___appName__/__appName__.store.ts +15 -0
  118. package/cli/templates/app/lib/option.ts +17 -0
  119. package/cli/templates/app/main.ts +16 -0
  120. package/cli/templates/app/package.json.template +5 -0
  121. package/cli/templates/app/page/_index.tsx +172 -0
  122. package/cli/templates/app/page/_layout.tsx +32 -0
  123. package/cli/templates/app/page/styles.css.template +53 -0
  124. package/cli/templates/app/public/favicon.ico +0 -0
  125. package/cli/templates/app/public/logo.png +0 -0
  126. package/cli/templates/app/srvkit/backendLogic.ts +12 -0
  127. package/cli/templates/app/srvkit/index.ts +10 -0
  128. package/cli/templates/app/tsconfig.json.template +21 -0
  129. package/cli/templates/app/ui/UiComponent.ts +16 -0
  130. package/cli/templates/app/ui/index.ts +10 -0
  131. package/cli/templates/app/webkit/frontendLogic.ts +12 -0
  132. package/cli/templates/app/webkit/index.ts +10 -0
  133. package/cli/templates/client.ts +46 -0
  134. package/cli/templates/crudPages/[__model__Id]/edit/page.tsx +47 -0
  135. package/cli/templates/crudPages/[__model__Id]/page.tsx +52 -0
  136. package/cli/templates/crudPages/new/page.tsx +42 -0
  137. package/cli/templates/crudPages/page.tsx +43 -0
  138. package/cli/templates/crudSinglePage/page.tsx +37 -0
  139. package/cli/templates/env/_env.server.type.ts +16 -0
  140. package/cli/templates/facetIndex/index.ts +32 -0
  141. package/cli/templates/index.ts +10 -0
  142. package/cli/templates/lib/__lib/lib.constant.ts +38 -0
  143. package/cli/templates/lib/__lib/lib.dictionary.ts +33 -0
  144. package/cli/templates/lib/__lib/lib.document.ts +35 -0
  145. package/cli/templates/lib/__lib/lib.service.ts +33 -0
  146. package/cli/templates/lib/__lib/lib.signal.ts +34 -0
  147. package/cli/templates/lib/__lib/lib.store.ts +33 -0
  148. package/cli/templates/lib/cnst.ts +29 -0
  149. package/cli/templates/lib/db.ts +32 -0
  150. package/cli/templates/lib/dict.ts +49 -0
  151. package/cli/templates/lib/sig.ts +60 -0
  152. package/cli/templates/lib/srv.ts +34 -0
  153. package/cli/templates/lib/st.ts +31 -0
  154. package/cli/templates/lib/useClient.ts +19 -0
  155. package/cli/templates/lib/useServer.ts +7 -0
  156. package/cli/templates/libRoot/.gitignore.template +16 -0
  157. package/cli/templates/libRoot/akan.config.ts +12 -0
  158. package/cli/templates/libRoot/base/baseLogic.ts +10 -0
  159. package/cli/templates/libRoot/base/index.ts +8 -0
  160. package/cli/templates/libRoot/common/commonLogic.ts +10 -0
  161. package/cli/templates/libRoot/common/index.ts +8 -0
  162. package/cli/templates/libRoot/env/env.server.example.ts.template +6 -0
  163. package/cli/templates/libRoot/env/env.server.testing.ts.template +6 -0
  164. package/cli/templates/libRoot/lib/___libName__/__libName__.dictionary.ts +15 -0
  165. package/cli/templates/libRoot/lib/___libName__/__libName__.service.ts +11 -0
  166. package/cli/templates/libRoot/lib/___libName__/__libName__.store.ts +13 -0
  167. package/cli/templates/libRoot/lib/option.ts +17 -0
  168. package/cli/templates/libRoot/package.json.template +5 -0
  169. package/cli/templates/libRoot/srvkit/backendLogic.ts +10 -0
  170. package/cli/templates/libRoot/srvkit/index.ts +8 -0
  171. package/cli/templates/libRoot/tsconfig.json.template +11 -0
  172. package/cli/templates/libRoot/ui/index.ts +7 -0
  173. package/cli/templates/libRoot/webkit/frontendLogic.ts +10 -0
  174. package/cli/templates/libRoot/webkit/index.ts +8 -0
  175. package/cli/templates/localDev/docker-compose.yaml.template +37 -0
  176. package/cli/templates/module/__Model__.Template.tsx +36 -0
  177. package/cli/templates/module/__Model__.Unit.tsx +26 -0
  178. package/cli/templates/module/__Model__.Util.tsx +30 -0
  179. package/cli/templates/module/__Model__.View.tsx +29 -0
  180. package/cli/templates/module/__Model__.Zone.tsx +43 -0
  181. package/cli/templates/module/__model__.constant.ts +24 -0
  182. package/cli/templates/module/__model__.dictionary.ts +30 -0
  183. package/cli/templates/module/__model__.document.ts +23 -0
  184. package/cli/templates/module/__model__.service.ts +16 -0
  185. package/cli/templates/module/__model__.signal.ts +27 -0
  186. package/cli/templates/module/__model__.store.ts +19 -0
  187. package/cli/templates/module/index.tsx +44 -0
  188. package/cli/templates/moduleRoot/index.tsx +31 -0
  189. package/cli/templates/pkgRoot/tsconfig.json.template +10 -0
  190. package/cli/templates/server.ts +45 -0
  191. package/cli/templates/workspaceRoot/.env.template +14 -0
  192. package/cli/templates/workspaceRoot/.gitignore.template +130 -0
  193. package/cli/templates/workspaceRoot/.vscode/settings.json.template +23 -0
  194. package/cli/templates/workspaceRoot/biome.json.template +175 -0
  195. package/cli/templates/workspaceRoot/bunfig.toml +4 -0
  196. package/cli/templates/workspaceRoot/infra/app/Chart.yaml.template +6 -0
  197. package/cli/templates/workspaceRoot/infra/app/templates/frontend.yaml.template +182 -0
  198. package/cli/templates/workspaceRoot/infra/app/values/_common-values.yaml.template +183 -0
  199. package/cli/templates/workspaceRoot/package.json.template +7 -0
  200. package/cli/templates/workspaceRoot/tsconfig.json.template +26 -0
  201. package/cli/testHelpers.ts +171 -0
  202. package/cli/workspace/workspace.command.ts +59 -0
  203. package/cli/workspace/workspace.runner.ts +57 -0
  204. package/cli/workspace/workspace.script.ts +68 -0
  205. package/client/capacitor.ts +68 -0
  206. package/client/clientRuntime.ts +141 -0
  207. package/client/cookie.ts +121 -0
  208. package/client/createFont.ts +8 -0
  209. package/client/csrTypes.ts +259 -0
  210. package/client/decorators.ts +25 -0
  211. package/client/device.ts +147 -0
  212. package/client/fetch.ts +1 -0
  213. package/client/index.ts +15 -0
  214. package/client/locale.ts +4 -0
  215. package/client/makePageProto.tsx +178 -0
  216. package/client/router.ts +286 -0
  217. package/client/rscNavigation.ts +19 -0
  218. package/client/storage.ts +33 -0
  219. package/client/translator.ts +43 -0
  220. package/client/types.ts +228 -0
  221. package/client/useClient.ts +1 -0
  222. package/common/Logger.ts +177 -0
  223. package/common/applyMixins.ts +14 -0
  224. package/common/capitalize.ts +4 -0
  225. package/common/deepObjectify.ts +27 -0
  226. package/common/formatNumber.ts +14 -0
  227. package/common/formatPhone.ts +7 -0
  228. package/common/getAllPropertyDescriptors.ts +13 -0
  229. package/common/hmrPhase.ts +17 -0
  230. package/common/httpClient.ts +101 -0
  231. package/common/index.ts +50 -0
  232. package/common/isDayjs.ts +3 -0
  233. package/common/isEmail.ts +2 -0
  234. package/common/isPhoneNumber.ts +8 -0
  235. package/common/isQueryEqual.ts +23 -0
  236. package/common/isValidDate.ts +14 -0
  237. package/common/localeConfig.ts +41 -0
  238. package/common/lowerlize.ts +4 -0
  239. package/common/mergeVersion.ts +10 -0
  240. package/common/objectify.ts +7 -0
  241. package/common/pathGet.ts +13 -0
  242. package/common/pathSet.ts +16 -0
  243. package/common/randomPick.ts +1 -0
  244. package/common/randomPicks.ts +12 -0
  245. package/common/routeConvention.ts +203 -0
  246. package/common/sleep.ts +8 -0
  247. package/common/splitVersion.ts +11 -0
  248. package/common/subRoute.ts +34 -0
  249. package/common/types.ts +15 -0
  250. package/constant/constantRegistry.ts +334 -0
  251. package/constant/crystalize.ts +45 -0
  252. package/constant/deserialize.ts +70 -0
  253. package/constant/fieldInfo.ts +415 -0
  254. package/constant/getDefault.ts +18 -0
  255. package/constant/immerify.ts +16 -0
  256. package/constant/index.ts +10 -0
  257. package/constant/purify.ts +118 -0
  258. package/constant/serialize.ts +87 -0
  259. package/constant/types.ts +105 -0
  260. package/constant/via.ts +360 -0
  261. package/devkit/aiEditor.ts +299 -0
  262. package/devkit/akanApp/akanApp.host.ts +356 -0
  263. package/devkit/akanApp/index.ts +1 -0
  264. package/devkit/akanConfig/akanConfig.ts +332 -0
  265. package/devkit/akanConfig/index.ts +2 -0
  266. package/devkit/akanConfig/types.ts +187 -0
  267. package/devkit/applicationBuildReporter.ts +69 -0
  268. package/devkit/applicationBuildRunner.ts +302 -0
  269. package/devkit/applicationReleasePackager.ts +205 -0
  270. package/devkit/artifact/implicitRootLayout.ts +155 -0
  271. package/devkit/artifact/index.ts +1 -0
  272. package/devkit/artifact/routeSeedIndex.ts +128 -0
  273. package/devkit/auth.ts +41 -0
  274. package/devkit/builder.ts +164 -0
  275. package/devkit/capacitor.base.config.ts +74 -0
  276. package/devkit/capacitorApp.ts +385 -0
  277. package/devkit/commandDecorators/argMeta.ts +88 -0
  278. package/devkit/commandDecorators/command.ts +314 -0
  279. package/devkit/commandDecorators/commandBuilder.ts +188 -0
  280. package/devkit/commandDecorators/commandMeta.ts +6 -0
  281. package/devkit/commandDecorators/dependencyBuilder.ts +100 -0
  282. package/devkit/commandDecorators/helpFormatter.ts +217 -0
  283. package/devkit/commandDecorators/index.ts +8 -0
  284. package/devkit/commandDecorators/targetMeta.ts +31 -0
  285. package/devkit/commandDecorators/types.ts +10 -0
  286. package/devkit/constants.ts +25 -0
  287. package/devkit/createTunnel.ts +36 -0
  288. package/devkit/dependencyScanner.ts +339 -0
  289. package/devkit/executors.ts +1325 -0
  290. package/devkit/extractDeps.ts +85 -0
  291. package/devkit/fileEditor.ts +106 -0
  292. package/devkit/fileSys.ts +39 -0
  293. package/devkit/frontendBuild/allRoutesBuilder.ts +103 -0
  294. package/devkit/frontendBuild/clientBuildTypes.ts +114 -0
  295. package/devkit/frontendBuild/clientEntriesBundler.ts +300 -0
  296. package/devkit/frontendBuild/clientEntryDiscovery.ts +196 -0
  297. package/devkit/frontendBuild/csrArtifactBuilder.ts +237 -0
  298. package/devkit/frontendBuild/cssCompiler.ts +279 -0
  299. package/devkit/frontendBuild/cssImportResolver.ts +116 -0
  300. package/devkit/frontendBuild/fontOptimizer.ts +427 -0
  301. package/devkit/frontendBuild/hmrChangeClassifier.ts +28 -0
  302. package/devkit/frontendBuild/hmrWatcher.ts +101 -0
  303. package/devkit/frontendBuild/index.ts +18 -0
  304. package/devkit/frontendBuild/pagesBundleBuilder.ts +137 -0
  305. package/devkit/frontendBuild/pagesEntrySourceGenerator.ts +37 -0
  306. package/devkit/frontendBuild/precompressArtifacts.ts +59 -0
  307. package/devkit/frontendBuild/routeClientBuilder.ts +290 -0
  308. package/devkit/frontendBuild/routesManifestArtifactSerializer.ts +62 -0
  309. package/devkit/frontendBuild/ssrBaseArtifactBuilder.ts +139 -0
  310. package/devkit/frontendBuild/vendorSpecifiers.ts +16 -0
  311. package/devkit/frontendBuild/watchRootResolver.ts +28 -0
  312. package/devkit/getCredentials.ts +19 -0
  313. package/devkit/getDirname.ts +3 -0
  314. package/devkit/getModelFileData.ts +59 -0
  315. package/devkit/getRelatedCnsts.ts +300 -0
  316. package/devkit/guideline.ts +19 -0
  317. package/devkit/incrementalBuilder/incrementalBuilder.host.ts +78 -0
  318. package/devkit/incrementalBuilder/incrementalBuilder.proc.ts +330 -0
  319. package/devkit/incrementalBuilder/index.ts +1 -0
  320. package/devkit/index.ts +36 -0
  321. package/devkit/lint/no-import-client-functions.grit +32 -0
  322. package/devkit/lint/no-import-external-library.grit +21 -0
  323. package/devkit/lint/no-js-private-class-method.grit +42 -0
  324. package/devkit/lint/no-use-client-in-server.grit +7 -0
  325. package/devkit/lint/non-scalar-props-restricted.grit +13 -0
  326. package/devkit/linter.ts +248 -0
  327. package/devkit/mobile/index.ts +1 -0
  328. package/devkit/mobile/mobileTarget.ts +47 -0
  329. package/devkit/prompter.ts +71 -0
  330. package/devkit/scanInfo.ts +605 -0
  331. package/devkit/selectModel.ts +11 -0
  332. package/devkit/spinner.ts +54 -0
  333. package/devkit/sshTunnel.ts +151 -0
  334. package/devkit/streamAi.ts +45 -0
  335. package/devkit/transforms/barrelAnalyzer.ts +249 -0
  336. package/devkit/transforms/barrelImportsPlugin.ts +451 -0
  337. package/devkit/transforms/externalizeFrameworkPlugin.ts +159 -0
  338. package/devkit/transforms/index.ts +5 -0
  339. package/devkit/transforms/rscUseClientTransform.ts +52 -0
  340. package/devkit/transforms/useClientBundlePlugin.ts +47 -0
  341. package/devkit/typeChecker.ts +260 -0
  342. package/devkit/types.ts +42 -0
  343. package/devkit/ui/MultiScrollList.tsx +228 -0
  344. package/devkit/ui/ScrollList.tsx +106 -0
  345. package/devkit/ui/index.ts +2 -0
  346. package/devkit/uploadRelease.ts +95 -0
  347. package/devkit/useStdoutDimensions.ts +20 -0
  348. package/dictionary/base.dictionary.ts +91 -0
  349. package/dictionary/dictInfo.ts +1079 -0
  350. package/dictionary/dictionary.ts +10 -0
  351. package/dictionary/index.ts +12 -0
  352. package/dictionary/locale.ts +230 -0
  353. package/dictionary/trans.ts +196 -0
  354. package/document/by.ts +39 -0
  355. package/document/dataLoader.ts +91 -0
  356. package/document/database.ts +168 -0
  357. package/document/databaseRegistry.ts +113 -0
  358. package/document/documentQuery.ts +143 -0
  359. package/document/documentSchema.ts +91 -0
  360. package/document/filterMeta.ts +210 -0
  361. package/document/index.ts +11 -0
  362. package/document/into.ts +169 -0
  363. package/document/loaderInfo.ts +50 -0
  364. package/document/schema.ts +24 -0
  365. package/document/types.ts +41 -0
  366. package/fetch/client/fetchClient.ts +600 -0
  367. package/fetch/client/httpClient.ts +157 -0
  368. package/fetch/client/index.ts +3 -0
  369. package/fetch/client/wsClient.ts +246 -0
  370. package/fetch/fetchType/appliedReturn.type.ts +108 -0
  371. package/fetch/fetchType/buildFetch.type.ts +24 -0
  372. package/fetch/fetchType/clientSignal.type.ts +22 -0
  373. package/fetch/fetchType/endpointFetch.type.ts +56 -0
  374. package/fetch/fetchType/index.ts +5 -0
  375. package/fetch/fetchType/sliceFetch.type.ts +173 -0
  376. package/fetch/index.ts +4 -0
  377. package/fetch/requestStorage.ts +127 -0
  378. package/fetch/serializer/fetch.serializer.ts +131 -0
  379. package/fetch/serializer/index.ts +1 -0
  380. package/fetch/types.ts +28 -0
  381. package/package.json +202 -5
  382. package/server/SSR_MEMORY_DIAGNOSIS.md +107 -0
  383. package/server/akanApp.ts +855 -0
  384. package/server/akanLib.ts +43 -0
  385. package/server/akanOption.ts +42 -0
  386. package/server/akanServer.ts +369 -0
  387. package/server/artifact/builderRpc.ts +124 -0
  388. package/server/artifact/index.ts +6 -0
  389. package/server/artifact/ipcTypes.ts +46 -0
  390. package/server/artifact/manifestTypes.ts +19 -0
  391. package/server/artifact/routeClientCache.ts +224 -0
  392. package/server/artifact/routeSeedIndexStore.ts +89 -0
  393. package/server/artifact/routesManifestStore.ts +120 -0
  394. package/server/decorators.ts +95 -0
  395. package/server/di/diLifecycle.ts +520 -0
  396. package/server/di/index.ts +4 -0
  397. package/server/di/predefinedAdaptor.ts +77 -0
  398. package/server/di/resolveAdaptorHierarchy.ts +82 -0
  399. package/server/di/resolveHierarchy.ts +89 -0
  400. package/server/di/resolveServiceHierarchy.ts +47 -0
  401. package/server/di/utils.ts +40 -0
  402. package/server/hmr/changeBatch.ts +14 -0
  403. package/server/hmr/clientScript.ts +310 -0
  404. package/server/hmr/devHmrController.ts +395 -0
  405. package/server/hmr/index.ts +4 -0
  406. package/server/hmr/wsHub.ts +56 -0
  407. package/server/imageOptimizer.ts +427 -0
  408. package/server/imageOptimizerError.ts +8 -0
  409. package/server/index.ts +14 -0
  410. package/server/lifecycle/shutdownManager.ts +52 -0
  411. package/server/logging/rotatingLogWriter.ts +190 -0
  412. package/server/processMetricsCollector.ts +78 -0
  413. package/server/proxy/akanResponse.ts +16 -0
  414. package/server/proxy/bunRequestFields.ts +12 -0
  415. package/server/proxy/hostBasePathWebProxy.ts +112 -0
  416. package/server/proxy/index.ts +15 -0
  417. package/server/proxy/localeWebProxy.ts +71 -0
  418. package/server/proxy/types.ts +41 -0
  419. package/server/proxy/webProxyRunner.ts +90 -0
  420. package/server/resolver/database.resolver.ts +340 -0
  421. package/server/resolver/index.ts +3 -0
  422. package/server/resolver/resolver.contract.fixture.ts +222 -0
  423. package/server/resolver/service.resolver.ts +176 -0
  424. package/server/resolver/signal.resolver.ts +386 -0
  425. package/server/robots.ts +32 -0
  426. package/server/routeElementComposer.tsx +91 -0
  427. package/server/routeTreeBuilder.ts +279 -0
  428. package/server/routing/apiRouter.ts +226 -0
  429. package/server/rscClient.tsx +140 -0
  430. package/server/rscWorker.tsx +625 -0
  431. package/server/rscWorkerHost.ts +616 -0
  432. package/server/sitemap.ts +90 -0
  433. package/server/ssrFromRscRenderer.tsx +285 -0
  434. package/server/ssrTypes.ts +48 -0
  435. package/server/types/react-server-dom-webpack.d.ts +91 -0
  436. package/server/types.tsx +109 -0
  437. package/server/vendor/akanjs-base.ts +1 -0
  438. package/server/vendor/akanjs-common.ts +1 -0
  439. package/server/vendor/akanjs-constant.ts +1 -0
  440. package/server/vendor/akanjs-store.ts +1 -0
  441. package/server/vendor/react-dom-client.ts +5 -0
  442. package/server/vendor/react-dom.ts +21 -0
  443. package/server/vendor/react-jsx-dev-runtime.ts +5 -0
  444. package/server/vendor/react-jsx-runtime.ts +5 -0
  445. package/server/vendor/react-refresh-runtime.ts +6 -0
  446. package/server/vendor/react-server-dom-webpack-client-browser.ts +12 -0
  447. package/server/vendor/react.ts +51 -0
  448. package/server/vendor/scheduler.ts +23 -0
  449. package/server/webRouter.ts +712 -0
  450. package/service/adapt.ts +47 -0
  451. package/service/base.service.ts +18 -0
  452. package/service/index.ts +10 -0
  453. package/service/injectInfo.ts +393 -0
  454. package/service/ipcTypes.ts +127 -0
  455. package/service/predefinedAdaptor/cache.adaptor.ts +105 -0
  456. package/service/predefinedAdaptor/compress.adaptor.ts +357 -0
  457. package/service/predefinedAdaptor/database.adaptor.ts +1310 -0
  458. package/service/predefinedAdaptor/index.ts +13 -0
  459. package/service/predefinedAdaptor/logging.adaptor.ts +36 -0
  460. package/service/predefinedAdaptor/queue.adaptor.ts +42 -0
  461. package/service/predefinedAdaptor/role.adaptor.ts +18 -0
  462. package/service/predefinedAdaptor/schedule.adaptor.ts +188 -0
  463. package/service/predefinedAdaptor/solidCache.adaptor.ts +143 -0
  464. package/service/predefinedAdaptor/solidPubsub.adaptor.ts +98 -0
  465. package/service/predefinedAdaptor/solidQueue.adaptor.ts +203 -0
  466. package/service/predefinedAdaptor/solidSqlite.ts +85 -0
  467. package/service/predefinedAdaptor/sqlitePath.ts +20 -0
  468. package/service/predefinedAdaptor/storage.adaptor.ts +121 -0
  469. package/service/predefinedAdaptor/websocket.adaptor.ts +313 -0
  470. package/service/serve.ts +223 -0
  471. package/service/serviceModule.ts +221 -0
  472. package/service/serviceRegistry.ts +26 -0
  473. package/service/types.ts +113 -0
  474. package/signal/base.signal.ts +46 -0
  475. package/signal/endpoint.ts +122 -0
  476. package/signal/endpointInfo.ts +374 -0
  477. package/signal/exception.ts +50 -0
  478. package/signal/guard.ts +18 -0
  479. package/signal/guards.ts +16 -0
  480. package/signal/index.ts +18 -0
  481. package/signal/intercept.ts +39 -0
  482. package/signal/internal.ts +56 -0
  483. package/signal/internalArg.ts +38 -0
  484. package/signal/internalInfo.ts +208 -0
  485. package/signal/middleware.ts +108 -0
  486. package/signal/serializer/fetch.serializer.ts +128 -0
  487. package/signal/serializer/index.ts +1 -0
  488. package/signal/serverSignal.ts +114 -0
  489. package/signal/signalContext.ts +446 -0
  490. package/signal/signalRegistry.ts +82 -0
  491. package/signal/slice.ts +158 -0
  492. package/signal/sliceInfo.ts +254 -0
  493. package/signal/types.ts +131 -0
  494. package/store/action.ts +1067 -0
  495. package/store/baseSt.ts +81 -0
  496. package/store/hooks.ts +2 -0
  497. package/store/index.ts +8 -0
  498. package/store/rootStore.ts +26 -0
  499. package/store/state.ts +226 -0
  500. package/store/stateBuilder.ts +429 -0
  501. package/store/stateInfo.ts +66 -0
  502. package/store/store.ts +194 -0
  503. package/store/storeInstance.ts +382 -0
  504. package/store/storeRegistry.ts +84 -0
  505. package/store/types.ts +69 -0
  506. package/store/withSelector.ts +62 -0
  507. package/test/index.ts +16 -0
  508. package/test/playwright.config.base.ts +48 -0
  509. package/test/playwright.pageAgent.ts +41 -0
  510. package/test/sample.ts +19 -0
  511. package/test/sampleOf.ts +70 -0
  512. package/test/signalTest.preload.ts +10 -0
  513. package/test/signalTestRuntime.ts +126 -0
  514. package/test/testServer.ts +187 -0
  515. package/ui/BottomSheet.tsx +103 -0
  516. package/ui/Button.tsx +70 -0
  517. package/ui/ClientSide.tsx +11 -0
  518. package/ui/Clipboard.tsx +49 -0
  519. package/ui/Constant/Doc.tsx +696 -0
  520. package/ui/Constant/Mermaid.tsx +149 -0
  521. package/ui/Constant/index.ts +6 -0
  522. package/ui/Constant/schemaDoc.ts +324 -0
  523. package/ui/Copy.tsx +27 -0
  524. package/ui/CsrImage.tsx +38 -0
  525. package/ui/Data/CardList.tsx +141 -0
  526. package/ui/Data/Dashboard.tsx +72 -0
  527. package/ui/Data/Insight.tsx +35 -0
  528. package/ui/Data/Item.tsx +285 -0
  529. package/ui/Data/ListContainer.tsx +320 -0
  530. package/ui/Data/Pagination.tsx +54 -0
  531. package/ui/Data/QueryMaker.tsx +21 -0
  532. package/ui/Data/TableList.tsx +161 -0
  533. package/ui/Data/index.ts +11 -0
  534. package/ui/Data/index_.tsx +11 -0
  535. package/ui/DatePicker.tsx +184 -0
  536. package/ui/Dialog/Action.tsx +15 -0
  537. package/ui/Dialog/Close.tsx +22 -0
  538. package/ui/Dialog/Content.tsx +11 -0
  539. package/ui/Dialog/Modal.tsx +137 -0
  540. package/ui/Dialog/Provider.tsx +33 -0
  541. package/ui/Dialog/Title.tsx +15 -0
  542. package/ui/Dialog/Trigger.tsx +22 -0
  543. package/ui/Dialog/context.ts +20 -0
  544. package/ui/Dialog/index.tsx +15 -0
  545. package/ui/DragAction.tsx +129 -0
  546. package/ui/DraggableList.tsx +230 -0
  547. package/ui/Dropdown.tsx +51 -0
  548. package/ui/Empty.tsx +32 -0
  549. package/ui/Field.tsx +1556 -0
  550. package/ui/FontFace.tsx +26 -0
  551. package/ui/Image.tsx +185 -0
  552. package/ui/InfiniteScroll.tsx +67 -0
  553. package/ui/Input.tsx +636 -0
  554. package/ui/KeyboardAvoiding.tsx +62 -0
  555. package/ui/Layout/BottomAction.tsx +15 -0
  556. package/ui/Layout/BottomInset.tsx +42 -0
  557. package/ui/Layout/BottomTab.tsx +71 -0
  558. package/ui/Layout/Header.tsx +38 -0
  559. package/ui/Layout/LeftSider.tsx +34 -0
  560. package/ui/Layout/Navbar.tsx +46 -0
  561. package/ui/Layout/RightSider.tsx +41 -0
  562. package/ui/Layout/Sider.tsx +69 -0
  563. package/ui/Layout/Template.tsx +11 -0
  564. package/ui/Layout/TopLeftAction.tsx +28 -0
  565. package/ui/Layout/Unit.tsx +19 -0
  566. package/ui/Layout/View.tsx +12 -0
  567. package/ui/Layout/Zone.tsx +10 -0
  568. package/ui/Layout/index.ts +27 -0
  569. package/ui/Link/Back.tsx +15 -0
  570. package/ui/Link/Close.tsx +20 -0
  571. package/ui/Link/CsrLink.tsx +41 -0
  572. package/ui/Link/Lang.tsx +16 -0
  573. package/ui/Link/SsrLink.tsx +68 -0
  574. package/ui/Link/index.tsx +32 -0
  575. package/ui/Link/types.ts +47 -0
  576. package/ui/Load/Edit.tsx +19 -0
  577. package/ui/Load/Edit_Client.tsx +120 -0
  578. package/ui/Load/Page.tsx +40 -0
  579. package/ui/Load/PageCSR.tsx +39 -0
  580. package/ui/Load/Pagination.tsx +89 -0
  581. package/ui/Load/Units.tsx +330 -0
  582. package/ui/Load/View.tsx +115 -0
  583. package/ui/Load/index.ts +11 -0
  584. package/ui/Load/index_.tsx +6 -0
  585. package/ui/Loading/Area.tsx +10 -0
  586. package/ui/Loading/Button.tsx +17 -0
  587. package/ui/Loading/Input.tsx +17 -0
  588. package/ui/Loading/ProgressBar.tsx +14 -0
  589. package/ui/Loading/Skeleton.tsx +22 -0
  590. package/ui/Loading/Spin.tsx +22 -0
  591. package/ui/Loading/index.tsx +8 -0
  592. package/ui/Menu.tsx +273 -0
  593. package/ui/Modal.tsx +87 -0
  594. package/ui/Model/AdminPanel.tsx +51 -0
  595. package/ui/Model/Edit.tsx +46 -0
  596. package/ui/Model/EditModal.tsx +301 -0
  597. package/ui/Model/EditWrapper.tsx +48 -0
  598. package/ui/Model/LoadInit.tsx +11 -0
  599. package/ui/Model/New.tsx +46 -0
  600. package/ui/Model/NewWrapper.tsx +20 -0
  601. package/ui/Model/NewWrapper_Client.tsx +57 -0
  602. package/ui/Model/Remove.tsx +75 -0
  603. package/ui/Model/RemoveWrapper.tsx +38 -0
  604. package/ui/Model/SureToRemove.tsx +108 -0
  605. package/ui/Model/View.tsx +65 -0
  606. package/ui/Model/ViewEditModal.tsx +125 -0
  607. package/ui/Model/ViewModal.tsx +71 -0
  608. package/ui/Model/ViewWrapper.tsx +38 -0
  609. package/ui/Model/index.ts +33 -0
  610. package/ui/Model/index_.tsx +16 -0
  611. package/ui/More.tsx +56 -0
  612. package/ui/ObjectId.tsx +29 -0
  613. package/ui/Pagination.tsx +120 -0
  614. package/ui/Popconfirm.tsx +135 -0
  615. package/ui/Portal.tsx +10 -0
  616. package/ui/Radio.tsx +53 -0
  617. package/ui/RecentTime.tsx +123 -0
  618. package/ui/Refresh.tsx +24 -0
  619. package/ui/ScreenNavigator.tsx +129 -0
  620. package/ui/Select.tsx +322 -0
  621. package/ui/Signal/Arg.tsx +352 -0
  622. package/ui/Signal/Doc.tsx +231 -0
  623. package/ui/Signal/Listener.tsx +74 -0
  624. package/ui/Signal/Message.tsx +267 -0
  625. package/ui/Signal/Object.tsx +131 -0
  626. package/ui/Signal/PubSub.tsx +247 -0
  627. package/ui/Signal/Request.tsx +30 -0
  628. package/ui/Signal/Response.tsx +76 -0
  629. package/ui/Signal/RestApi.tsx +390 -0
  630. package/ui/Signal/WebSocket.tsx +47 -0
  631. package/ui/Signal/index.ts +10 -0
  632. package/ui/Signal/makeExample.ts +75 -0
  633. package/ui/System/CSR.tsx +420 -0
  634. package/ui/System/Client.tsx +296 -0
  635. package/ui/System/Common.tsx +83 -0
  636. package/ui/System/DevModeToggle.tsx +21 -0
  637. package/ui/System/Gtag.tsx +69 -0
  638. package/ui/System/Messages.tsx +175 -0
  639. package/ui/System/Reconnect.tsx +156 -0
  640. package/ui/System/Root.tsx +10 -0
  641. package/ui/System/SSR.tsx +163 -0
  642. package/ui/System/SelectLanguage.tsx +47 -0
  643. package/ui/System/ThemeToggle.tsx +98 -0
  644. package/ui/System/index.tsx +23 -0
  645. package/ui/Tab/Menu.tsx +56 -0
  646. package/ui/Tab/Menus.tsx +10 -0
  647. package/ui/Tab/Panel.tsx +25 -0
  648. package/ui/Tab/Provider.tsx +25 -0
  649. package/ui/Tab/context.ts +16 -0
  650. package/ui/Tab/index.tsx +11 -0
  651. package/ui/Table.tsx +131 -0
  652. package/ui/ToggleSelect.tsx +144 -0
  653. package/ui/Unauthorized.tsx +29 -0
  654. package/ui/animated.tsx +8 -0
  655. package/ui/fontCss.ts +86 -0
  656. package/ui/index.ts +44 -0
  657. package/ui/styles.css +617 -0
  658. package/webkit/bootCsr.tsx +275 -0
  659. package/webkit/createRobotPage.ts +15 -0
  660. package/webkit/createSitemapPage.ts +4 -0
  661. package/webkit/index.ts +19 -0
  662. package/webkit/lazy.tsx +37 -0
  663. package/webkit/types.ts +7 -0
  664. package/webkit/useCamera.tsx +99 -0
  665. package/webkit/useCodepush.tsx +99 -0
  666. package/webkit/useContact.tsx +48 -0
  667. package/webkit/useCsrValues.ts +661 -0
  668. package/webkit/useDebounce.ts +24 -0
  669. package/webkit/useFetch.ts +48 -0
  670. package/webkit/useGeoLocation.tsx +24 -0
  671. package/webkit/useHistory.ts +76 -0
  672. package/webkit/useInterval.ts +21 -0
  673. package/webkit/useLocation.ts +69 -0
  674. package/webkit/usePurchase.tsx +156 -0
  675. package/webkit/usePushNoti.tsx +48 -0
  676. package/webkit/useThrottle.ts +22 -0
  677. package/src/index.js +0 -2
  678. package/src/index.js.map +0 -1
  679. package/src/lib/akan2.js +0 -4
  680. package/src/lib/akan2.js.map +0 -1
  681. package/src/run.js +0 -4
  682. package/src/run.js.map +0 -1
@@ -0,0 +1,68 @@
1
+ import path from "node:path";
2
+ import { Logger } from "akanjs/common";
3
+ import { AppExecutor, type Exec, LibExecutor, PkgExecutor, script, type Workspace } from "akanjs/devkit";
4
+
5
+ import { ApplicationScript } from "../application/application.script";
6
+ import { LibraryScript } from "../library/library.script";
7
+ import { WorkspaceRunner } from "./workspace.runner";
8
+
9
+ export class WorkspaceScript extends script("workspace", [WorkspaceRunner, ApplicationScript, LibraryScript]) {
10
+ async createWorkspace(
11
+ repoName: string,
12
+ appName: string,
13
+ {
14
+ dirname = ".",
15
+ installLibs = false,
16
+ tag = "latest",
17
+ init = true,
18
+ }: { dirname?: string; installLibs?: boolean; tag?: string; init?: boolean },
19
+ ) {
20
+ const workspace = await this.workspaceRunner.createWorkspace(repoName, appName, { dirname, tag, init });
21
+ if (installLibs) {
22
+ await this.libraryScript.installLibrary(workspace, "util");
23
+ await this.libraryScript.installLibrary(workspace, "shared");
24
+ }
25
+ await this.applicationScript.createApplication(appName, workspace, { libs: installLibs ? ["util", "shared"] : [] });
26
+ const gitSpinner = workspace.spinning("Initializing git repository and commit...");
27
+ try {
28
+ await workspace.commit("Initial commit", { init: true });
29
+ gitSpinner.succeed("Git repository initialized and committed");
30
+ } catch (_) {
31
+ gitSpinner.fail("Git repository initialization failed. It's not fatal, you can commit manually");
32
+ }
33
+ const workspacePath = path.join(dirname, repoName);
34
+ Logger.rawLog(`\n🎉 Welcome aboard! Workspace created in ${dirname}/${repoName}`);
35
+ Logger.rawLog(`🚀 Run \`cd ${workspacePath} && akan start ${appName}\` to start the development server.`);
36
+
37
+ Logger.rawLog(`\n👋 Happy coding!`);
38
+ }
39
+ async lint(exec: Exec, workspace: Workspace, { fix = true }: { fix?: boolean } = {}) {
40
+ if (exec instanceof AppExecutor) await this.applicationScript.sync(exec);
41
+ else if (exec instanceof LibExecutor) await this.libraryScript.syncLibrary(exec);
42
+ const spinner = workspace.spinning(`Linting${fix ? " with fix" : ""}...`);
43
+ try {
44
+ await this.workspaceRunner.lint(exec, workspace, { fix });
45
+ spinner.succeed("Lint completed with no errors");
46
+ } catch (error) {
47
+ spinner.fail("Lint failed with errors");
48
+ throw error;
49
+ }
50
+ }
51
+ async lintAll(workspace: Workspace, { fix = true }: { fix?: boolean } = {}) {
52
+ const [appNames, libNames, pkgNames] = await workspace.getExecs();
53
+ await Promise.all(appNames.map((appName) => this.applicationScript.sync(AppExecutor.from(workspace, appName))));
54
+ await Promise.all(libNames.map((libName) => this.libraryScript.syncLibrary(LibExecutor.from(workspace, libName))));
55
+ await Promise.all([
56
+ ...appNames.map((appName) => this.workspaceRunner.lint(AppExecutor.from(workspace, appName), workspace, { fix })),
57
+ ...libNames.map((libName) => this.workspaceRunner.lint(LibExecutor.from(workspace, libName), workspace, { fix })),
58
+ ...pkgNames
59
+ .filter((pkgName) => pkgName !== "contract")
60
+ .map((pkgName) => this.workspaceRunner.lint(PkgExecutor.from(workspace, pkgName), workspace, { fix })),
61
+ ]);
62
+ }
63
+ async syncAll(workspace: Workspace) {
64
+ const [appNames, libNames] = await workspace.getExecs();
65
+ for (const libName of libNames) await this.libraryScript.syncLibrary(LibExecutor.from(workspace, libName));
66
+ for (const appName of appNames) await this.applicationScript.sync(AppExecutor.from(workspace, appName));
67
+ }
68
+ }
@@ -0,0 +1,68 @@
1
+ type CapacitorModuleMap = {
2
+ app: typeof import("@capacitor/app");
3
+ browser: typeof import("@capacitor/browser");
4
+ camera: typeof import("@capacitor/camera");
5
+ contacts: typeof import("@capacitor-community/contacts");
6
+ device: typeof import("@capacitor/device");
7
+ fcm: typeof import("@capacitor-community/fcm");
8
+ geolocation: typeof import("@capacitor/geolocation");
9
+ haptics: typeof import("@capacitor/haptics");
10
+ keyboard: typeof import("@capacitor/keyboard");
11
+ pushNotifications: typeof import("@capacitor/push-notifications");
12
+ safeArea: typeof import("capacitor-plugin-safe-area");
13
+ updater: typeof import("@capgo/capacitor-updater");
14
+ };
15
+
16
+ type CapacitorImportCache = Partial<{
17
+ [K in keyof CapacitorModuleMap]: Promise<CapacitorModuleMap[keyof CapacitorModuleMap]>;
18
+ }>;
19
+
20
+ declare global {
21
+
22
+ var __AKAN_CAPACITOR_IMPORTS__: CapacitorImportCache | undefined;
23
+ }
24
+
25
+ const getCapacitorImportCache = () => {
26
+ globalThis.__AKAN_CAPACITOR_IMPORTS__ ??= {};
27
+ return globalThis.__AKAN_CAPACITOR_IMPORTS__;
28
+ };
29
+
30
+ const loadCapacitorModule = <K extends keyof CapacitorModuleMap>(
31
+ name: K,
32
+ loader: () => Promise<CapacitorModuleMap[K]>,
33
+ ) => {
34
+ const cache = getCapacitorImportCache();
35
+ const cached = cache[name] as Promise<CapacitorModuleMap[K]> | undefined;
36
+ if (cached) return cached;
37
+
38
+ const loaded = loader();
39
+ cache[name] = loaded;
40
+ return loaded;
41
+ };
42
+
43
+ export const loadCapacitorApp = () => loadCapacitorModule("app", () => import("@capacitor/app"));
44
+
45
+ export const loadCapacitorBrowser = () => loadCapacitorModule("browser", () => import("@capacitor/browser"));
46
+
47
+ export const loadCapacitorCamera = () => loadCapacitorModule("camera", () => import("@capacitor/camera"));
48
+
49
+ export const loadCapacitorContacts = () =>
50
+ loadCapacitorModule("contacts", () => import("@capacitor-community/contacts"));
51
+
52
+ export const loadCapacitorDevice = () => loadCapacitorModule("device", () => import("@capacitor/device"));
53
+
54
+ export const loadCapacitorFcm = () => loadCapacitorModule("fcm", () => import("@capacitor-community/fcm"));
55
+
56
+ export const loadCapacitorGeolocation = () =>
57
+ loadCapacitorModule("geolocation", () => import("@capacitor/geolocation"));
58
+
59
+ export const loadCapacitorHaptics = () => loadCapacitorModule("haptics", () => import("@capacitor/haptics"));
60
+
61
+ export const loadCapacitorKeyboard = () => loadCapacitorModule("keyboard", () => import("@capacitor/keyboard"));
62
+
63
+ export const loadCapacitorPushNotifications = () =>
64
+ loadCapacitorModule("pushNotifications", () => import("@capacitor/push-notifications"));
65
+
66
+ export const loadCapacitorSafeArea = () => loadCapacitorModule("safeArea", () => import("capacitor-plugin-safe-area"));
67
+
68
+ export const loadCapacitorUpdater = () => loadCapacitorModule("updater", () => import("@capgo/capacitor-updater"));
@@ -0,0 +1,141 @@
1
+ import type { SliceMeta } from "akanjs/fetch";
2
+ import type { ReactNode } from "react";
3
+ import type { TransMessageOption } from "./makePageProto";
4
+
5
+ type RuntimeTranslate = ((key: string, param?: Record<string, string | number>) => string) & {
6
+ _: (key: string, param?: Record<string, string | number>) => string;
7
+ rich: (key: string, param?: Record<string, string | number>) => ReactNode;
8
+ trans: <Returns extends ReactNode>(
9
+ translation: Record<"en" | "ko" | (string & {}), Returns>,
10
+ ) => Returns extends string ? string : Returns;
11
+ };
12
+
13
+ type RuntimePage = {
14
+ path: string;
15
+ l: RuntimeTranslate;
16
+ lang: string;
17
+ };
18
+
19
+ type RuntimeMsg = {
20
+ info: (key: string, option?: TransMessageOption) => void;
21
+ success: (key: string, option?: TransMessageOption) => void;
22
+ error: (key: string, option?: TransMessageOption) => void;
23
+ warning: (key: string, option?: TransMessageOption) => void;
24
+ loading: (key: string, option?: TransMessageOption) => void;
25
+ };
26
+
27
+ type RuntimeErr = {
28
+ new (key: string, data?: Record<string, unknown>, option?: Record<string, unknown>): Error;
29
+ BadRequest?: RuntimeErr;
30
+ Conflict?: RuntimeErr;
31
+ Forbidden?: RuntimeErr;
32
+ NotFound?: RuntimeErr;
33
+ Unauthorized?: RuntimeErr;
34
+ fromJSON?: (payload: Record<string, unknown>) => Error;
35
+ [key: string]: unknown;
36
+ };
37
+
38
+ type RuntimeWs = {
39
+ connected: boolean;
40
+ on: (event: string, handler: (...args: unknown[]) => void) => void;
41
+ off: (event: string, handler: (...args: unknown[]) => void) => void;
42
+ };
43
+
44
+ type RuntimeFetch = typeof globalThis.fetch & {
45
+ instance: unknown;
46
+ origin: string;
47
+ serializedSignal: Record<string, unknown>;
48
+ setJwt: (jwt: string | null) => void;
49
+ slice: Record<string, SliceMeta>;
50
+ ws: RuntimeWs;
51
+ [key: string]: unknown;
52
+ };
53
+
54
+ export interface ClientRuntime {
55
+ msg: RuntimeMsg;
56
+ Err: RuntimeErr;
57
+ usePage: () => RuntimePage;
58
+ fetch: RuntimeFetch;
59
+ sig: Record<PropertyKey, unknown>;
60
+ }
61
+
62
+ const CLIENT_RUNTIME_KEY = Symbol.for("akanjs.client.runtime");
63
+
64
+ type RuntimeScope = "app" | "lib";
65
+
66
+ type RuntimeState = {
67
+ runtime: ClientRuntime | null;
68
+ scope: RuntimeScope | null;
69
+ };
70
+
71
+ const globalWithRuntime = globalThis as typeof globalThis & { [CLIENT_RUNTIME_KEY]?: RuntimeState };
72
+ const state = globalWithRuntime[CLIENT_RUNTIME_KEY] ?? { runtime: null, scope: null };
73
+ globalWithRuntime[CLIENT_RUNTIME_KEY] = state;
74
+
75
+ const missingRuntimeError = () =>
76
+ new Error("Akan client runtime is not registered. Import the generated app client first.");
77
+
78
+ export const registerClientRuntime = <Runtime>(
79
+ runtime: Runtime,
80
+ { scope = "app" }: { scope?: RuntimeScope } = {},
81
+ ): Runtime => {
82
+ if (state.scope === "app" && scope === "lib") return runtime;
83
+ state.runtime = runtime as ClientRuntime;
84
+ state.scope = scope;
85
+ return runtime;
86
+ };
87
+
88
+ export const getClientRuntime = () => {
89
+ if (!state.runtime) throw missingRuntimeError();
90
+ return state.runtime;
91
+ };
92
+
93
+ export const isClientRuntimeRegistered = () => state.runtime !== null;
94
+
95
+ export const msg = new Proxy({} as ClientRuntime["msg"], {
96
+ get(_target, prop, receiver) {
97
+ return Reflect.get(getClientRuntime().msg, prop, receiver);
98
+ },
99
+ });
100
+
101
+ const ErrTarget = function AkanClientRuntimeErr(...args: ConstructorParameters<RuntimeErr>) {
102
+ return Reflect.construct(getClientRuntime().Err, args);
103
+ } as unknown as RuntimeErr;
104
+
105
+ Object.defineProperty(ErrTarget, Symbol.hasInstance, {
106
+ value(instance: unknown) {
107
+ return instance instanceof getClientRuntime().Err;
108
+ },
109
+ });
110
+
111
+ export const Err = new Proxy(ErrTarget, {
112
+ get(_target, prop, receiver) {
113
+ return Reflect.get(getClientRuntime().Err, prop, receiver);
114
+ },
115
+ construct(_target, args) {
116
+ return Reflect.construct(getClientRuntime().Err, args);
117
+ },
118
+ apply(_target, _thisArg, args) {
119
+ return Reflect.construct(getClientRuntime().Err, args);
120
+ },
121
+ });
122
+
123
+ export const usePage: ClientRuntime["usePage"] = (...args) => getClientRuntime().usePage(...args);
124
+
125
+ export const fetch = new Proxy((...args: Parameters<typeof globalThis.fetch>) => getClientRuntime().fetch(...args), {
126
+ get(_target, prop, receiver) {
127
+ return Reflect.get(getClientRuntime().fetch, prop, receiver);
128
+ },
129
+ set(_target, prop, value, receiver) {
130
+ return Reflect.set(getClientRuntime().fetch, prop, value, receiver);
131
+ },
132
+ apply(_target, thisArg, args) {
133
+ return Reflect.apply(getClientRuntime().fetch, thisArg, args);
134
+ },
135
+ }) as RuntimeFetch;
136
+
137
+ export const sig = new Proxy({} as ClientRuntime["sig"], {
138
+ get(_target, prop, receiver) {
139
+ return Reflect.get(getClientRuntime().sig, prop, receiver);
140
+ },
141
+ });
@@ -0,0 +1,121 @@
1
+ import { getEnv } from "akanjs/base";
2
+ import { Logger } from "akanjs/common";
3
+ import type { Account } from "akanjs/fetch";
4
+ import { requestStorage } from "akanjs/fetch";
5
+ import Cookies from "js-cookie";
6
+ import { jwtDecode } from "jwt-decode";
7
+ import { storage } from "./storage";
8
+ import { fetch } from "./useClient";
9
+
10
+ function parseCookieHeader(cookieHeader: string): Map<string, { name: string; value: string }> {
11
+ const entries = cookieHeader
12
+ .split(";")
13
+ .map((c) => c.trim())
14
+ .filter(Boolean)
15
+ .map((c) => {
16
+ const eqIdx = c.indexOf("=");
17
+ if (eqIdx === -1) return null;
18
+ const name = c.slice(0, eqIdx).trim();
19
+ const raw = c.slice(eqIdx + 1).trim();
20
+ const value = typeof raw === "string" && raw.startsWith("j:") ? (JSON.parse(raw.slice(2)) as string) : raw;
21
+ return [name, { name, value }] as const;
22
+ })
23
+ .filter((e): e is NonNullable<typeof e> => e !== null);
24
+ return new Map(entries);
25
+ }
26
+
27
+ export const cookies = (): Map<string, { name: string; value: string }> => {
28
+ if (getEnv().side === "server") {
29
+ const req = requestStorage?.getStore();
30
+ if (!req) return new Map();
31
+ return parseCookieHeader(req.headers.get("cookie") ?? "");
32
+ }
33
+ const cookie = Cookies.get();
34
+ return new Map(
35
+ Object.entries(cookie).map(([key, value]) => [
36
+ key,
37
+ {
38
+ name: key,
39
+ value: typeof value === "string" && value.startsWith("j:") ? (JSON.parse(value.slice(2)) as string) : value,
40
+ },
41
+ ]),
42
+ );
43
+ };
44
+
45
+ export const setCookie = (
46
+ key: string,
47
+ value: string,
48
+ options: Cookies.CookieAttributes = { path: "/", sameSite: "none", secure: true },
49
+ ) => {
50
+ if (getEnv().side === "server") return;
51
+ else
52
+ void import("@capacitor/core").then(({ CapacitorCookies }) =>
53
+ CapacitorCookies.setCookie({ key, value, path: options.path }),
54
+ );
55
+ };
56
+
57
+ export const getCookie = (key: string): string | undefined => {
58
+ if (getEnv().side === "server") return cookies().get(key)?.value;
59
+ else
60
+ return document.cookie
61
+ .split(";")
62
+ .find((c) => c.trim().startsWith(`${key}=`))
63
+ ?.split("=")[1];
64
+ };
65
+
66
+ export const removeCookie = (key: string, options: { path: string } = { path: "/" }) => {
67
+ if (getEnv().side === "server") return cookies().delete(key);
68
+ else {
69
+ document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
70
+ }
71
+ };
72
+ export const headers = (): Map<string, string> => {
73
+ if (getEnv().side !== "server") return new Map();
74
+ const req = requestStorage?.getStore();
75
+ if (!req) return new Map();
76
+ const map = new Map<string, string>();
77
+ req.headers.forEach((value, key) => {
78
+ map.set(key, value);
79
+ });
80
+ return map;
81
+ };
82
+
83
+ export const getHeader = (key: string): string | undefined => {
84
+ return headers().get(key);
85
+ };
86
+ /** Decodes the current JWT into account data when it belongs to this app/environment. */
87
+ export const getAccount = <AddData = unknown>(): Account<AddData> => {
88
+ const jwt = getCookie("jwt") ?? getHeader("jwt");
89
+ const defaultAccount = { appName: getEnv().appName, environment: getEnv().environment } as Account<AddData>;
90
+ if (!jwt) return defaultAccount;
91
+ const account: Account<AddData> = jwtDecode<Account<AddData>>(jwt);
92
+ if (account.appName !== getEnv().appName || account.environment !== getEnv().environment) return defaultAccount;
93
+ return account;
94
+ };
95
+ export interface GetOption {
96
+ unauthorize: string;
97
+ }
98
+ interface SetAuthOption {
99
+ jwt: string;
100
+ }
101
+ /** Sets the active auth token on fetch, cookie storage, and client storage. */
102
+ export const setAuth = ({ jwt }: SetAuthOption) => {
103
+ fetch.setJwt(jwt);
104
+ setCookie("jwt", jwt);
105
+ void storage.setItem("jwt", jwt);
106
+ };
107
+
108
+ interface InitAuthOption {
109
+ jwt?: string;
110
+ }
111
+ export const initAuth = ({ jwt }: InitAuthOption = {}) => {
112
+ const token = jwt ?? cookies().get("jwt")?.value;
113
+ if (token) setAuth({ jwt: token });
114
+ Logger.verbose(`JWT set from cookie: ${token}`);
115
+ };
116
+
117
+ export const resetAuth = () => {
118
+ fetch.setJwt(null);
119
+ removeCookie("jwt");
120
+ void storage.removeItem("jwt");
121
+ };
@@ -0,0 +1,8 @@
1
+
2
+
3
+ export const createFont = (_data: unknown) => null;
4
+ export default createFont;
5
+ export const Nanum_Gothic_Coding = createFont;
6
+ export const Noto_Sans_KR = createFont;
7
+ export const Inter = createFont;
8
+ export const Roboto = createFont;
@@ -0,0 +1,259 @@
1
+ "use client";
2
+ import type { ReactDOMAttributes } from "@use-gesture/react/dist/declarations/src/types";
3
+ import type { PromiseOrObject } from "akanjs/base";
4
+ import { createContext, type ForwardRefExoticComponent, type ReactNode, type RefObject, useContext } from "react";
5
+ import type { AnimatedComponent, AnimatedProps, Interpolation, SpringValue } from "react-spring";
6
+ import type { RouterInstance } from "./router";
7
+ import type { ReactFont } from "./types";
8
+
9
+ export type TransitionType = "none" | "fade" | "bottomUp" | "stack" | "scaleOut";
10
+ /** Per-page CSR configuration for transition, safe-area, gesture, and cache behavior. */
11
+ export interface PageConfig {
12
+ transition?: TransitionType;
13
+ safeArea?: boolean | "top" | "bottom";
14
+ topInset?: boolean | number;
15
+ /**
16
+ * @default 48px
17
+ */
18
+ bottomInset?: boolean | number;
19
+ gesture?: boolean;
20
+ cache?: boolean;
21
+ rscCache?: "public" | false;
22
+ rscCacheTtl?: number;
23
+ topSafeAreaColor?: string;
24
+ bottomSafeAreaColor?: string;
25
+ }
26
+
27
+ export interface CsrState {
28
+ transition: TransitionType;
29
+ topSafeArea: number;
30
+ bottomSafeArea: number;
31
+ topInset: number;
32
+ bottomInset: number;
33
+ gesture: boolean;
34
+ cache: boolean;
35
+ topSafeAreaColor?: string;
36
+ bottomSafeAreaColor?: string;
37
+ }
38
+ export const DEFAULT_TOP_INSET = 48;
39
+ export const DEFAULT_BOTTOM_INSET = 60;
40
+ export interface PageProps {
41
+ params: { [key: string]: string };
42
+ searchParams: { [key: string]: string | string[] };
43
+ }
44
+ /** Props passed to Akan layout route modules. */
45
+ export interface LayoutProps extends PageProps {
46
+ children: ReactNode;
47
+ }
48
+ export interface PageLoadingProps {
49
+ params: { [key: string]: string };
50
+ }
51
+ export interface LayoutLoadingProps extends PageLoadingProps {
52
+ children: ReactNode;
53
+ }
54
+ export type Head = ReactNode;
55
+ export type GenerateHead = (props: PageProps) => PromiseOrObject<Head | null | undefined>;
56
+ export type ResolveHead = (props: PageProps) => PromiseOrObject<Head | null | undefined>;
57
+ export type HeadProps = PageProps;
58
+ export type PageRender = (props: PageProps) => PromiseOrObject<ReactNode>;
59
+ export type LayoutRender = (props: LayoutProps) => PromiseOrObject<ReactNode>;
60
+ export type PageLoadingRender = (props: PageLoadingProps) => PromiseOrObject<ReactNode>;
61
+ export type LayoutLoadingRender = (props: LayoutLoadingProps) => PromiseOrObject<ReactNode>;
62
+ export interface RouteRender {
63
+ render: LayoutRender | PageRender;
64
+ Loading?: LayoutLoadingRender | PageLoadingRender;
65
+ resolveHead?: ResolveHead;
66
+ getPageConfig?: () => PromiseOrObject<PageConfig | undefined>;
67
+ }
68
+ export interface WebAppManifestIcon {
69
+ src: string;
70
+ sizes?: string;
71
+ type?: string;
72
+ purpose?: string;
73
+ [key: string]: unknown;
74
+ }
75
+ export interface WebAppManifest {
76
+ name?: string;
77
+ shortName?: string;
78
+ startUrl?: string;
79
+ scope?: string;
80
+ display?: "fullscreen" | "standalone" | "minimal-ui" | "browser" | (string & {});
81
+ displayOverride?: string[];
82
+ orientation?: string;
83
+ themeColor?: string;
84
+ backgroundColor?: string;
85
+ description?: string;
86
+ lang?: string;
87
+ dir?: "ltr" | "rtl" | "auto";
88
+ icons?: WebAppManifestIcon[];
89
+ categories?: string[];
90
+ screenshots?: WebAppManifestIcon[];
91
+ [key: string]: unknown;
92
+ }
93
+ export interface PageModule {
94
+ default?: PageRender;
95
+ pageConfig?: PageConfig;
96
+ head?: Head;
97
+ generateHead?: GenerateHead;
98
+ Loading?: PageLoadingRender;
99
+ }
100
+ export interface LayoutModule {
101
+ default?: LayoutRender;
102
+ head?: Head;
103
+ generateHead?: GenerateHead;
104
+ fonts?: ReactFont[];
105
+ manifest?: WebAppManifest;
106
+ theme?: string;
107
+ reconnect?: boolean;
108
+ layoutStyle?: "mobile" | "web";
109
+ gaTrackingId?: string;
110
+ Loading?: LayoutLoadingRender;
111
+ }
112
+ export type RouteModule = PageModule | LayoutModule;
113
+ export interface Route {
114
+ csrConfig?: PageConfig;
115
+ path: string;
116
+ renderPage?: RouteRender;
117
+ renderLayout?: RouteRender;
118
+ pageIncludesOwnLayout?: boolean;
119
+ isSpecialRoute?: boolean;
120
+
121
+ loader?: () => any;
122
+ pageState?: PageState;
123
+
124
+ children: Map<string, Route>;
125
+ }
126
+
127
+ export type AnimatedDivProps =
128
+ AnimatedComponent<"div"> extends ForwardRefExoticComponent<AnimatedProps<infer P>> ? P : never;
129
+ export type TransitionStyle = AnimatedDivProps["style"];
130
+
131
+ export interface SafeAreaTransition {
132
+ containerStyle: TransitionStyle;
133
+ }
134
+ export interface ContainerTransition {
135
+ containerStyle: TransitionStyle;
136
+ contentStyle: TransitionStyle;
137
+ prevContentStyle: TransitionStyle;
138
+ }
139
+ export interface PageTransition {
140
+ containerStyle: TransitionStyle;
141
+ contentStyle: TransitionStyle;
142
+ }
143
+ export interface CsrTransitionStyles {
144
+ topSafeArea: SafeAreaTransition | null;
145
+ page: PageTransition | null;
146
+ prevPage: PageTransition | null;
147
+ topInset: ContainerTransition | null;
148
+ bottomInset: ContainerTransition | null;
149
+ topLeftAction: ContainerTransition | null;
150
+ bottomSafeArea: SafeAreaTransition | null;
151
+ }
152
+
153
+ export type PageState = CsrState & {
154
+ topInset: number;
155
+ bottomInset: number;
156
+ };
157
+ export const defaultPageState: PageState = {
158
+ transition: "none",
159
+ topSafeArea: 0,
160
+ bottomSafeArea: 0,
161
+ topInset: 0,
162
+ bottomInset: 0,
163
+ gesture: true,
164
+ cache: false,
165
+ topSafeAreaColor: "transparent",
166
+ bottomSafeAreaColor: "transparent",
167
+ };
168
+
169
+ export interface Location {
170
+ href: string;
171
+ pathname: string;
172
+ search: string;
173
+ params: { [key: string]: string };
174
+ searchParams: { [key: string]: string | string[] };
175
+ pathRoute: PathRoute;
176
+ hash: string;
177
+ }
178
+ export interface LocationState {
179
+ location: Location;
180
+ prevLocation: Location | null;
181
+ }
182
+ export interface History {
183
+ type: "initial" | "forward" | "back";
184
+ locations: Location[];
185
+ scrollMap: Map<string, number>;
186
+ idxMap: Map<string, number>;
187
+ cachedLocationMap: Map<string, Location>;
188
+ idx: number;
189
+ }
190
+
191
+ export interface RouterProps {
192
+ push: (path: string) => void;
193
+ replace: (path: string) => void;
194
+ refresh: () => void;
195
+ back: () => void | Promise<void>;
196
+ }
197
+
198
+ export interface RouteState {
199
+ clientWidth: number;
200
+ clientHeight: number;
201
+ location: Location;
202
+ prevLocation: Location | null;
203
+ history: RefObject<History>;
204
+ topSafeAreaRef: RefObject<HTMLDivElement | null>;
205
+ bottomSafeAreaRef: RefObject<HTMLDivElement | null>;
206
+ prevPageContentRef: RefObject<HTMLDivElement | null>;
207
+ pageContentRef: RefObject<HTMLDivElement | null>;
208
+ frameRootRef: RefObject<HTMLDivElement | null>;
209
+ onBack: RefObject<{ [K in TransitionType]?: () => Promise<void> }>;
210
+ router: RouterInstance;
211
+ pathRoutes: PathRoute[];
212
+ }
213
+
214
+ export type UseCsrTransition = CsrTransitionStyles & {
215
+ pageBind: (...args: any[]) => ReactDOMAttributes;
216
+ pageClassName: string;
217
+ transDirection: "vertical" | "horizontal" | "none";
218
+ transUnitRange: number[];
219
+ transUnit: SpringValue<number>;
220
+ transPercent: Interpolation<number>;
221
+ transProgress: Interpolation<number>;
222
+ };
223
+
224
+ export type CsrContextType = RouteState & UseCsrTransition;
225
+ export const csrContext = createContext<CsrContextType>({} as unknown as CsrContextType);
226
+ export const useCsr = () => {
227
+ const contextValues = useContext(csrContext);
228
+ return contextValues;
229
+ };
230
+
231
+ export interface PathContextType {
232
+ pageType: "current" | "prev" | "cached";
233
+ location: Location;
234
+ prefix?: string;
235
+ gestureEnabled: boolean;
236
+ setGestureEnabled: (enabled: boolean) => void;
237
+ }
238
+ export const pathContext = createContext<PathContextType>({} as unknown as PathContextType);
239
+ export const usePathCtx = () => {
240
+ const contextValues = useContext(pathContext);
241
+ return contextValues;
242
+ };
243
+
244
+ export interface PathRoute {
245
+ path: string;
246
+ pathSegments: string[];
247
+ renderPage: RouteRender;
248
+ pageState: PageState;
249
+ renderRootLayouts: RouteRender[];
250
+ renderLayouts: RouteRender[];
251
+ resolveHead?: ResolveHead;
252
+ isSpecialRoute?: boolean;
253
+ }
254
+
255
+ export interface RouteGuide {
256
+ pathSegment: string;
257
+ pathRoute?: PathRoute;
258
+ children: { [key: string]: RouteGuide };
259
+ }
@@ -0,0 +1,25 @@
1
+ import { Logger } from "akanjs/common";
2
+ import { msg } from "./useClient";
3
+
4
+ interface ToastProps {
5
+ root?: string;
6
+ duration?: number;
7
+ }
8
+ /** Decorates async actions with loading/success/error toast messages from `msg`. */
9
+ export const Toast = ({ root, duration = 3 }: ToastProps = {}) => {
10
+ return (target: any, key: string, descriptor: PropertyDescriptor) => {
11
+ const originMethod = descriptor.value as (...args: any[]) => Promise<void>;
12
+ descriptor.value = async function (...args: any[]) {
13
+ try {
14
+ msg.loading(`${root ? `${root}.` : ""}${key}-loading` as any, { key, duration });
15
+ const result = (await originMethod.apply(this, args)) as unknown;
16
+ msg.success(`${root ? `${root}.` : ""}${key}-success` as any, { key, duration });
17
+ return result;
18
+ } catch (err) {
19
+ const errKey = typeof err === "string" ? err : (err as Error).message;
20
+ msg.error(errKey as any, { key, duration });
21
+ Logger.error(`${key} action error return: ${err}`);
22
+ }
23
+ };
24
+ };
25
+ };