akanjs 0.0.1 → 2.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (682) hide show
  1. package/CODE_OF_CONDUCT.md +54 -0
  2. package/CONTRIBUTING.md +83 -0
  3. package/LICENSE +21 -0
  4. package/README.ko.md +244 -0
  5. package/README.md +237 -6
  6. package/base/base.ts +194 -0
  7. package/base/baseEnv.ts +162 -0
  8. package/base/index.ts +6 -0
  9. package/base/primitiveRegistry.ts +342 -0
  10. package/base/symbols.ts +11 -0
  11. package/base/types.ts +137 -0
  12. package/base/utils.ts +30 -0
  13. package/cli/application/application.command.ts +213 -0
  14. package/cli/application/application.interface.tsx +225 -0
  15. package/cli/application/application.runner.ts +359 -0
  16. package/cli/application/application.script.ts +244 -0
  17. package/cli/build.ts +25 -0
  18. package/cli/cloud/cloud.command.ts +48 -0
  19. package/cli/cloud/cloud.runner.ts +158 -0
  20. package/cli/cloud/cloud.script.ts +40 -0
  21. package/cli/guideline/guideline.command.ts +31 -0
  22. package/cli/guideline/guideline.prompt.ts +212 -0
  23. package/cli/guideline/guideline.runner.ts +53 -0
  24. package/cli/guideline/guideline.script.ts +33 -0
  25. package/cli/guidelines/___library/sharedUiStructureDescription.en.md +767 -0
  26. package/cli/guidelines/___library/utilUiStructureDescription.en.md +395 -0
  27. package/cli/guidelines/___lint/lintRuleDescription.en.md +64 -0
  28. package/cli/guidelines/___module/moduleStructureDescription.en.md +80 -0
  29. package/cli/guidelines/componentRule/componentRule.generate.json +131 -0
  30. package/cli/guidelines/componentRule/componentRule.instruction.md +637 -0
  31. package/cli/guidelines/cssRule/cssRule.generate.json +93 -0
  32. package/cli/guidelines/cssRule/cssRule.instruction.md +435 -0
  33. package/cli/guidelines/databaseModule/databaseModule.generate.json +51 -0
  34. package/cli/guidelines/databaseModule/databaseModule.instruction.md +612 -0
  35. package/cli/guidelines/docPageRule/docPageRule.generate.json +72 -0
  36. package/cli/guidelines/docPageRule/docPageRule.instruction.md +389 -0
  37. package/cli/guidelines/enumConstant/enumConstant.generate.json +24 -0
  38. package/cli/guidelines/enumConstant/enumConstant.instruction.md +232 -0
  39. package/cli/guidelines/framework/framework.generate.json +119 -0
  40. package/cli/guidelines/framework/framework.instruction.md +1110 -0
  41. package/cli/guidelines/howToUseStore/howToUseStore.generate.json +0 -0
  42. package/cli/guidelines/modelConstant/modelConstant.generate.json +128 -0
  43. package/cli/guidelines/modelConstant/modelConstant.instruction.md +506 -0
  44. package/cli/guidelines/modelDictionary/modelDictionary.generate.json +108 -0
  45. package/cli/guidelines/modelDictionary/modelDictionary.instruction.md +547 -0
  46. package/cli/guidelines/modelDocument/modelDocument.generate.json +129 -0
  47. package/cli/guidelines/modelDocument/modelDocument.instruction.md +536 -0
  48. package/cli/guidelines/modelService/modelService.generate.json +135 -0
  49. package/cli/guidelines/modelService/modelService.instruction.md +708 -0
  50. package/cli/guidelines/modelSignal/modelSignal.generate.json +201 -0
  51. package/cli/guidelines/modelSignal/modelSignal.instruction.md +552 -0
  52. package/cli/guidelines/modelStore/modelStore.generate.json +130 -0
  53. package/cli/guidelines/modelStore/modelStore.instruction.md +585 -0
  54. package/cli/guidelines/modelTemplate/modelTemplate.generate.json +104 -0
  55. package/cli/guidelines/modelTemplate/modelTemplate.instruction.md +604 -0
  56. package/cli/guidelines/modelUnit/modelUnit.generate.json +92 -0
  57. package/cli/guidelines/modelUnit/modelUnit.instruction.md +541 -0
  58. package/cli/guidelines/modelUtil/modelUtil.generate.json +93 -0
  59. package/cli/guidelines/modelUtil/modelUtil.instruction.md +752 -0
  60. package/cli/guidelines/modelView/modelView.generate.json +80 -0
  61. package/cli/guidelines/modelView/modelView.instruction.md +1005 -0
  62. package/cli/guidelines/modelZone/modelZone.generate.json +126 -0
  63. package/cli/guidelines/modelZone/modelZone.instruction.md +528 -0
  64. package/cli/guidelines/scalarConstant/scalarConstant.generate.json +106 -0
  65. package/cli/guidelines/scalarConstant/scalarConstant.instruction.md +442 -0
  66. package/cli/guidelines/scalarDictionary/scalarDictionary.generate.json +83 -0
  67. package/cli/guidelines/scalarDictionary/scalarDictionary.instruction.md +273 -0
  68. package/cli/guidelines/scalarModule/scalarModule.generate.json +35 -0
  69. package/cli/guidelines/scalarModule/scalarModule.instruction.md +81 -0
  70. package/cli/guidelines/sharedUiUsage/sharedUiUsage.generate.json +108 -0
  71. package/cli/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +310 -0
  72. package/cli/guidelines/utilUiUsage/utilUiUsage.generate.json +140 -0
  73. package/cli/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
  74. package/cli/index.js +11401 -0
  75. package/cli/index.ts +24 -0
  76. package/cli/library/library.command.ts +28 -0
  77. package/cli/library/library.runner.ts +69 -0
  78. package/cli/library/library.script.ts +39 -0
  79. package/cli/module/module.command.ts +35 -0
  80. package/cli/module/module.prompt.ts +18 -0
  81. package/cli/module/module.request.ts +319 -0
  82. package/cli/module/module.runner.ts +76 -0
  83. package/cli/module/module.script.ts +161 -0
  84. package/cli/package/package.command.ts +32 -0
  85. package/cli/package/package.runner.ts +64 -0
  86. package/cli/package/package.script.ts +35 -0
  87. package/cli/page/page.command.ts +14 -0
  88. package/cli/page/page.runner.ts +14 -0
  89. package/cli/page/page.script.ts +12 -0
  90. package/cli/scalar/scalar.command.ts +21 -0
  91. package/cli/scalar/scalar.prompt.ts +131 -0
  92. package/cli/scalar/scalar.runner.ts +38 -0
  93. package/cli/scalar/scalar.script.ts +16 -0
  94. package/cli/templates/__scalar/__model__/__model__.constant.ts +15 -0
  95. package/cli/templates/__scalar/__model__/__model__.dictionary.ts +19 -0
  96. package/cli/templates/__scalar/__model__/__model__.document.ts +15 -0
  97. package/cli/templates/app/akan.config.ts +14 -0
  98. package/cli/templates/app/capacitor.config.ts.template +8 -0
  99. package/cli/templates/app/common/commonLogic.ts +12 -0
  100. package/cli/templates/app/common/index.ts +10 -0
  101. package/cli/templates/app/env/env.client.debug.ts.template +7 -0
  102. package/cli/templates/app/env/env.client.develop.ts.template +7 -0
  103. package/cli/templates/app/env/env.client.local.ts.template +7 -0
  104. package/cli/templates/app/env/env.client.main.ts.template +7 -0
  105. package/cli/templates/app/env/env.client.testing.ts.template +7 -0
  106. package/cli/templates/app/env/env.client.ts +21 -0
  107. package/cli/templates/app/env/env.client.type.ts +16 -0
  108. package/cli/templates/app/env/env.server.debug.ts.template +7 -0
  109. package/cli/templates/app/env/env.server.develop.ts.template +9 -0
  110. package/cli/templates/app/env/env.server.local.ts.template +14 -0
  111. package/cli/templates/app/env/env.server.main.ts.template +9 -0
  112. package/cli/templates/app/env/env.server.testing.ts.template +6 -0
  113. package/cli/templates/app/env/env.server.ts +20 -0
  114. package/cli/templates/app/lib/___appName__/__appName__.dictionary.ts +17 -0
  115. package/cli/templates/app/lib/___appName__/__appName__.service.ts +13 -0
  116. package/cli/templates/app/lib/___appName__/__appName__.signal.ts +17 -0
  117. package/cli/templates/app/lib/___appName__/__appName__.store.ts +15 -0
  118. package/cli/templates/app/lib/option.ts +17 -0
  119. package/cli/templates/app/main.ts +16 -0
  120. package/cli/templates/app/package.json.template +5 -0
  121. package/cli/templates/app/page/_index.tsx +172 -0
  122. package/cli/templates/app/page/_layout.tsx +32 -0
  123. package/cli/templates/app/page/styles.css.template +53 -0
  124. package/cli/templates/app/public/favicon.ico +0 -0
  125. package/cli/templates/app/public/logo.png +0 -0
  126. package/cli/templates/app/srvkit/backendLogic.ts +12 -0
  127. package/cli/templates/app/srvkit/index.ts +10 -0
  128. package/cli/templates/app/tsconfig.json.template +21 -0
  129. package/cli/templates/app/ui/UiComponent.ts +16 -0
  130. package/cli/templates/app/ui/index.ts +10 -0
  131. package/cli/templates/app/webkit/frontendLogic.ts +12 -0
  132. package/cli/templates/app/webkit/index.ts +10 -0
  133. package/cli/templates/client.ts +46 -0
  134. package/cli/templates/crudPages/[__model__Id]/edit/page.tsx +47 -0
  135. package/cli/templates/crudPages/[__model__Id]/page.tsx +52 -0
  136. package/cli/templates/crudPages/new/page.tsx +42 -0
  137. package/cli/templates/crudPages/page.tsx +43 -0
  138. package/cli/templates/crudSinglePage/page.tsx +37 -0
  139. package/cli/templates/env/_env.server.type.ts +16 -0
  140. package/cli/templates/facetIndex/index.ts +32 -0
  141. package/cli/templates/index.ts +10 -0
  142. package/cli/templates/lib/__lib/lib.constant.ts +38 -0
  143. package/cli/templates/lib/__lib/lib.dictionary.ts +33 -0
  144. package/cli/templates/lib/__lib/lib.document.ts +35 -0
  145. package/cli/templates/lib/__lib/lib.service.ts +33 -0
  146. package/cli/templates/lib/__lib/lib.signal.ts +34 -0
  147. package/cli/templates/lib/__lib/lib.store.ts +33 -0
  148. package/cli/templates/lib/cnst.ts +29 -0
  149. package/cli/templates/lib/db.ts +32 -0
  150. package/cli/templates/lib/dict.ts +49 -0
  151. package/cli/templates/lib/sig.ts +60 -0
  152. package/cli/templates/lib/srv.ts +34 -0
  153. package/cli/templates/lib/st.ts +31 -0
  154. package/cli/templates/lib/useClient.ts +19 -0
  155. package/cli/templates/lib/useServer.ts +7 -0
  156. package/cli/templates/libRoot/.gitignore.template +16 -0
  157. package/cli/templates/libRoot/akan.config.ts +12 -0
  158. package/cli/templates/libRoot/base/baseLogic.ts +10 -0
  159. package/cli/templates/libRoot/base/index.ts +8 -0
  160. package/cli/templates/libRoot/common/commonLogic.ts +10 -0
  161. package/cli/templates/libRoot/common/index.ts +8 -0
  162. package/cli/templates/libRoot/env/env.server.example.ts.template +6 -0
  163. package/cli/templates/libRoot/env/env.server.testing.ts.template +6 -0
  164. package/cli/templates/libRoot/lib/___libName__/__libName__.dictionary.ts +15 -0
  165. package/cli/templates/libRoot/lib/___libName__/__libName__.service.ts +11 -0
  166. package/cli/templates/libRoot/lib/___libName__/__libName__.store.ts +13 -0
  167. package/cli/templates/libRoot/lib/option.ts +17 -0
  168. package/cli/templates/libRoot/package.json.template +5 -0
  169. package/cli/templates/libRoot/srvkit/backendLogic.ts +10 -0
  170. package/cli/templates/libRoot/srvkit/index.ts +8 -0
  171. package/cli/templates/libRoot/tsconfig.json.template +11 -0
  172. package/cli/templates/libRoot/ui/index.ts +7 -0
  173. package/cli/templates/libRoot/webkit/frontendLogic.ts +10 -0
  174. package/cli/templates/libRoot/webkit/index.ts +8 -0
  175. package/cli/templates/localDev/docker-compose.yaml.template +37 -0
  176. package/cli/templates/module/__Model__.Template.tsx +36 -0
  177. package/cli/templates/module/__Model__.Unit.tsx +26 -0
  178. package/cli/templates/module/__Model__.Util.tsx +30 -0
  179. package/cli/templates/module/__Model__.View.tsx +29 -0
  180. package/cli/templates/module/__Model__.Zone.tsx +43 -0
  181. package/cli/templates/module/__model__.constant.ts +24 -0
  182. package/cli/templates/module/__model__.dictionary.ts +30 -0
  183. package/cli/templates/module/__model__.document.ts +23 -0
  184. package/cli/templates/module/__model__.service.ts +16 -0
  185. package/cli/templates/module/__model__.signal.ts +27 -0
  186. package/cli/templates/module/__model__.store.ts +19 -0
  187. package/cli/templates/module/index.tsx +44 -0
  188. package/cli/templates/moduleRoot/index.tsx +31 -0
  189. package/cli/templates/pkgRoot/tsconfig.json.template +10 -0
  190. package/cli/templates/server.ts +45 -0
  191. package/cli/templates/workspaceRoot/.env.template +14 -0
  192. package/cli/templates/workspaceRoot/.gitignore.template +130 -0
  193. package/cli/templates/workspaceRoot/.vscode/settings.json.template +23 -0
  194. package/cli/templates/workspaceRoot/biome.json.template +175 -0
  195. package/cli/templates/workspaceRoot/bunfig.toml +4 -0
  196. package/cli/templates/workspaceRoot/infra/app/Chart.yaml.template +6 -0
  197. package/cli/templates/workspaceRoot/infra/app/templates/frontend.yaml.template +182 -0
  198. package/cli/templates/workspaceRoot/infra/app/values/_common-values.yaml.template +183 -0
  199. package/cli/templates/workspaceRoot/package.json.template +7 -0
  200. package/cli/templates/workspaceRoot/tsconfig.json.template +26 -0
  201. package/cli/testHelpers.ts +171 -0
  202. package/cli/workspace/workspace.command.ts +60 -0
  203. package/cli/workspace/workspace.runner.ts +57 -0
  204. package/cli/workspace/workspace.script.ts +68 -0
  205. package/client/capacitor.ts +68 -0
  206. package/client/clientRuntime.ts +141 -0
  207. package/client/cookie.ts +121 -0
  208. package/client/createFont.ts +8 -0
  209. package/client/csrTypes.ts +259 -0
  210. package/client/decorators.ts +25 -0
  211. package/client/device.ts +147 -0
  212. package/client/fetch.ts +1 -0
  213. package/client/index.ts +15 -0
  214. package/client/locale.ts +4 -0
  215. package/client/makePageProto.tsx +178 -0
  216. package/client/router.ts +286 -0
  217. package/client/rscNavigation.ts +19 -0
  218. package/client/storage.ts +33 -0
  219. package/client/translator.ts +43 -0
  220. package/client/types.ts +228 -0
  221. package/client/useClient.ts +1 -0
  222. package/common/Logger.ts +177 -0
  223. package/common/applyMixins.ts +14 -0
  224. package/common/capitalize.ts +4 -0
  225. package/common/deepObjectify.ts +27 -0
  226. package/common/formatNumber.ts +14 -0
  227. package/common/formatPhone.ts +7 -0
  228. package/common/getAllPropertyDescriptors.ts +13 -0
  229. package/common/hmrPhase.ts +17 -0
  230. package/common/httpClient.ts +101 -0
  231. package/common/index.ts +50 -0
  232. package/common/isDayjs.ts +3 -0
  233. package/common/isEmail.ts +2 -0
  234. package/common/isPhoneNumber.ts +8 -0
  235. package/common/isQueryEqual.ts +23 -0
  236. package/common/isValidDate.ts +14 -0
  237. package/common/localeConfig.ts +41 -0
  238. package/common/lowerlize.ts +4 -0
  239. package/common/mergeVersion.ts +10 -0
  240. package/common/objectify.ts +7 -0
  241. package/common/pathGet.ts +13 -0
  242. package/common/pathSet.ts +16 -0
  243. package/common/randomPick.ts +1 -0
  244. package/common/randomPicks.ts +12 -0
  245. package/common/routeConvention.ts +203 -0
  246. package/common/sleep.ts +8 -0
  247. package/common/splitVersion.ts +11 -0
  248. package/common/subRoute.ts +34 -0
  249. package/common/types.ts +15 -0
  250. package/constant/constantRegistry.ts +334 -0
  251. package/constant/crystalize.ts +45 -0
  252. package/constant/deserialize.ts +70 -0
  253. package/constant/fieldInfo.ts +415 -0
  254. package/constant/getDefault.ts +18 -0
  255. package/constant/immerify.ts +16 -0
  256. package/constant/index.ts +10 -0
  257. package/constant/purify.ts +118 -0
  258. package/constant/serialize.ts +87 -0
  259. package/constant/types.ts +105 -0
  260. package/constant/via.ts +360 -0
  261. package/devkit/aiEditor.ts +299 -0
  262. package/devkit/akanApp/akanApp.host.ts +356 -0
  263. package/devkit/akanApp/index.ts +1 -0
  264. package/devkit/akanConfig/akanConfig.ts +332 -0
  265. package/devkit/akanConfig/index.ts +2 -0
  266. package/devkit/akanConfig/types.ts +187 -0
  267. package/devkit/applicationBuildReporter.ts +69 -0
  268. package/devkit/applicationBuildRunner.ts +302 -0
  269. package/devkit/applicationReleasePackager.ts +205 -0
  270. package/devkit/artifact/implicitRootLayout.ts +155 -0
  271. package/devkit/artifact/index.ts +1 -0
  272. package/devkit/artifact/routeSeedIndex.ts +128 -0
  273. package/devkit/auth.ts +41 -0
  274. package/devkit/builder.ts +164 -0
  275. package/devkit/capacitor.base.config.ts +74 -0
  276. package/devkit/capacitorApp.ts +385 -0
  277. package/devkit/commandDecorators/argMeta.ts +88 -0
  278. package/devkit/commandDecorators/command.ts +314 -0
  279. package/devkit/commandDecorators/commandBuilder.ts +188 -0
  280. package/devkit/commandDecorators/commandMeta.ts +6 -0
  281. package/devkit/commandDecorators/dependencyBuilder.ts +100 -0
  282. package/devkit/commandDecorators/helpFormatter.ts +217 -0
  283. package/devkit/commandDecorators/index.ts +8 -0
  284. package/devkit/commandDecorators/targetMeta.ts +31 -0
  285. package/devkit/commandDecorators/types.ts +10 -0
  286. package/devkit/constants.ts +25 -0
  287. package/devkit/createTunnel.ts +36 -0
  288. package/devkit/dependencyScanner.ts +339 -0
  289. package/devkit/executors.ts +1326 -0
  290. package/devkit/extractDeps.ts +85 -0
  291. package/devkit/fileEditor.ts +106 -0
  292. package/devkit/fileSys.ts +39 -0
  293. package/devkit/frontendBuild/allRoutesBuilder.ts +103 -0
  294. package/devkit/frontendBuild/clientBuildTypes.ts +114 -0
  295. package/devkit/frontendBuild/clientEntriesBundler.ts +300 -0
  296. package/devkit/frontendBuild/clientEntryDiscovery.ts +196 -0
  297. package/devkit/frontendBuild/csrArtifactBuilder.ts +237 -0
  298. package/devkit/frontendBuild/cssCompiler.ts +279 -0
  299. package/devkit/frontendBuild/cssImportResolver.ts +116 -0
  300. package/devkit/frontendBuild/fontOptimizer.ts +427 -0
  301. package/devkit/frontendBuild/hmrChangeClassifier.ts +28 -0
  302. package/devkit/frontendBuild/hmrWatcher.ts +101 -0
  303. package/devkit/frontendBuild/index.ts +18 -0
  304. package/devkit/frontendBuild/pagesBundleBuilder.ts +137 -0
  305. package/devkit/frontendBuild/pagesEntrySourceGenerator.ts +37 -0
  306. package/devkit/frontendBuild/precompressArtifacts.ts +59 -0
  307. package/devkit/frontendBuild/routeClientBuilder.ts +290 -0
  308. package/devkit/frontendBuild/routesManifestArtifactSerializer.ts +62 -0
  309. package/devkit/frontendBuild/ssrBaseArtifactBuilder.ts +139 -0
  310. package/devkit/frontendBuild/vendorSpecifiers.ts +16 -0
  311. package/devkit/frontendBuild/watchRootResolver.ts +28 -0
  312. package/devkit/getCredentials.ts +19 -0
  313. package/devkit/getDirname.ts +3 -0
  314. package/devkit/getModelFileData.ts +59 -0
  315. package/devkit/getRelatedCnsts.ts +300 -0
  316. package/devkit/guideline.ts +19 -0
  317. package/devkit/incrementalBuilder/incrementalBuilder.host.ts +78 -0
  318. package/devkit/incrementalBuilder/incrementalBuilder.proc.ts +330 -0
  319. package/devkit/incrementalBuilder/index.ts +1 -0
  320. package/devkit/index.ts +36 -0
  321. package/devkit/lint/no-import-client-functions.grit +32 -0
  322. package/devkit/lint/no-import-external-library.grit +21 -0
  323. package/devkit/lint/no-js-private-class-method.grit +42 -0
  324. package/devkit/lint/no-use-client-in-server.grit +7 -0
  325. package/devkit/lint/non-scalar-props-restricted.grit +13 -0
  326. package/devkit/linter.ts +248 -0
  327. package/devkit/mobile/index.ts +1 -0
  328. package/devkit/mobile/mobileTarget.ts +47 -0
  329. package/devkit/prompter.ts +71 -0
  330. package/devkit/scanInfo.ts +605 -0
  331. package/devkit/selectModel.ts +11 -0
  332. package/devkit/spinner.ts +54 -0
  333. package/devkit/sshTunnel.ts +151 -0
  334. package/devkit/streamAi.ts +45 -0
  335. package/devkit/transforms/barrelAnalyzer.ts +249 -0
  336. package/devkit/transforms/barrelImportsPlugin.ts +451 -0
  337. package/devkit/transforms/externalizeFrameworkPlugin.ts +159 -0
  338. package/devkit/transforms/index.ts +5 -0
  339. package/devkit/transforms/rscUseClientTransform.ts +52 -0
  340. package/devkit/transforms/useClientBundlePlugin.ts +47 -0
  341. package/devkit/typeChecker.ts +260 -0
  342. package/devkit/types.ts +42 -0
  343. package/devkit/ui/MultiScrollList.tsx +228 -0
  344. package/devkit/ui/ScrollList.tsx +106 -0
  345. package/devkit/ui/index.ts +2 -0
  346. package/devkit/uploadRelease.ts +95 -0
  347. package/devkit/useStdoutDimensions.ts +20 -0
  348. package/dictionary/base.dictionary.ts +91 -0
  349. package/dictionary/dictInfo.ts +1079 -0
  350. package/dictionary/dictionary.ts +10 -0
  351. package/dictionary/index.ts +12 -0
  352. package/dictionary/locale.ts +230 -0
  353. package/dictionary/trans.ts +196 -0
  354. package/document/by.ts +39 -0
  355. package/document/dataLoader.ts +91 -0
  356. package/document/database.ts +168 -0
  357. package/document/databaseRegistry.ts +113 -0
  358. package/document/documentQuery.ts +143 -0
  359. package/document/documentSchema.ts +91 -0
  360. package/document/filterMeta.ts +210 -0
  361. package/document/index.ts +11 -0
  362. package/document/into.ts +169 -0
  363. package/document/loaderInfo.ts +50 -0
  364. package/document/schema.ts +24 -0
  365. package/document/types.ts +41 -0
  366. package/fetch/client/fetchClient.ts +600 -0
  367. package/fetch/client/httpClient.ts +157 -0
  368. package/fetch/client/index.ts +3 -0
  369. package/fetch/client/wsClient.ts +246 -0
  370. package/fetch/fetchType/appliedReturn.type.ts +108 -0
  371. package/fetch/fetchType/buildFetch.type.ts +24 -0
  372. package/fetch/fetchType/clientSignal.type.ts +22 -0
  373. package/fetch/fetchType/endpointFetch.type.ts +56 -0
  374. package/fetch/fetchType/index.ts +5 -0
  375. package/fetch/fetchType/sliceFetch.type.ts +173 -0
  376. package/fetch/index.ts +4 -0
  377. package/fetch/requestStorage.ts +127 -0
  378. package/fetch/serializer/fetch.serializer.ts +131 -0
  379. package/fetch/serializer/index.ts +1 -0
  380. package/fetch/types.ts +28 -0
  381. package/package.json +202 -5
  382. package/server/SSR_MEMORY_DIAGNOSIS.md +107 -0
  383. package/server/akanApp.ts +855 -0
  384. package/server/akanLib.ts +43 -0
  385. package/server/akanOption.ts +42 -0
  386. package/server/akanServer.ts +369 -0
  387. package/server/artifact/builderRpc.ts +124 -0
  388. package/server/artifact/index.ts +6 -0
  389. package/server/artifact/ipcTypes.ts +46 -0
  390. package/server/artifact/manifestTypes.ts +19 -0
  391. package/server/artifact/routeClientCache.ts +224 -0
  392. package/server/artifact/routeSeedIndexStore.ts +89 -0
  393. package/server/artifact/routesManifestStore.ts +120 -0
  394. package/server/decorators.ts +95 -0
  395. package/server/di/diLifecycle.ts +520 -0
  396. package/server/di/index.ts +4 -0
  397. package/server/di/predefinedAdaptor.ts +77 -0
  398. package/server/di/resolveAdaptorHierarchy.ts +82 -0
  399. package/server/di/resolveHierarchy.ts +89 -0
  400. package/server/di/resolveServiceHierarchy.ts +47 -0
  401. package/server/di/utils.ts +40 -0
  402. package/server/hmr/changeBatch.ts +14 -0
  403. package/server/hmr/clientScript.ts +310 -0
  404. package/server/hmr/devHmrController.ts +395 -0
  405. package/server/hmr/index.ts +4 -0
  406. package/server/hmr/wsHub.ts +56 -0
  407. package/server/imageOptimizer.ts +427 -0
  408. package/server/imageOptimizerError.ts +8 -0
  409. package/server/index.ts +14 -0
  410. package/server/lifecycle/shutdownManager.ts +52 -0
  411. package/server/logging/rotatingLogWriter.ts +190 -0
  412. package/server/processMetricsCollector.ts +78 -0
  413. package/server/proxy/akanResponse.ts +16 -0
  414. package/server/proxy/bunRequestFields.ts +12 -0
  415. package/server/proxy/hostBasePathWebProxy.ts +112 -0
  416. package/server/proxy/index.ts +15 -0
  417. package/server/proxy/localeWebProxy.ts +71 -0
  418. package/server/proxy/types.ts +41 -0
  419. package/server/proxy/webProxyRunner.ts +90 -0
  420. package/server/resolver/database.resolver.ts +340 -0
  421. package/server/resolver/index.ts +3 -0
  422. package/server/resolver/resolver.contract.fixture.ts +222 -0
  423. package/server/resolver/service.resolver.ts +176 -0
  424. package/server/resolver/signal.resolver.ts +386 -0
  425. package/server/robots.ts +32 -0
  426. package/server/routeElementComposer.tsx +91 -0
  427. package/server/routeTreeBuilder.ts +279 -0
  428. package/server/routing/apiRouter.ts +226 -0
  429. package/server/rscClient.tsx +140 -0
  430. package/server/rscWorker.tsx +625 -0
  431. package/server/rscWorkerHost.ts +616 -0
  432. package/server/sitemap.ts +90 -0
  433. package/server/ssrFromRscRenderer.tsx +285 -0
  434. package/server/ssrTypes.ts +48 -0
  435. package/server/types/react-server-dom-webpack.d.ts +91 -0
  436. package/server/types.tsx +109 -0
  437. package/server/vendor/akanjs-base.ts +1 -0
  438. package/server/vendor/akanjs-common.ts +1 -0
  439. package/server/vendor/akanjs-constant.ts +1 -0
  440. package/server/vendor/akanjs-store.ts +1 -0
  441. package/server/vendor/react-dom-client.ts +5 -0
  442. package/server/vendor/react-dom.ts +21 -0
  443. package/server/vendor/react-jsx-dev-runtime.ts +5 -0
  444. package/server/vendor/react-jsx-runtime.ts +5 -0
  445. package/server/vendor/react-refresh-runtime.ts +6 -0
  446. package/server/vendor/react-server-dom-webpack-client-browser.ts +12 -0
  447. package/server/vendor/react.ts +51 -0
  448. package/server/vendor/scheduler.ts +23 -0
  449. package/server/webRouter.ts +712 -0
  450. package/service/adapt.ts +47 -0
  451. package/service/base.service.ts +18 -0
  452. package/service/index.ts +10 -0
  453. package/service/injectInfo.ts +393 -0
  454. package/service/ipcTypes.ts +127 -0
  455. package/service/predefinedAdaptor/cache.adaptor.ts +105 -0
  456. package/service/predefinedAdaptor/compress.adaptor.ts +357 -0
  457. package/service/predefinedAdaptor/database.adaptor.ts +1310 -0
  458. package/service/predefinedAdaptor/index.ts +13 -0
  459. package/service/predefinedAdaptor/logging.adaptor.ts +36 -0
  460. package/service/predefinedAdaptor/queue.adaptor.ts +42 -0
  461. package/service/predefinedAdaptor/role.adaptor.ts +18 -0
  462. package/service/predefinedAdaptor/schedule.adaptor.ts +188 -0
  463. package/service/predefinedAdaptor/solidCache.adaptor.ts +143 -0
  464. package/service/predefinedAdaptor/solidPubsub.adaptor.ts +98 -0
  465. package/service/predefinedAdaptor/solidQueue.adaptor.ts +203 -0
  466. package/service/predefinedAdaptor/solidSqlite.ts +85 -0
  467. package/service/predefinedAdaptor/sqlitePath.ts +20 -0
  468. package/service/predefinedAdaptor/storage.adaptor.ts +121 -0
  469. package/service/predefinedAdaptor/websocket.adaptor.ts +313 -0
  470. package/service/serve.ts +223 -0
  471. package/service/serviceModule.ts +221 -0
  472. package/service/serviceRegistry.ts +26 -0
  473. package/service/types.ts +113 -0
  474. package/signal/base.signal.ts +46 -0
  475. package/signal/endpoint.ts +122 -0
  476. package/signal/endpointInfo.ts +374 -0
  477. package/signal/exception.ts +50 -0
  478. package/signal/guard.ts +18 -0
  479. package/signal/guards.ts +16 -0
  480. package/signal/index.ts +18 -0
  481. package/signal/intercept.ts +39 -0
  482. package/signal/internal.ts +56 -0
  483. package/signal/internalArg.ts +38 -0
  484. package/signal/internalInfo.ts +208 -0
  485. package/signal/middleware.ts +108 -0
  486. package/signal/serializer/fetch.serializer.ts +128 -0
  487. package/signal/serializer/index.ts +1 -0
  488. package/signal/serverSignal.ts +114 -0
  489. package/signal/signalContext.ts +446 -0
  490. package/signal/signalRegistry.ts +82 -0
  491. package/signal/slice.ts +158 -0
  492. package/signal/sliceInfo.ts +254 -0
  493. package/signal/types.ts +131 -0
  494. package/store/action.ts +1067 -0
  495. package/store/baseSt.ts +81 -0
  496. package/store/hooks.ts +2 -0
  497. package/store/index.ts +8 -0
  498. package/store/rootStore.ts +26 -0
  499. package/store/state.ts +226 -0
  500. package/store/stateBuilder.ts +429 -0
  501. package/store/stateInfo.ts +66 -0
  502. package/store/store.ts +194 -0
  503. package/store/storeInstance.ts +382 -0
  504. package/store/storeRegistry.ts +84 -0
  505. package/store/types.ts +69 -0
  506. package/store/withSelector.ts +62 -0
  507. package/test/index.ts +16 -0
  508. package/test/playwright.config.base.ts +48 -0
  509. package/test/playwright.pageAgent.ts +41 -0
  510. package/test/sample.ts +19 -0
  511. package/test/sampleOf.ts +70 -0
  512. package/test/signalTest.preload.ts +10 -0
  513. package/test/signalTestRuntime.ts +126 -0
  514. package/test/testServer.ts +187 -0
  515. package/ui/BottomSheet.tsx +103 -0
  516. package/ui/Button.tsx +70 -0
  517. package/ui/ClientSide.tsx +11 -0
  518. package/ui/Clipboard.tsx +49 -0
  519. package/ui/Constant/Doc.tsx +696 -0
  520. package/ui/Constant/Mermaid.tsx +149 -0
  521. package/ui/Constant/index.ts +6 -0
  522. package/ui/Constant/schemaDoc.ts +324 -0
  523. package/ui/Copy.tsx +27 -0
  524. package/ui/CsrImage.tsx +38 -0
  525. package/ui/Data/CardList.tsx +141 -0
  526. package/ui/Data/Dashboard.tsx +72 -0
  527. package/ui/Data/Insight.tsx +35 -0
  528. package/ui/Data/Item.tsx +285 -0
  529. package/ui/Data/ListContainer.tsx +320 -0
  530. package/ui/Data/Pagination.tsx +54 -0
  531. package/ui/Data/QueryMaker.tsx +21 -0
  532. package/ui/Data/TableList.tsx +161 -0
  533. package/ui/Data/index.ts +11 -0
  534. package/ui/Data/index_.tsx +11 -0
  535. package/ui/DatePicker.tsx +184 -0
  536. package/ui/Dialog/Action.tsx +15 -0
  537. package/ui/Dialog/Close.tsx +22 -0
  538. package/ui/Dialog/Content.tsx +11 -0
  539. package/ui/Dialog/Modal.tsx +137 -0
  540. package/ui/Dialog/Provider.tsx +33 -0
  541. package/ui/Dialog/Title.tsx +15 -0
  542. package/ui/Dialog/Trigger.tsx +22 -0
  543. package/ui/Dialog/context.ts +20 -0
  544. package/ui/Dialog/index.tsx +15 -0
  545. package/ui/DragAction.tsx +129 -0
  546. package/ui/DraggableList.tsx +230 -0
  547. package/ui/Dropdown.tsx +51 -0
  548. package/ui/Empty.tsx +32 -0
  549. package/ui/Field.tsx +1556 -0
  550. package/ui/FontFace.tsx +26 -0
  551. package/ui/Image.tsx +185 -0
  552. package/ui/InfiniteScroll.tsx +67 -0
  553. package/ui/Input.tsx +636 -0
  554. package/ui/KeyboardAvoiding.tsx +62 -0
  555. package/ui/Layout/BottomAction.tsx +15 -0
  556. package/ui/Layout/BottomInset.tsx +42 -0
  557. package/ui/Layout/BottomTab.tsx +71 -0
  558. package/ui/Layout/Header.tsx +38 -0
  559. package/ui/Layout/LeftSider.tsx +34 -0
  560. package/ui/Layout/Navbar.tsx +46 -0
  561. package/ui/Layout/RightSider.tsx +41 -0
  562. package/ui/Layout/Sider.tsx +69 -0
  563. package/ui/Layout/Template.tsx +11 -0
  564. package/ui/Layout/TopLeftAction.tsx +28 -0
  565. package/ui/Layout/Unit.tsx +19 -0
  566. package/ui/Layout/View.tsx +12 -0
  567. package/ui/Layout/Zone.tsx +10 -0
  568. package/ui/Layout/index.ts +27 -0
  569. package/ui/Link/Back.tsx +15 -0
  570. package/ui/Link/Close.tsx +20 -0
  571. package/ui/Link/CsrLink.tsx +41 -0
  572. package/ui/Link/Lang.tsx +16 -0
  573. package/ui/Link/SsrLink.tsx +68 -0
  574. package/ui/Link/index.tsx +32 -0
  575. package/ui/Link/types.ts +47 -0
  576. package/ui/Load/Edit.tsx +19 -0
  577. package/ui/Load/Edit_Client.tsx +120 -0
  578. package/ui/Load/Page.tsx +40 -0
  579. package/ui/Load/PageCSR.tsx +39 -0
  580. package/ui/Load/Pagination.tsx +89 -0
  581. package/ui/Load/Units.tsx +330 -0
  582. package/ui/Load/View.tsx +115 -0
  583. package/ui/Load/index.ts +11 -0
  584. package/ui/Load/index_.tsx +6 -0
  585. package/ui/Loading/Area.tsx +10 -0
  586. package/ui/Loading/Button.tsx +17 -0
  587. package/ui/Loading/Input.tsx +17 -0
  588. package/ui/Loading/ProgressBar.tsx +14 -0
  589. package/ui/Loading/Skeleton.tsx +22 -0
  590. package/ui/Loading/Spin.tsx +22 -0
  591. package/ui/Loading/index.tsx +8 -0
  592. package/ui/Menu.tsx +273 -0
  593. package/ui/Modal.tsx +87 -0
  594. package/ui/Model/AdminPanel.tsx +51 -0
  595. package/ui/Model/Edit.tsx +46 -0
  596. package/ui/Model/EditModal.tsx +301 -0
  597. package/ui/Model/EditWrapper.tsx +48 -0
  598. package/ui/Model/LoadInit.tsx +11 -0
  599. package/ui/Model/New.tsx +46 -0
  600. package/ui/Model/NewWrapper.tsx +20 -0
  601. package/ui/Model/NewWrapper_Client.tsx +57 -0
  602. package/ui/Model/Remove.tsx +75 -0
  603. package/ui/Model/RemoveWrapper.tsx +38 -0
  604. package/ui/Model/SureToRemove.tsx +108 -0
  605. package/ui/Model/View.tsx +65 -0
  606. package/ui/Model/ViewEditModal.tsx +125 -0
  607. package/ui/Model/ViewModal.tsx +71 -0
  608. package/ui/Model/ViewWrapper.tsx +38 -0
  609. package/ui/Model/index.ts +33 -0
  610. package/ui/Model/index_.tsx +16 -0
  611. package/ui/More.tsx +56 -0
  612. package/ui/ObjectId.tsx +29 -0
  613. package/ui/Pagination.tsx +120 -0
  614. package/ui/Popconfirm.tsx +135 -0
  615. package/ui/Portal.tsx +10 -0
  616. package/ui/Radio.tsx +53 -0
  617. package/ui/RecentTime.tsx +123 -0
  618. package/ui/Refresh.tsx +24 -0
  619. package/ui/ScreenNavigator.tsx +129 -0
  620. package/ui/Select.tsx +322 -0
  621. package/ui/Signal/Arg.tsx +352 -0
  622. package/ui/Signal/Doc.tsx +231 -0
  623. package/ui/Signal/Listener.tsx +74 -0
  624. package/ui/Signal/Message.tsx +267 -0
  625. package/ui/Signal/Object.tsx +131 -0
  626. package/ui/Signal/PubSub.tsx +247 -0
  627. package/ui/Signal/Request.tsx +30 -0
  628. package/ui/Signal/Response.tsx +76 -0
  629. package/ui/Signal/RestApi.tsx +390 -0
  630. package/ui/Signal/WebSocket.tsx +47 -0
  631. package/ui/Signal/index.ts +10 -0
  632. package/ui/Signal/makeExample.ts +75 -0
  633. package/ui/System/CSR.tsx +420 -0
  634. package/ui/System/Client.tsx +296 -0
  635. package/ui/System/Common.tsx +83 -0
  636. package/ui/System/DevModeToggle.tsx +21 -0
  637. package/ui/System/Gtag.tsx +69 -0
  638. package/ui/System/Messages.tsx +175 -0
  639. package/ui/System/Reconnect.tsx +156 -0
  640. package/ui/System/Root.tsx +10 -0
  641. package/ui/System/SSR.tsx +163 -0
  642. package/ui/System/SelectLanguage.tsx +47 -0
  643. package/ui/System/ThemeToggle.tsx +98 -0
  644. package/ui/System/index.tsx +23 -0
  645. package/ui/Tab/Menu.tsx +56 -0
  646. package/ui/Tab/Menus.tsx +10 -0
  647. package/ui/Tab/Panel.tsx +25 -0
  648. package/ui/Tab/Provider.tsx +25 -0
  649. package/ui/Tab/context.ts +16 -0
  650. package/ui/Tab/index.tsx +11 -0
  651. package/ui/Table.tsx +131 -0
  652. package/ui/ToggleSelect.tsx +144 -0
  653. package/ui/Unauthorized.tsx +29 -0
  654. package/ui/animated.tsx +8 -0
  655. package/ui/fontCss.ts +86 -0
  656. package/ui/index.ts +44 -0
  657. package/ui/styles.css +617 -0
  658. package/webkit/bootCsr.tsx +275 -0
  659. package/webkit/createRobotPage.ts +15 -0
  660. package/webkit/createSitemapPage.ts +4 -0
  661. package/webkit/index.ts +19 -0
  662. package/webkit/lazy.tsx +37 -0
  663. package/webkit/types.ts +7 -0
  664. package/webkit/useCamera.tsx +99 -0
  665. package/webkit/useCodepush.tsx +99 -0
  666. package/webkit/useContact.tsx +48 -0
  667. package/webkit/useCsrValues.ts +661 -0
  668. package/webkit/useDebounce.ts +24 -0
  669. package/webkit/useFetch.ts +48 -0
  670. package/webkit/useGeoLocation.tsx +24 -0
  671. package/webkit/useHistory.ts +76 -0
  672. package/webkit/useInterval.ts +21 -0
  673. package/webkit/useLocation.ts +69 -0
  674. package/webkit/usePurchase.tsx +156 -0
  675. package/webkit/usePushNoti.tsx +48 -0
  676. package/webkit/useThrottle.ts +22 -0
  677. package/src/index.js +0 -2
  678. package/src/index.js.map +0 -1
  679. package/src/lib/akan2.js +0 -4
  680. package/src/lib/akan2.js.map +0 -1
  681. package/src/run.js +0 -4
  682. package/src/run.js.map +0 -1
@@ -0,0 +1,161 @@
1
+ import { capitalize, randomPicks } from "akanjs/common";
2
+ import {
3
+ AiSession,
4
+ type App,
5
+ FileSys,
6
+ getRelatedCnsts,
7
+ type Module,
8
+ ModuleExecutor,
9
+ type Sys,
10
+ script,
11
+ type Workspace,
12
+ } from "akanjs/devkit";
13
+
14
+ import { PageScript } from "../page/page.script";
15
+ import * as request from "./module.request";
16
+ import { ModuleRequest } from "./module.request";
17
+ import { ModuleRunner } from "./module.runner";
18
+
19
+ export class ModuleScript extends script("module", [ModuleRunner, PageScript]) {
20
+ async createModuleTemplate(sys: Sys, name: string, { page = false }: { page?: boolean } = {}) {
21
+ const mod = ModuleExecutor.from(sys, name);
22
+ await this.moduleRunner.createModuleTemplate(mod);
23
+ if (page && sys.type === "app")
24
+ await this.pageScript.createCrudPage(mod, { app: sys as App, basePath: null, single: false });
25
+ await sys.scan();
26
+ }
27
+ async createModule(sys: Sys, name: string, description?: string, schemaDescription?: string) {
28
+ const session = new AiSession("createModule", { workspace: sys.workspace, cacheKey: name });
29
+ const [appNames, libNames] = await sys.workspace.getSyss();
30
+ const moduleConstantExampleFiles = await sys.workspace.getConstantFiles();
31
+ const moduleDictionaryExampleFiles = await sys.workspace.getDictionaryFiles();
32
+
33
+ const executor = ModuleExecutor.from(sys, name);
34
+ const { constant, dictionary } = await this.moduleRunner.createModuleTemplate(executor);
35
+ sys.log(`Module ${name} created in ${sys.type}s/${sys.name}/lib/${name}`);
36
+
37
+ const config = await sys.getConfig();
38
+ const moduleRequest = new ModuleRequest({ sysType: sys.type, sysName: sys.name, modelName: name, config });
39
+ const constantRequestPrompt = await moduleRequest.requestModelConstant({
40
+ modelDesc: description ?? "",
41
+ modelSchemaDesign: schemaDescription ?? "",
42
+ boilerplate: constant.content,
43
+ exampleFiles: randomPicks(moduleConstantExampleFiles, Math.min(10, moduleConstantExampleFiles.length)),
44
+ });
45
+ const constantContent = await session.editTypescript(constantRequestPrompt, { validate: [] });
46
+
47
+ await sys.writeFile(`lib/${name}/${name}.constant.ts`, constantContent);
48
+
49
+ const dictionaryContent = await session.editTypescript(
50
+ request.requestDictionary({
51
+ sysName: sys.name,
52
+ modelName: name,
53
+ constant: constantContent,
54
+ modelDesc: description ?? "",
55
+ modelSchemaDesign: schemaDescription ?? "",
56
+ boilerplate: dictionary.content,
57
+ exampleFiles: randomPicks(moduleConstantExampleFiles, Math.min(10, moduleConstantExampleFiles.length)),
58
+ }),
59
+ );
60
+ await sys.writeFile(`lib/${name}/${name}.dictionary.ts`, dictionaryContent);
61
+
62
+ await this.createView(executor);
63
+ await this.createUnit(executor);
64
+ await this.createTemplate(executor);
65
+ sys.log(`Module ${name} created in ${sys.type}s/${sys.name}/lib/${name}`);
66
+ }
67
+ async createModule_(sys: Sys, name: string, description: string, schemaDescription: string) {
68
+ const session = new AiSession("createModule", { workspace: sys.workspace, cacheKey: name });
69
+ const [appNames, libNames] = await sys.workspace.getSyss();
70
+ const moduleConstantExampleFiles = await sys.workspace.getConstantFiles();
71
+ const moduleDictionaryExampleFiles = await sys.workspace.getDictionaryFiles();
72
+
73
+ const executor = ModuleExecutor.from(sys, name);
74
+
75
+ sys.log(`Module ${name} created in ${sys.type}s/${sys.name}/lib/${name}`);
76
+
77
+ await this.createView(executor);
78
+ await this.createUnit(executor);
79
+ await this.createTemplate(executor);
80
+ sys.log(`Module ${name} created in ${sys.type}s/${sys.name}/lib/${name}`);
81
+ }
82
+ async removeModule(mod: Module) {
83
+ await this.moduleRunner.removeModule(mod);
84
+ }
85
+ async createService(workspace: Workspace, name: string) {
86
+ }
87
+ async createTest(workspace: Workspace, name: string) {
88
+ }
89
+ async createTemplate(mod: Module) {
90
+ const { component: template } = await this.moduleRunner.createComponentTemplate(mod, "template");
91
+ const templateExampleFiles = (await mod.sys.getTemplatesSourceCode()).filter(
92
+ (f) => !f.filePath.includes(`${mod.name}.Template.tsx`),
93
+ );
94
+ const Name = capitalize(mod.name);
95
+ const relatedCnsts = getRelatedCnsts(`${mod.sys.cwdPath}/lib/${mod.name}/${mod.name}.constant.ts`);
96
+ const constant = await FileSys.readText(`${mod.sys.cwdPath}/lib/${mod.name}/${mod.name}.constant.ts`);
97
+ const session = new AiSession("createTemplate", { workspace: mod.sys.workspace, cacheKey: mod.name });
98
+ const promptRst = request.requestTemplate({
99
+ sysName: mod.sys.name,
100
+ modelName: mod.name,
101
+ ModelName: Name,
102
+ constant: constant,
103
+ boilerplate: template.content,
104
+ properties: relatedCnsts.map((r) => ({ key: r.key, source: r.source })),
105
+ exampleFiles: randomPicks(templateExampleFiles, Math.min(20, templateExampleFiles.length)),
106
+ });
107
+ const content = await session.editTypescript(promptRst);
108
+
109
+ mod.writeFile(`${Name}.Template.tsx`, content);
110
+ }
111
+
112
+ async createUnit(mod: Module) {
113
+ const { component: unit } = await this.moduleRunner.createComponentTemplate(mod, "unit");
114
+ const Name = capitalize(mod.name);
115
+ const unitExampleFiles = (await mod.sys.getUnitsSourceCode()).filter(
116
+ (f) => !f.filePath.includes(`${mod.name}.Unit.tsx`),
117
+ );
118
+ const relatedCnsts = getRelatedCnsts(`${mod.sys.cwdPath}/lib/${mod.name}/${mod.name}.constant.ts`);
119
+ const constant = await FileSys.readText(`${mod.sys.cwdPath}/lib/${mod.name}/${mod.name}.constant.ts`);
120
+ const session = new AiSession("createUnit", { workspace: mod.sys.workspace, cacheKey: mod.name });
121
+
122
+ const promptRst = request.requestUnit({
123
+ sysName: mod.sys.name,
124
+ modelName: mod.name,
125
+ ModelName: Name,
126
+ constant: constant,
127
+ properties: relatedCnsts.map((r) => ({ key: r.key, source: r.source })),
128
+ exampleFiles: randomPicks(unitExampleFiles, Math.min(10, unitExampleFiles.length)),
129
+ boilerplate: unit.content,
130
+ });
131
+
132
+ const content = await session.editTypescript(promptRst);
133
+
134
+ mod.writeFile(`${Name}.Unit.tsx`, content);
135
+ }
136
+
137
+ async createView(mod: Module) {
138
+ const { component: view } = await this.moduleRunner.createComponentTemplate(mod, "view");
139
+ const viewExampleFiles = (await mod.sys.getViewsSourceCode()).filter(
140
+ (f) => !f.filePath.includes(`${mod.name}.View.tsx`),
141
+ );
142
+ const Name = capitalize(mod.name);
143
+ const relatedCnsts = getRelatedCnsts(`${mod.sys.cwdPath}/lib/${mod.name}/${mod.name}.constant.ts`);
144
+ const constant = await FileSys.readText(`${mod.sys.cwdPath}/lib/${mod.name}/${mod.name}.constant.ts`);
145
+ const session = new AiSession("createView", { workspace: mod.sys.workspace, cacheKey: mod.name });
146
+ const promptRst = request.requestView({
147
+ sysName: mod.sys.name,
148
+ modelName: mod.name,
149
+ ModelName: Name,
150
+ constant: constant,
151
+ boilerplate: view.content,
152
+ properties: relatedCnsts.map((r) => ({ key: r.key, source: r.source })),
153
+ exampleFiles: randomPicks(viewExampleFiles, Math.min(20, viewExampleFiles.length)),
154
+ });
155
+
156
+ const content = await session.editTypescript(promptRst);
157
+
158
+ mod.writeFile(`${Name}.View.tsx`, content);
159
+ }
160
+ }
161
+
@@ -0,0 +1,32 @@
1
+ import { command, Pkg, Workspace } from "akanjs/devkit";
2
+
3
+ import { PackageScript } from "./package.script";
4
+
5
+ export class PackageCommand extends command("package", [PackageScript], ({ public: target }) => ({
6
+ version: target({ desc: "Show version information for all packages" })
7
+ .with(Workspace)
8
+ .exec(async function (workspace) {
9
+ await this.packageScript.version(workspace);
10
+ }),
11
+ createPackage: target({ desc: "Create a new package in pkgs/akanjs/" })
12
+ .option("name", String, { desc: "name of package" })
13
+ .with(Workspace)
14
+ .exec(async function (name, workspace) {
15
+ await this.packageScript.createPackage(workspace, name.toLowerCase().replace(/ /g, "-"));
16
+ }),
17
+ removePackage: target({ desc: "Remove a package from the workspace" })
18
+ .with(Pkg)
19
+ .exec(async function (pkg) {
20
+ await this.packageScript.removePackage(pkg);
21
+ }),
22
+ syncPackage: target({ desc: "Sync dependencies and configuration for a package" })
23
+ .with(Pkg)
24
+ .exec(async function (pkg) {
25
+ await this.packageScript.syncPackage(pkg);
26
+ }),
27
+ buildPackage: target({ desc: "Build a package for distribution" })
28
+ .with(Pkg)
29
+ .exec(async function (pkg) {
30
+ await this.packageScript.buildPackage(pkg);
31
+ }),
32
+ })) {}
@@ -0,0 +1,64 @@
1
+ import { Logger } from "akanjs/common";
2
+ import {
3
+ FileSys,
4
+ type PackageJson,
5
+ type Pkg,
6
+ runner,
7
+ TypeScriptDependencyScanner,
8
+ type Workspace,
9
+ } from "akanjs/devkit";
10
+ import { $ } from "bun";
11
+
12
+ export class PackageRunner extends runner("package") {
13
+ async version(workspace: Workspace) {
14
+ const pkgJson = await FileSys.readJson<PackageJson>("package.json");
15
+ const version = pkgJson.version;
16
+ Logger.rawLog(`${pkgJson.name}@${version}`);
17
+ }
18
+ async createPackage(workspace: Workspace, pkgName: string) {
19
+ await workspace.applyTemplate({ basePath: `pkgs/${pkgName}`, template: "pkgRoot", dict: { pkgName } });
20
+ await workspace.setTsPaths("pkg", pkgName);
21
+ }
22
+ async removePackage(pkg: Pkg) {
23
+ await pkg.workspace.exec(`rm -rf pkgs/${pkg.name}`);
24
+ await pkg.workspace.unsetTsPaths("pkg", pkg.name);
25
+ }
26
+ async scanSync(pkg: Pkg) {
27
+ const scanResult = await pkg.scan();
28
+ return scanResult;
29
+ }
30
+ async buildPackage(pkg: Pkg) {
31
+ await $`rm -rf ${pkg.dist.cwdPath}`;
32
+ await pkg.dist.mkdir(pkg.dist.cwdPath);
33
+ const scanner = await TypeScriptDependencyScanner.from(pkg);
34
+ const { npmDeps, npmDevDeps, missingDeps } = await scanner.getPackageBuildDependencies(pkg.name);
35
+ if (missingDeps.length > 0)
36
+ throw new Error(`Missing dependency versions in root package.json: ${missingDeps.join(", ")}`);
37
+
38
+ await pkg.updatePackageJsonDependencies(npmDeps, npmDevDeps);
39
+
40
+ const hasBuildFile = await Bun.file(`${pkg.cwdPath}/build.ts`).exists();
41
+ if (hasBuildFile) {
42
+ await pkg.workspace.spawn(process.execPath, [`${pkg.cwdPath}/build.ts`], { env: process.env, stdio: "inherit" });
43
+ } else {
44
+ await $`cp -r ${pkg.cwdPath}/. ${pkg.dist.cwdPath}`;
45
+ await Promise.all([pkg.generateDistPackageJson(npmDeps, npmDevDeps), pkg.generateTsconfigJson()]);
46
+ }
47
+ }
48
+
49
+ async updateWorskpaceRootPackageJson(workspace: Workspace, rootPackageJson: PackageJson) {
50
+ const templatePath = "pkgs/akanjs/cli/templates/workspaceRoot/package.json.template";
51
+ const pkgJsonTemplate = (await workspace.readJson(templatePath)) as PackageJson;
52
+ const { dependencies = {}, devDependencies = {} } = pkgJsonTemplate;
53
+ const newRootPackageJson = {
54
+ ...pkgJsonTemplate,
55
+ dependencies: Object.fromEntries(
56
+ Object.entries(dependencies).map(([key, value]) => [key, rootPackageJson.dependencies?.[key] ?? value]),
57
+ ),
58
+ devDependencies: Object.fromEntries(
59
+ Object.entries(devDependencies).map(([key, value]) => [key, rootPackageJson.devDependencies?.[key] ?? value]),
60
+ ),
61
+ };
62
+ await workspace.writeJson(templatePath, newRootPackageJson);
63
+ }
64
+ }
@@ -0,0 +1,35 @@
1
+ import { type Pkg, script, type Workspace } from "akanjs/devkit";
2
+
3
+ import { PackageRunner } from "./package.runner";
4
+
5
+ export class PackageScript extends script("package", [PackageRunner]) {
6
+ async version(workspace: Workspace) {
7
+ await this.packageRunner.version(workspace);
8
+ }
9
+ async createPackage(workspace: Workspace, pkgName: string) {
10
+ const spinner = workspace.spinning(`Creating package in pkgs/${pkgName}...`);
11
+ await this.packageRunner.createPackage(workspace, pkgName);
12
+ spinner.succeed(`Package in pkgs/${pkgName} is created`);
13
+ }
14
+ async removePackage(pkg: Pkg) {
15
+ const spinner = pkg.spinning(`Removing package in pkgs/${pkg.name}...`);
16
+ await this.packageRunner.removePackage(pkg);
17
+ spinner.succeed("Package removed");
18
+ }
19
+ async syncPackage(pkg: Pkg) {
20
+ const spinner = pkg.spinning("Scanning package...");
21
+ const scanResult = await this.packageRunner.scanSync(pkg);
22
+ spinner.succeed("Package scanned");
23
+ return scanResult;
24
+ }
25
+
26
+ async buildPackage(pkg: Pkg, { showSpinner = true }: { showSpinner?: boolean } = {}) {
27
+ const spinner = showSpinner ? pkg.spinning("Building package...") : undefined;
28
+ await this.packageRunner.buildPackage(pkg);
29
+ if (spinner) spinner.succeed("Package built");
30
+ }
31
+ async updateWorskpaceRootPackageJson(workspace: Workspace) {
32
+ const rootPackageJson = await workspace.getPackageJson();
33
+ await this.packageRunner.updateWorskpaceRootPackageJson(workspace, rootPackageJson);
34
+ }
35
+ }
@@ -0,0 +1,14 @@
1
+ import { App, command, Module } from "akanjs/devkit";
2
+
3
+ import { PageScript } from "./page.script";
4
+
5
+ export class PageCommand extends command("page", [PageScript], ({ public: target }) => ({
6
+ createCrudPage: target({ desc: "Create CRUD pages for a module (list, detail, create, edit)" })
7
+ .with(App)
8
+ .with(Module)
9
+ .option("basePath", String, { desc: "base path", nullable: true })
10
+ .option("single", Boolean, { desc: "single page", default: false })
11
+ .exec(async function (app, module, basePath, single) {
12
+ await this.pageScript.createCrudPage(module, { app, basePath, single });
13
+ }),
14
+ })) {}
@@ -0,0 +1,14 @@
1
+ import { type App, type Module, runner } from "akanjs/devkit";
2
+
3
+ export class PageRunner extends runner("page") {
4
+ async createCrudPage(
5
+ module: Module,
6
+ { app, basePath, single = false }: { app: App; basePath: string | null; single: boolean },
7
+ ) {
8
+ await app.applyTemplate({
9
+ basePath: basePath ?? `page/(${app.name})/(public)/${module.name}`,
10
+ template: single ? "crudSinglePage" : "crudPages",
11
+ dict: { model: module.name, appName: module.sys.name },
12
+ });
13
+ }
14
+ }
@@ -0,0 +1,12 @@
1
+ import { type App, type Module, script } from "akanjs/devkit";
2
+
3
+ import { PageRunner } from "./page.runner";
4
+
5
+ export class PageScript extends script("page", [PageRunner]) {
6
+ async createCrudPage(
7
+ module: Module,
8
+ { app, basePath, single = false }: { app: App; basePath: string | null; single: boolean },
9
+ ) {
10
+ await this.pageRunner.createCrudPage(module, { app, basePath, single });
11
+ }
12
+ }
@@ -0,0 +1,21 @@
1
+ import { lowerlize } from "akanjs/common";
2
+ import { command, Sys } from "akanjs/devkit";
3
+
4
+ import { ScalarScript } from "./scalar.script";
5
+
6
+ export class ScalarCommand extends command("scalar", [ScalarScript], ({ public: target }) => ({
7
+ createScalar: target({ desc: "Create a new scalar type (simple data model without DB)" })
8
+ .arg("scalarName", String, { desc: "name of scalar" })
9
+ .option("ai", Boolean, { default: false, desc: "use ai to create scalar" })
10
+ .with(Sys)
11
+ .exec(async function (scalarName, ai, sys) {
12
+ if (ai) await this.scalarScript.createScalarWithAi(sys, lowerlize(scalarName.replace(/ /g, "")));
13
+ await this.scalarScript.createScalar(sys, lowerlize(scalarName.replace(/ /g, "")));
14
+ }),
15
+ removeScalar: target({ desc: "Remove a scalar type from an app or library" })
16
+ .arg("scalarName", String, { desc: "name of scalar" })
17
+ .with(Sys)
18
+ .exec(async function (scalarName, sys) {
19
+ await this.scalarScript.removeScalar(sys, scalarName);
20
+ }),
21
+ })) {}
@@ -0,0 +1,131 @@
1
+ import { input } from "@inquirer/prompts";
2
+ import { type FileContent, Prompter, type Sys } from "akanjs/devkit";
3
+ import pluralize from "pluralize";
4
+
5
+ export class ScalarPrompt extends Prompter {
6
+ constructor(
7
+ readonly sys: Sys,
8
+ readonly name: string,
9
+ ) {
10
+ super();
11
+ }
12
+ async requestUpdateConstant() {
13
+ const request = await input({ message: `What do you want to change?` });
14
+ return { request, validate: undefined };
15
+ }
16
+ async requestCreateConstant() {
17
+ const constantFiles = await this.sys.getConstantFilesWithLibs();
18
+ const description = await input({ message: "description of scalar" });
19
+ const schemaDescription = await input({ message: "schema description of scalar" });
20
+ await this.sys.applyTemplate({
21
+ basePath: "./lib/__scalar",
22
+ template: "__scalar",
23
+ dict: { model: this.name, models: pluralize(this.name), sysName: this.sys.name },
24
+ });
25
+ const boilerplate = await this.sys.readFile(`lib/__scalar/${this.name}/${this.name}.constant.ts`);
26
+ return await this.#requestConstant({
27
+ modelDesc: description,
28
+ modelSchemaDesign: schemaDescription,
29
+ boilerplate,
30
+ constantFiles,
31
+ });
32
+ }
33
+ async #requestConstant({
34
+ modelDesc,
35
+ modelSchemaDesign,
36
+ boilerplate,
37
+ constantFiles,
38
+ }: {
39
+ modelDesc: string;
40
+ modelSchemaDesign: string;
41
+ boilerplate: string;
42
+ constantFiles: FileContent[];
43
+ }): Promise<{ request: string; validate: string[] }> {
44
+ const scanInfo = await this.sys.scan();
45
+ const guideJson = await Prompter.getGuideJson("scalarConstant");
46
+ const request = await this.makeTsFileUpdatePrompt({
47
+ context: `
48
+ 1. Overview of __scalar/<model>/<model>.constant.ts file
49
+ ${await this.getDocumentation("scalarConstant")}
50
+
51
+ 2. How to write Enums in __scalar/<model>/<model>.constant.ts file
52
+ ${await this.getDocumentation("enumConstant")}
53
+
54
+ 3. How to write Fields in __scalar/<model>/<model>.constant.ts file
55
+ ${await this.getDocumentation("fieldDecorator")}
56
+
57
+ 4. List of constant.ts files in other libraries connected to current ${this.sys.name} ${this.sys.type === "app" ? "Application" : "Library"} ${scanInfo
58
+ .getLibs()
59
+ .map((lib) => lib)
60
+ .join(", ")}
61
+ Please understand the content and file patterns below, and feel free to reuse any constants or enums if available.
62
+ ${constantFiles
63
+ .map(
64
+ (constant) => `
65
+ \`\`\`typescript
66
+ ${constant.content}
67
+ \`\`\`
68
+ `,
69
+ )
70
+ .join("\n")}
71
+ `,
72
+ request: `
73
+ Based on the above content, please organize it according to the boilerplate below for easy parsing
74
+
75
+ Application name: ${this.sys.name} (${this.sys.type === "app" ? "Application" : "Library"})
76
+ Model name: ${this.name}
77
+ Model description: ${modelDesc}
78
+ Model schema design: ${modelSchemaDesign}
79
+ Model filename(You can create another connected scalar model file if needed): ${this.name}.constant.ts
80
+ \`\`\`typescript
81
+ ${boilerplate}
82
+ \`\`\`
83
+
84
+ If additional connected scalar models need to be written besides ${this.name}.constant.ts file, please write them in the following format
85
+ \`\`\`typescript
86
+ ...file content
87
+ \`\`\`
88
+
89
+ Please provide only the file results without any other content.`,
90
+ });
91
+ return { request, validate: guideJson.update.rules };
92
+ }
93
+ async requestUpdateDictonaryWithInstruction() {
94
+ const constant = await this.sys.readFile(`lib/__scalar/${this.name}/${this.name}.constant.ts`);
95
+ const boilerplate = await this.sys.readFile(`lib/__scalar/${this.name}/${this.name}.dictionary.ts`);
96
+ const guideJson = await Prompter.getGuideJson("scalarDictionary");
97
+ const request = `다음 ${this.name}.dictionary.ts 파일도 완성된 ${this.name}.constant.ts 파일을 기반으로 작성해줘.
98
+ 1. Dictionary 작성법
99
+ ${await this.getDocumentation("scalarDictionary")}
100
+
101
+ Model constant file
102
+ \`\`\`typescript
103
+ ${constant}
104
+ \`\`\`
105
+
106
+ Model filename: ${this.name}.dictionary.ts
107
+ \`\`\`typescript
108
+ ${boilerplate}
109
+ \`\`\`
110
+ `;
111
+ return { request, validate: guideJson.update.rules };
112
+ }
113
+ async requestUpdateDictonaryWithFollowing() {
114
+ const [constant, boilerplate] = await Promise.all([
115
+ this.sys.readFile(`lib/__scalar/${this.name}/${this.name}.constant.ts`),
116
+ this.sys.readFile(`lib/__scalar/${this.name}/${this.name}.dictionary.ts`),
117
+ ]);
118
+ const request = `다음 ${this.name}.dictionary.ts 파일도 완성된 ${this.name}.constant.ts 파일을 기반으로 작성해줘.
119
+ Model constant file
120
+ \`\`\`typescript
121
+ ${constant}
122
+ \`\`\`
123
+
124
+ Model filename: ${this.name}.dictionary.ts
125
+ \`\`\`typescript
126
+ ${boilerplate}
127
+ \`\`\`
128
+ `;
129
+ return { request, validate: [] as string[] };
130
+ }
131
+ }
@@ -0,0 +1,38 @@
1
+ import { AiSession, runner, type Sys } from "akanjs/devkit";
2
+ import pluralize from "pluralize";
3
+
4
+ import { ScalarPrompt } from "./scalar.prompt";
5
+
6
+ export class ScalarRunner extends runner("scalar") {
7
+ async applyScalarTemplate(sys: Sys, scalarName: string) {
8
+ await sys.applyTemplate({
9
+ basePath: "./lib/__scalar",
10
+ template: "__scalar",
11
+ dict: { model: scalarName, models: pluralize(scalarName), sysName: sys.name },
12
+ overwrite: false,
13
+ });
14
+ }
15
+ async createScalarConstant(sys: Sys, scalarName: string) {
16
+ const isContinued = await sys.exists(`lib/__scalar/${scalarName}/${scalarName}.constant.ts`);
17
+ const prompt = new ScalarPrompt(sys, scalarName);
18
+ const session = new AiSession("createScalar", { workspace: sys.workspace, cacheKey: scalarName, isContinued });
19
+ const { request, validate } = session.isCacheLoaded
20
+ ? await prompt.requestUpdateConstant()
21
+ : await prompt.requestCreateConstant();
22
+ const writes = await session.writeTypescripts(request, sys, { validate });
23
+ const scalarNames = writes.map(({ filePath }) => filePath.split("/").at(-2)).filter((name) => !!name) as string[];
24
+ for (const name of scalarNames) await this.applyScalarTemplate(sys, name);
25
+ return { session, scalarNames, writes, prompt };
26
+ }
27
+ async updateScalarDictionaries(sys: Sys, scalarNames: string[], { session }: { session: AiSession }) {
28
+ const [firstScalarName, ...followingScalarNames] = scalarNames;
29
+ const prompt = new ScalarPrompt(sys, firstScalarName);
30
+ const { request, validate } = await prompt.requestUpdateDictonaryWithInstruction();
31
+ await session.writeTypescripts(request, sys, { validate });
32
+ for (const scalarName of followingScalarNames) {
33
+ const prompt = new ScalarPrompt(sys, scalarName);
34
+ const { request, validate } = await prompt.requestUpdateDictonaryWithFollowing();
35
+ await session.writeTypescripts(request, sys, { validate });
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,16 @@
1
+ import { type Sys, script } from "akanjs/devkit";
2
+
3
+ import { ScalarRunner } from "./scalar.runner";
4
+
5
+ export class ScalarScript extends script("scalar", [ScalarRunner]) {
6
+ async createScalar(sys: Sys, scalarName: string) {
7
+ await this.scalarRunner.applyScalarTemplate(sys, scalarName);
8
+ }
9
+ async createScalarWithAi(sys: Sys, scalarName: string) {
10
+ const { session, scalarNames } = await this.scalarRunner.createScalarConstant(sys, scalarName);
11
+ await this.scalarRunner.updateScalarDictionaries(sys, scalarNames, { session });
12
+ }
13
+ async removeScalar(sys: Sys, scalarName: string) {
14
+ await sys.removeDir(`lib/__scalar/${scalarName}`);
15
+ }
16
+ }
@@ -0,0 +1,15 @@
1
+ import type { AppInfo, LibInfo } from "akanjs/devkit";
2
+
3
+ interface Dict {
4
+ model: string;
5
+ Model: string;
6
+ }
7
+ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
8
+ return `
9
+ import { via } from "akanjs/constant";
10
+
11
+ export class ${dict.Model} extends via((field) => ({
12
+ field: field(String),
13
+ })) {}
14
+ `;
15
+ }
@@ -0,0 +1,19 @@
1
+ import type { AppInfo, LibInfo } from "akanjs/devkit";
2
+
3
+ interface Dict {
4
+ model: string;
5
+ Model: string;
6
+ }
7
+ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
8
+ return `
9
+ import { scalarDictionary } from "akanjs/dictionary";
10
+
11
+ import type { ${dict.Model} } from "./${dict.model}.constant";
12
+
13
+ export const dictionary = scalarDictionary(["en", "ko"])
14
+ .of((t) => t(["${dict.Model}", "${dict.Model}"]).desc(["${dict.Model} description", "${dict.Model} 설명"]))
15
+ .model<${dict.Model}>((t) => ({
16
+ field: t(["Field", "필드"]).desc(["Field Description", "필드 설명"]),
17
+ }));
18
+ `;
19
+ }
@@ -0,0 +1,15 @@
1
+ import type { AppInfo, LibInfo } from "akanjs/devkit";
2
+
3
+ interface Dict {
4
+ model: string;
5
+ Model: string;
6
+ }
7
+ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
8
+ return `
9
+ import { by } from "akanjs/document";
10
+
11
+ import * as cnst from "./${dict.model}.constant";
12
+
13
+ export class ${dict.Model} extends by(cnst.${dict.Model}) {}
14
+ `;
15
+ }
@@ -0,0 +1,14 @@
1
+ import type { AppInfo, LibInfo } from "akanjs/devkit";
2
+
3
+ interface Dict {
4
+ appName: string;
5
+ }
6
+ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
7
+ return `
8
+ import type { AppConfig } from "akanjs/devkit";
9
+
10
+ const config: AppConfig = {};
11
+
12
+ export default config;
13
+ `;
14
+ }
@@ -0,0 +1,8 @@
1
+ //! will be replaced with akan.config.ts
2
+ import { withBase } from "akanjs/devkit/capacitor.base.config";
3
+
4
+ export default withBase((config) => {
5
+ return {
6
+ ...config,
7
+ };
8
+ });
@@ -0,0 +1,12 @@
1
+ import type { AppInfo, LibInfo } from "akanjs/devkit";
2
+
3
+ interface Dict {
4
+ appName: string;
5
+ }
6
+ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
7
+ return `
8
+
9
+ export const someCommonLogic = () => {
10
+ };
11
+ `;
12
+ }
@@ -0,0 +1,10 @@
1
+ import type { AppInfo, LibInfo } from "akanjs/devkit";
2
+
3
+ interface Dict {
4
+ [key: string]: string;
5
+ }
6
+ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict = {}) {
7
+ return `
8
+ export * from "./commonLogic";
9
+ `;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { getEnv } from "akanjs/base";
2
+
3
+ import type { AppClientEnv } from "./env.client.type";
4
+
5
+ export const env: AppClientEnv = {
6
+ ...getEnv(),
7
+ } as const;
@@ -0,0 +1,7 @@
1
+ import { getEnv } from "akanjs/base";
2
+
3
+ import type { AppClientEnv } from "./env.client.type";
4
+
5
+ export const env: AppClientEnv = {
6
+ ...getEnv(),
7
+ } as const;