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,11 @@
1
+ export const FIELD_META = Symbol.for("akanjs.field");
2
+ export const SLICE_META = Symbol.for("akanjs.slice");
3
+ export const FILTER_META = Symbol.for("akanjs.filter");
4
+ export const LOADER_META = Symbol.for("akanjs.loader");
5
+ export const INJECT_META = Symbol.for("akanjs.inject");
6
+ export const ENDPOINT_META = Symbol.for("akanjs.endpoint");
7
+ export const INTERNAL_META = Symbol.for("akanjs.internal");
8
+ export const STATE_META = Symbol.for("akanjs.state");
9
+ export const STATE_INIT_META = Symbol.for("akanjs.state.init");
10
+ export const STATE_DERIVED_META = Symbol.for("akanjs.state.derived");
11
+ export const ACTION_META = Symbol.for("akanjs.action");
package/base/types.ts ADDED
@@ -0,0 +1,137 @@
1
+ import type { Dayjs } from "dayjs";
2
+
3
+ export type SshOptions = { host: string; port: number; username: string; password: string; dstPort?: number };
4
+
5
+ export type Cls<T = unknown, Statics = unknown> = (new (...args: never[]) => T) & Statics;
6
+
7
+ export type BufferLike =
8
+ | string
9
+ | Buffer
10
+ | DataView
11
+ | number
12
+ | ArrayBufferView
13
+ | Uint8Array
14
+ | ArrayBuffer
15
+ | SharedArrayBuffer
16
+ | readonly unknown[]
17
+ | readonly number[];
18
+
19
+ export type GetObject<T> = {
20
+ [K in keyof T as K extends "prototype" ? never : K]: T[K];
21
+ };
22
+ export type OptionOf<Obj> = Partial<{
23
+ [K in keyof Obj]: Obj[K] | null;
24
+ }>;
25
+ export type UnCls<T> = T extends new (...args: infer _Args) => infer U ? U : never;
26
+
27
+ export type Prettify<T> = {
28
+ [K in keyof T]: T[K];
29
+ } & {};
30
+
31
+ export type GetStateObject<T> = {
32
+ [K in keyof T as T[K] extends (...args: never[]) => unknown ? never : K extends "prototype" ? never : K]: T[K];
33
+ };
34
+ export type GetActionObject<T> = {
35
+ [K in keyof T as T[K] extends (...args: never[]) => unknown ? (K extends "prototype" ? never : K) : never]: T[K];
36
+ };
37
+
38
+ export type PromiseOrObject<T> = T | Promise<T>;
39
+ type MergeObjectValues<T> = T extends Record<string, infer V> ? (V extends object ? V : never) : never;
40
+ type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
41
+ export type MergedValues<T> = UnionToIntersection<MergeObjectValues<T>>;
42
+ export type Assign<A, B> = Omit<A, keyof B> & B;
43
+
44
+ export type ObjectAssign<Objects extends object[], Acc = unknown> = Objects extends [
45
+ infer First extends object,
46
+ ...infer Rest extends object[],
47
+ ]
48
+ ? ObjectAssign<Rest, Assign<Acc, First>>
49
+ : Acc;
50
+
51
+ export type MergeAll<T extends object[], Acc = unknown> = T extends [
52
+ infer First extends object,
53
+ ...infer Rest extends object[],
54
+ ]
55
+ ? MergeAll<Rest, Acc & First>
56
+ : Acc;
57
+
58
+ export type MergeAllActionTypes<T extends Cls[], OmitKey extends string = never, Acc = unknown> = T extends [
59
+ infer First extends Cls,
60
+ ...infer Rest extends Cls[],
61
+ ]
62
+ ? Rest extends []
63
+ ? Acc & Omit<GetActionObject<UnCls<First>>, OmitKey>
64
+ : MergeAllActionTypes<Rest, OmitKey, Acc & Omit<UnCls<First>, OmitKey>>
65
+ : Acc;
66
+
67
+ export type MergeAllTypes<T extends Cls[], OmitKey extends string = never, Acc = unknown> = T extends [
68
+ infer First extends Cls,
69
+ ...infer Rest extends Cls[],
70
+ ]
71
+ ? MergeAllTypes<Rest, OmitKey, Acc & Omit<UnCls<First>, OmitKey>>
72
+ : Acc;
73
+
74
+ export type MergeAllKeyOfTypes<T extends Cls<object>[], Key extends PropertyKey, Acc = unknown> = T extends [
75
+ infer First extends Cls<object>,
76
+ ...infer Rest extends Cls<object>[],
77
+ ]
78
+ ? Key extends keyof UnCls<First>
79
+ ? MergeAllKeyOfTypes<Rest, Key, Acc & UnCls<First>[Key]>
80
+ : MergeAllKeyOfTypes<Rest, Key, Acc>
81
+ : Acc;
82
+
83
+ export type MergeAllKeyOfObjects<T extends object[], Key extends PropertyKey, Acc = unknown> = T extends [
84
+ infer First extends object,
85
+ ...infer Rest extends object[],
86
+ ]
87
+ ? Key extends keyof First
88
+ ? MergeAllKeyOfObjects<Rest, Key, Acc & First[Key]>
89
+ : MergeAllKeyOfObjects<Rest, Key, Acc>
90
+ : Acc;
91
+
92
+ export type MergeAllDoubleKeyOfObjects<
93
+ T extends object[],
94
+ Key extends PropertyKey,
95
+ SubKey extends PropertyKey,
96
+ Acc = unknown,
97
+ > = T extends [infer First extends object, ...infer Rest extends object[]]
98
+ ? Key extends keyof First
99
+ ? First[Key] extends object
100
+ ? SubKey extends keyof First[Key]
101
+ ? MergeAllDoubleKeyOfObjects<Rest, Key, SubKey, Acc & First[Key][SubKey]>
102
+ : MergeAllDoubleKeyOfObjects<Rest, Key, SubKey, Acc>
103
+ : MergeAllDoubleKeyOfObjects<Rest, Key, SubKey, Acc>
104
+ : MergeAllDoubleKeyOfObjects<Rest, Key, SubKey, Acc>
105
+ : Acc;
106
+
107
+ export type Primitive = string | number | boolean | null | undefined;
108
+
109
+ export type NestedKeysWithAllowed<T, Allowed = Primitive> = T extends Primitive
110
+ ? never
111
+ : T extends unknown[]
112
+ ? never
113
+ : T extends (...args: never[]) => unknown
114
+ ? never
115
+ : {
116
+ [K in keyof T & string]: T[K] extends Allowed
117
+ ? K
118
+ : T[K] extends Dayjs
119
+ ? never
120
+ : T[K] extends readonly unknown[]
121
+ ? never
122
+ : T[K] extends (...args: never[]) => unknown
123
+ ? never
124
+ : T[K] extends object
125
+ ? K | `${K}.${NestedKeysWithAllowed<T[K], Allowed>}`
126
+ : never;
127
+ }[keyof T & string];
128
+
129
+ export type SingleValue<Value> = Value extends (infer V)[] ? SingleValue<V> : Value;
130
+
131
+ export type StrArrToObject<Arr, Value> = Arr extends [infer First, ...infer Rest]
132
+ ? { [K in First & string]: Value } & StrArrToObject<Rest, Value>
133
+ : unknown;
134
+
135
+ export type GetValueOfKey<Model, Key extends string, Fallback = never> = Model extends { [key in Key]: unknown }
136
+ ? Model[Key]
137
+ : Fallback;
package/base/utils.ts ADDED
@@ -0,0 +1,30 @@
1
+ export const getNonArrayModel = <T>(arraiedModel: T | T[]): [T, number] => {
2
+ let arrDepth = 0;
3
+ let target: T | T[] = arraiedModel;
4
+ while (Array.isArray(target)) {
5
+ target = target[0] as T;
6
+ arrDepth++;
7
+ }
8
+ return [target, arrDepth];
9
+ };
10
+ export const arraiedModel = <T = unknown>(modelRef: T, arrDepth = 0) => {
11
+ let target: T | T[] | T[][] | T[][][] = modelRef;
12
+ for (let i = 0; i < arrDepth; i++) target = [target as T];
13
+ return target;
14
+ };
15
+
16
+ export type ApplyFnToArrayObjectsResult<Input, Output> = Input extends readonly (infer Item)[]
17
+ ? ApplyFnToArrayObjectsResult<Item, Output>[]
18
+ : Output;
19
+
20
+ export const applyFnToArrayObjects = <Input, Fn extends (arg: never) => unknown>(
21
+ arraiedData: Input,
22
+ fn: Fn,
23
+ ): ApplyFnToArrayObjectsResult<Input, ReturnType<Fn>> => {
24
+ if (Array.isArray(arraiedData))
25
+ return arraiedData.map((data) => applyFnToArrayObjects(data, fn)) as ApplyFnToArrayObjectsResult<
26
+ Input,
27
+ ReturnType<Fn>
28
+ >;
29
+ return fn(arraiedData as never) as ApplyFnToArrayObjectsResult<Input, ReturnType<Fn>>;
30
+ };
@@ -0,0 +1,213 @@
1
+ import { select } from "@inquirer/prompts";
2
+ import { App, command, Exec, Sys, Workspace } from "akanjs/devkit";
3
+
4
+ import { ApplicationScript } from "./application.script";
5
+
6
+ const asMobileEnv = (env: string) => env as "local" | "debug" | "develop" | "main";
7
+
8
+ export class ApplicationCommand extends command("application", [ApplicationScript], ({ public: target }) => ({
9
+ createApplication: target({ desc: "Create a new application in the workspace" })
10
+ .arg("appName", String, { desc: "name of application" })
11
+ .option("start", Boolean, { desc: "start application", default: false })
12
+ .with(Workspace)
13
+ .exec(async function (appName, start, workspace) {
14
+ await this.applicationScript.createApplication(appName.toLowerCase().replace(/ /g, "-"), workspace, { start });
15
+ }),
16
+ removeApplication: target({ desc: "Remove an application from the workspace" })
17
+ .with(App)
18
+ .exec(async function (app) {
19
+ await this.applicationScript.removeApplication(app);
20
+ }),
21
+ sync: target({ desc: "Sync dependencies and configuration for an app or library" })
22
+ .with(Sys)
23
+ .exec(async function (sys) {
24
+ await this.applicationScript.sync(sys);
25
+ }),
26
+ script: target({ desc: "Run a custom script in the application" })
27
+ .with(App)
28
+ .arg("filename", String, { desc: "name of script", nullable: true })
29
+ .exec(async function (app, filename) {
30
+ await this.applicationScript.script(app, filename);
31
+ }),
32
+ build: target({ short: true, desc: "Build the application for production (frontend + backend)" })
33
+ .with(App)
34
+ .option("write", Boolean, { desc: "write code generation", default: true })
35
+ .option("fast", Boolean, { desc: "fast build", default: false })
36
+ .option("quiet", Boolean, { desc: "hide build progress output", default: false })
37
+ .exec(async function (app, write, fast, quiet) {
38
+ await this.applicationScript.build(app, { write, fast, quiet });
39
+ }),
40
+ typecheck: target({ short: true, desc: "Typecheck the application" })
41
+ .with(App)
42
+ .option("write", Boolean, { desc: "write code generation", default: true })
43
+ .option("clean", Boolean, { desc: "clear typecheck cache before running", default: false })
44
+ .option("incremental", Boolean, { desc: "reuse TypeScript incremental cache", default: true })
45
+ .exec(async function (app, write, clean, incremental) {
46
+ await this.applicationScript.typecheck(app, { write, clean, incremental });
47
+ }),
48
+ test: target({ desc: "Prepare and test an app, library, or package" })
49
+ .with(Exec)
50
+ .option("write", Boolean, { desc: "write code generation", default: true })
51
+ .exec(async function (exec, write) {
52
+ await this.applicationScript.test(exec, { write });
53
+ }),
54
+ buildIos: target({ short: true, desc: "Build iOS app with Capacitor" })
55
+ .with(App)
56
+ .option("target", String, { desc: "mobile target name or all" })
57
+ .option("env", String, {
58
+ enum: ["local", "debug", "develop", "main"],
59
+ desc: "backend environment",
60
+ default: "debug",
61
+ })
62
+ .option("write", Boolean, { desc: "write code generation", default: true })
63
+ .option("regenerate", Boolean, { flag: "g", desc: "delete and regenerate native project", default: false })
64
+ .exec(async function (app, target, env, write, regenerate) {
65
+ await this.applicationScript.buildIos(app, { target, env: asMobileEnv(env), write, regenerate });
66
+ }),
67
+ buildAndroid: target({ short: true, desc: "Build Android app with Capacitor" })
68
+ .with(App)
69
+ .option("target", String, { desc: "mobile target name or all" })
70
+ .option("env", String, {
71
+ enum: ["local", "debug", "develop", "main"],
72
+ desc: "backend environment",
73
+ default: "debug",
74
+ })
75
+ .option("write", Boolean, { desc: "write code generation", default: true })
76
+ .option("regenerate", Boolean, { flag: "g", desc: "delete and regenerate native project", default: false })
77
+ .exec(async function (app, target, env, write, regenerate) {
78
+ await this.applicationScript.buildAndroid(app, { target, env: asMobileEnv(env), write, regenerate });
79
+ }),
80
+ start: target({ short: true, desc: "Start development server (frontend SSR + backend)" })
81
+ .with(App)
82
+ .option("open", Boolean, { desc: "open web browser?", default: false })
83
+ .option("write", Boolean, { desc: "write code generation", default: true })
84
+ .exec(async function (app, open, write) {
85
+ await this.applicationScript.start(app, { open, write });
86
+ }),
87
+ startIos: target({ short: true, desc: "Start iOS app in simulator or device" })
88
+ .with(App)
89
+ .option("target", String, { desc: "mobile target name or all" })
90
+ .option("env", String, {
91
+ enum: ["local", "debug", "develop", "main"],
92
+ desc: "backend environment",
93
+ default: "local",
94
+ })
95
+ .option("open", Boolean, { desc: "open ios simulator", default: false })
96
+ .option("release", Boolean, { desc: "release mode", default: false })
97
+ .option("write", Boolean, { desc: "write code generation", default: true })
98
+ .option("regenerate", Boolean, { flag: "g", desc: "delete and regenerate native project", default: false })
99
+ .exec(async function (app, target, env, open, release, write, regenerate) {
100
+ await this.applicationScript.startIos(app, {
101
+ target,
102
+ env: asMobileEnv(env),
103
+ open,
104
+ operation: release ? "release" : "local",
105
+ write,
106
+ regenerate,
107
+ });
108
+ }),
109
+ startAndroid: target({ short: true, desc: "Start Android app in emulator or device" })
110
+ .with(App)
111
+ .option("target", String, { desc: "mobile target name or all" })
112
+ .option("env", String, {
113
+ enum: ["local", "debug", "develop", "main"],
114
+ desc: "backend environment",
115
+ default: "local",
116
+ })
117
+ .option("release", Boolean, { desc: "release mode", default: false })
118
+ .option("open", Boolean, { desc: "open android simulator", default: false })
119
+ .option("write", Boolean, { desc: "write code generation", default: true })
120
+ .option("regenerate", Boolean, { flag: "g", desc: "delete and regenerate native project", default: false })
121
+ .exec(async function (app, target, env, release, open, write, regenerate) {
122
+ await this.applicationScript.startAndroid(app, {
123
+ target,
124
+ env: asMobileEnv(env),
125
+ open,
126
+ operation: release ? "release" : "local",
127
+ write,
128
+ regenerate,
129
+ });
130
+ }),
131
+ releaseIos: target({ desc: "Build and package iOS app for release (App Store)" })
132
+ .with(App)
133
+ .option("target", String, { desc: "mobile target name or all" })
134
+ .option("env", String, {
135
+ enum: ["debug", "develop", "main", "local"],
136
+ desc: "backend environment",
137
+ default: "main",
138
+ })
139
+ .option("write", Boolean, { desc: "write code generation", default: true })
140
+ .option("regenerate", Boolean, { flag: "g", desc: "delete and regenerate native project", default: false })
141
+ .option("allowLocalRelease", Boolean, { flag: "l", desc: "allow release with --env local", default: false })
142
+ .exec(async function (app, target, env, write, regenerate, allowLocalRelease) {
143
+ await this.applicationScript.releaseIos(app, {
144
+ target,
145
+ env: asMobileEnv(env),
146
+ write,
147
+ regenerate,
148
+ allowLocalRelease,
149
+ });
150
+ }),
151
+ releaseAndroid: target({ desc: "Build and package Android app for release (Play Store)" })
152
+ .with(App)
153
+ .option("assembleType", String, { enum: ["apk", "aab"], default: "apk" })
154
+ .option("target", String, { desc: "mobile target name or all" })
155
+ .option("env", String, {
156
+ enum: ["debug", "develop", "main", "local"],
157
+ desc: "backend environment",
158
+ default: "main",
159
+ })
160
+ .option("write", Boolean, { desc: "write code generation", default: true })
161
+ .option("regenerate", Boolean, { flag: "g", desc: "delete and regenerate native project", default: false })
162
+ .option("allowLocalRelease", Boolean, { flag: "l", desc: "allow release with --env local", default: false })
163
+ .exec(async function (app, assembleType, target, env, write, regenerate, allowLocalRelease) {
164
+ await this.applicationScript.releaseAndroid(app, assembleType as "apk" | "aab", {
165
+ target,
166
+ env: asMobileEnv(env),
167
+ write,
168
+ regenerate,
169
+ allowLocalRelease,
170
+ });
171
+ }),
172
+ releaseSource: target({ desc: "Release app source code with OTA update support" })
173
+ .with(App)
174
+ .option("rebuild", Boolean, { desc: "rebuild", default: false })
175
+ .option("buildNum", Number, { desc: "build number", default: 0 })
176
+ .option("environment", String, { desc: "environment", default: "debug" })
177
+ .option("local", Boolean, { desc: "local", default: true })
178
+ .exec(async function (app, rebuild, buildNum, environment, local) {
179
+ await this.applicationScript.releaseSource(app, { rebuild, buildNum, environment, local });
180
+ }),
181
+ codepush: target({ desc: "Deploy over-the-air (OTA) update for mobile app" })
182
+ .with(App)
183
+ .exec(async function (app) {
184
+ const os: "ios" | "android" = await select({
185
+ message: "Select os",
186
+ choices: [
187
+ { value: "ios", name: "ios", description: "ios" },
188
+ { value: "android", name: "android", description: "android" },
189
+ ],
190
+ });
191
+ await this.applicationScript.codepush(app, os);
192
+ }),
193
+ dbup: target({ desc: "Start local database services for a database mode" })
194
+ .with(Workspace)
195
+ .option("mode", String, {
196
+ desc: "database mode",
197
+ default: "multiple",
198
+ enum: ["single", "multiple", "cluster"],
199
+ })
200
+ .exec(async function (workspace, mode) {
201
+ await this.applicationScript.dbup(workspace, mode as "single" | "multiple" | "cluster");
202
+ }),
203
+ dbdown: target({ desc: "Stop local database services" })
204
+ .with(Workspace)
205
+ .exec(async function (workspace) {
206
+ await this.applicationScript.dbdown(workspace);
207
+ }),
208
+ configureApp: target({ desc: "Configure application settings interactively" })
209
+ .with(App)
210
+ .exec(async function (app) {
211
+ await this.applicationScript.configureApp(app);
212
+ }),
213
+ })) {}
@@ -0,0 +1,225 @@
1
+ "use client";
2
+ import type { ChildProcess } from "node:child_process";
3
+ import type EventEmitter from "node:events";
4
+ import { type App as AppType, MultiScrollList, useStdoutDimensions } from "akanjs/devkit";
5
+ import { Box, render, Text, useApp } from "ink";
6
+ import type React from "react";
7
+ import { useCallback, useEffect, useState } from "react";
8
+
9
+ interface BackendProps {
10
+ appName: string;
11
+ childProcess: ChildProcess;
12
+ onExit: () => void;
13
+ }
14
+
15
+ const Backend = ({ appName, childProcess, onExit }: BackendProps) => {
16
+ const [width, height] = useStdoutDimensions();
17
+ useEffect(() => {
18
+
19
+ return () => {
20
+ childProcess.kill();
21
+ onExit();
22
+ };
23
+ }, [childProcess, onExit]);
24
+
25
+ return (
26
+ <Box width={width} height={height}>
27
+ <Text bold>Akan.JS Backend</Text>
28
+ </Box>
29
+ );
30
+ };
31
+
32
+ interface FrontendProps {
33
+ appName: string;
34
+ childProcess: ChildProcess;
35
+ onExit: () => void;
36
+ }
37
+
38
+ const Frontend = ({ appName, childProcess, onExit }: FrontendProps) => {
39
+ const [logs, setLogs] = useState<string[]>([]);
40
+ const [width, height] = useStdoutDimensions();
41
+
42
+ useEffect(() => {
43
+ childProcess.stdout?.on("data", (data: Buffer) => {
44
+ const newOutput = data.toString().split("\n");
45
+ setLogs((prevLogs) => [...prevLogs, ...newOutput]);
46
+ });
47
+ childProcess.stderr?.on("data", (data: Buffer) => {
48
+ const newOutput = data.toString().split("\n");
49
+ setLogs((prevLogs) => [...prevLogs, ...newOutput]);
50
+ });
51
+
52
+ return () => {
53
+ childProcess.kill();
54
+ onExit();
55
+ };
56
+ }, [childProcess, onExit]);
57
+
58
+ return (
59
+ <Box width={width} height={height} flexDirection="column">
60
+ <Text bold>{appName} Frontend</Text>
61
+ {logs.map((log) => (
62
+ <Text key={log}>{log}</Text>
63
+ ))}
64
+ </Box>
65
+ );
66
+ };
67
+
68
+ interface CsrProps {
69
+ app: AppType;
70
+ event: EventEmitter;
71
+ onExit: () => void;
72
+ }
73
+
74
+ const Csr = ({ app, event, onExit }: CsrProps) => {
75
+ const [logs, setLogs] = useState<string[]>([]);
76
+ const [width, height] = useStdoutDimensions();
77
+ useEffect(() => {
78
+ event.on("info", (msg: string) => {
79
+ setLogs((prevLogs) => [...prevLogs, msg]);
80
+ });
81
+ event.on("warn", (msg: string) => {
82
+ setLogs((prevLogs) => [...prevLogs, msg]);
83
+ });
84
+ event.on("warnOnce", (msg: string) => {
85
+ setLogs((prevLogs) => [...prevLogs, msg]);
86
+ });
87
+ event.on("error", (msg: string) => {
88
+ setLogs((prevLogs) => [...prevLogs, msg]);
89
+ });
90
+ event.on("clearScreen", (type: string) => {
91
+ setLogs((prevLogs) => [...prevLogs, type]);
92
+ });
93
+ }, [event]);
94
+ return (
95
+ <Box width={width} height={height} flexDirection="column">
96
+ <Text bold>Akan.JS CSR</Text>
97
+ <Text>{logs}</Text>
98
+ </Box>
99
+ );
100
+ };
101
+
102
+ const filterLogData = (data: Buffer | string) => {
103
+ return typeof data === "string"
104
+ ? data.split(/\r?\n/).filter((line) => line !== "")
105
+ : data
106
+ .toString()
107
+ .split(/\r?\n/)
108
+ .filter((line) => line !== "");
109
+ };
110
+
111
+ interface StartProps {
112
+ maxLength?: number;
113
+ appName: string;
114
+ bcp: ChildProcess;
115
+ }
116
+
117
+ /**
118
+ * Akan application 통합 실행 컴포넌트 (백엔드, 프론트엔드, React(CSR))
119
+ *
120
+ * @param maxLength 로그 최대 길이
121
+ * @param appName 앱 이름
122
+ * @param bcp 백엔드 차일드 프로세스
123
+ * @param onExit 종료 함수
124
+ */
125
+ const Start = ({ appName, bcp, maxLength = 100 }: StartProps) => {
126
+ const [width, height] = useStdoutDimensions();
127
+ const [backendLogs, setBackendLogs] = useState<{ type: string; content: string }[]>([]);
128
+ const { exit } = useApp();
129
+
130
+ const saveLog = useCallback(
131
+ (
132
+ type: string,
133
+ data: Buffer | string,
134
+ setLog: React.Dispatch<React.SetStateAction<{ type: string; content: string }[]>>,
135
+ ) => {
136
+ const newOutput = filterLogData(data);
137
+ const logs = newOutput.map((line) => ({ type: type, content: line }));
138
+ setLog((currentLogs) => {
139
+ if (currentLogs.length >= maxLength) {
140
+ return [...currentLogs.slice(logs.length, maxLength), ...logs];
141
+ } else if (currentLogs.length < maxLength && currentLogs.length + logs.length > maxLength) {
142
+ return [...currentLogs.slice(Math.abs(maxLength - currentLogs.length - logs.length), maxLength), ...logs];
143
+ } else return [...currentLogs, ...logs];
144
+ });
145
+ },
146
+ [maxLength],
147
+ );
148
+
149
+ useEffect(() => {
150
+ bcp.stdout?.on("data", (data: Buffer) => {
151
+ saveLog("info", data, setBackendLogs);
152
+ });
153
+
154
+ bcp.stderr?.on("data", (data: Buffer) => {
155
+ saveLog("error", data, setBackendLogs);
156
+ });
157
+
158
+ return () => {
159
+ exit();
160
+ };
161
+ }, [bcp, saveLog, exit]);
162
+
163
+ return (
164
+ <Box borderColor="#ff493b" height={height} width={width} flexDirection="row">
165
+ <MultiScrollList
166
+ logList={[
167
+ {
168
+ title: `${appName} backend`,
169
+ logs: backendLogs,
170
+ color: "#e535ab",
171
+ },
172
+ ]}
173
+ maxLength={maxLength}
174
+ />
175
+ </Box>
176
+ );
177
+ };
178
+
179
+ export const Interface = {
180
+ /**
181
+ * Akan CSR 실행 컴포넌트
182
+ *
183
+ * @param app 앱 정보
184
+ * @param event CSR 이벤트 발생기
185
+ * @param onExit 종료 함수
186
+ */
187
+ Csr: (app: AppType, event: EventEmitter, onExit: () => void) =>
188
+ renderManager(<Csr app={app} event={event} onExit={onExit} />),
189
+ /**
190
+ * Akan Backend 실행 컴포넌트
191
+ *
192
+ * @param appName 앱 이름
193
+ * @param childProcess 백엔드 차일드 프로세스
194
+ * @param onExit 종료 함수
195
+ */
196
+ Backend: (appName: string, childProcess: ChildProcess, onExit: () => void) =>
197
+ renderManager(<Backend appName={appName} childProcess={childProcess} onExit={onExit} />),
198
+ /**
199
+ * Akan Frontend 실행 컴포넌트
200
+ *
201
+ * @param appName 앱 이름
202
+ * @param childProcess 프론트엔드 차일드 프로세스
203
+ * @param onExit 종료 함수
204
+ */
205
+ Frontend: (appName: string, childProcess: ChildProcess, onExit: () => void) =>
206
+ renderManager(<Frontend appName={appName} childProcess={childProcess} onExit={onExit} />),
207
+ /**
208
+ * Akan application 통합 실행 컴포넌트 (백엔드, 프론트엔드, React(CSR))
209
+ *
210
+ * @param maxLength 로그 최대 길이
211
+ * @param appName 앱 이름
212
+ * @param bcp 백엔드 차일드 프로세스
213
+ * @param fcp 프론트엔드 차일드 프로세스
214
+ * @param csr CSR 이벤트 발생기
215
+ * @param onExit 종료 함수
216
+ */
217
+ Start: (appName: string, bcp: ChildProcess) => renderManager(<Start appName={appName} bcp={bcp} />),
218
+ };
219
+
220
+ const renderManager = (component: React.ReactNode) => {
221
+
222
+ const renderFn = render(component);
223
+
224
+ return renderFn;
225
+ };