akanjs 2.0.7 → 2.1.0-rc.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 (498) hide show
  1. package/README.ko.md +4 -4
  2. package/README.md +4 -4
  3. package/client/router.ts +10 -3
  4. package/document/documentSchema.ts +9 -1
  5. package/index.ts +187 -0
  6. package/package.json +6 -50
  7. package/server/akanApp.ts +2 -24
  8. package/server/akanAppHeaders.ts +30 -0
  9. package/server/di/predefinedAdaptor.ts +1 -1
  10. package/types/dictionary/base.dictionary.d.ts +1 -1
  11. package/types/dictionary/dictionary.d.ts +8 -8
  12. package/types/document/documentSchema.d.ts +33 -0
  13. package/types/document/index.d.ts +1 -1
  14. package/types/document/schema.d.ts +1 -1
  15. package/types/document/types.d.ts +1 -1
  16. package/types/{devkit/akanConfig/types.d.ts → index.d.ts} +45 -54
  17. package/types/server/akanAppHeaders.d.ts +1 -0
  18. package/types/server/di/predefinedAdaptor.d.ts +1 -1
  19. package/types/store/baseSt.d.ts +2 -2
  20. package/ui/Link/SsrLink.tsx +2 -2
  21. package/webkit/useCodepush.tsx +1 -1
  22. package/cli/application/application.command.ts +0 -224
  23. package/cli/application/application.interface.tsx +0 -225
  24. package/cli/application/application.runner.ts +0 -355
  25. package/cli/application/application.script.ts +0 -244
  26. package/cli/build.ts +0 -27
  27. package/cli/cloud/cloud.command.ts +0 -48
  28. package/cli/cloud/cloud.runner.ts +0 -157
  29. package/cli/cloud/cloud.script.ts +0 -40
  30. package/cli/guideline/guideline.command.ts +0 -31
  31. package/cli/guideline/guideline.prompt.ts +0 -212
  32. package/cli/guideline/guideline.runner.ts +0 -53
  33. package/cli/guideline/guideline.script.ts +0 -33
  34. package/cli/guidelines/___library/sharedUiStructureDescription.en.md +0 -767
  35. package/cli/guidelines/___library/utilUiStructureDescription.en.md +0 -395
  36. package/cli/guidelines/___lint/lintRuleDescription.en.md +0 -64
  37. package/cli/guidelines/___module/moduleStructureDescription.en.md +0 -80
  38. package/cli/guidelines/componentRule/componentRule.generate.json +0 -131
  39. package/cli/guidelines/componentRule/componentRule.instruction.md +0 -637
  40. package/cli/guidelines/cssRule/cssRule.generate.json +0 -93
  41. package/cli/guidelines/cssRule/cssRule.instruction.md +0 -435
  42. package/cli/guidelines/databaseModule/databaseModule.generate.json +0 -51
  43. package/cli/guidelines/databaseModule/databaseModule.instruction.md +0 -612
  44. package/cli/guidelines/docPageRule/docPageRule.generate.json +0 -72
  45. package/cli/guidelines/docPageRule/docPageRule.instruction.md +0 -389
  46. package/cli/guidelines/enumConstant/enumConstant.generate.json +0 -24
  47. package/cli/guidelines/enumConstant/enumConstant.instruction.md +0 -232
  48. package/cli/guidelines/framework/framework.generate.json +0 -119
  49. package/cli/guidelines/framework/framework.instruction.md +0 -1110
  50. package/cli/guidelines/howToUseStore/howToUseStore.generate.json +0 -0
  51. package/cli/guidelines/modelConstant/modelConstant.generate.json +0 -128
  52. package/cli/guidelines/modelConstant/modelConstant.instruction.md +0 -506
  53. package/cli/guidelines/modelDictionary/modelDictionary.generate.json +0 -108
  54. package/cli/guidelines/modelDictionary/modelDictionary.instruction.md +0 -547
  55. package/cli/guidelines/modelDocument/modelDocument.generate.json +0 -129
  56. package/cli/guidelines/modelDocument/modelDocument.instruction.md +0 -509
  57. package/cli/guidelines/modelService/modelService.generate.json +0 -135
  58. package/cli/guidelines/modelService/modelService.instruction.md +0 -708
  59. package/cli/guidelines/modelSignal/modelSignal.generate.json +0 -201
  60. package/cli/guidelines/modelSignal/modelSignal.instruction.md +0 -552
  61. package/cli/guidelines/modelStore/modelStore.generate.json +0 -130
  62. package/cli/guidelines/modelStore/modelStore.instruction.md +0 -585
  63. package/cli/guidelines/modelTemplate/modelTemplate.generate.json +0 -104
  64. package/cli/guidelines/modelTemplate/modelTemplate.instruction.md +0 -604
  65. package/cli/guidelines/modelUnit/modelUnit.generate.json +0 -92
  66. package/cli/guidelines/modelUnit/modelUnit.instruction.md +0 -541
  67. package/cli/guidelines/modelUtil/modelUtil.generate.json +0 -93
  68. package/cli/guidelines/modelUtil/modelUtil.instruction.md +0 -752
  69. package/cli/guidelines/modelView/modelView.generate.json +0 -80
  70. package/cli/guidelines/modelView/modelView.instruction.md +0 -1005
  71. package/cli/guidelines/modelZone/modelZone.generate.json +0 -126
  72. package/cli/guidelines/modelZone/modelZone.instruction.md +0 -528
  73. package/cli/guidelines/scalarConstant/scalarConstant.generate.json +0 -106
  74. package/cli/guidelines/scalarConstant/scalarConstant.instruction.md +0 -442
  75. package/cli/guidelines/scalarDictionary/scalarDictionary.generate.json +0 -83
  76. package/cli/guidelines/scalarDictionary/scalarDictionary.instruction.md +0 -273
  77. package/cli/guidelines/scalarModule/scalarModule.generate.json +0 -35
  78. package/cli/guidelines/scalarModule/scalarModule.instruction.md +0 -81
  79. package/cli/guidelines/sharedUiUsage/sharedUiUsage.generate.json +0 -108
  80. package/cli/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +0 -310
  81. package/cli/guidelines/utilUiUsage/utilUiUsage.generate.json +0 -140
  82. package/cli/guidelines/utilUiUsage/utilUiUsage.instruction.md +0 -339
  83. package/cli/index.js +0 -184444
  84. package/cli/index.ts +0 -24
  85. package/cli/library/library.command.ts +0 -28
  86. package/cli/library/library.runner.ts +0 -66
  87. package/cli/library/library.script.ts +0 -39
  88. package/cli/module/module.command.ts +0 -35
  89. package/cli/module/module.prompt.ts +0 -18
  90. package/cli/module/module.request.ts +0 -319
  91. package/cli/module/module.runner.ts +0 -76
  92. package/cli/module/module.script.ts +0 -161
  93. package/cli/npmRegistry.ts +0 -13
  94. package/cli/openBrowser.ts +0 -15
  95. package/cli/package/package.command.ts +0 -32
  96. package/cli/package/package.runner.ts +0 -94
  97. package/cli/package/package.script.ts +0 -35
  98. package/cli/page/page.command.ts +0 -14
  99. package/cli/page/page.runner.ts +0 -14
  100. package/cli/page/page.script.ts +0 -12
  101. package/cli/pluralizeName.ts +0 -5
  102. package/cli/scalar/scalar.command.ts +0 -21
  103. package/cli/scalar/scalar.prompt.ts +0 -131
  104. package/cli/scalar/scalar.runner.ts +0 -38
  105. package/cli/scalar/scalar.script.ts +0 -16
  106. package/cli/semver.ts +0 -18
  107. package/cli/templates/__scalar/__model__/__model__.constant.ts +0 -15
  108. package/cli/templates/__scalar/__model__/__model__.dictionary.ts +0 -19
  109. package/cli/templates/__scalar/__model__/__model__.document.ts +0 -15
  110. package/cli/templates/app/akan.config.ts +0 -14
  111. package/cli/templates/app/env/env.client.debug.ts.template +0 -7
  112. package/cli/templates/app/env/env.client.develop.ts.template +0 -7
  113. package/cli/templates/app/env/env.client.local.ts.template +0 -7
  114. package/cli/templates/app/env/env.client.main.ts.template +0 -7
  115. package/cli/templates/app/env/env.client.testing.ts.template +0 -7
  116. package/cli/templates/app/env/env.client.ts +0 -21
  117. package/cli/templates/app/env/env.client.type.ts +0 -16
  118. package/cli/templates/app/env/env.server.debug.ts.template +0 -7
  119. package/cli/templates/app/env/env.server.develop.ts.template +0 -7
  120. package/cli/templates/app/env/env.server.local.ts.template +0 -7
  121. package/cli/templates/app/env/env.server.main.ts.template +0 -7
  122. package/cli/templates/app/env/env.server.testing.ts.template +0 -6
  123. package/cli/templates/app/env/env.server.ts +0 -20
  124. package/cli/templates/app/lib/___appName__/__appName__.dictionary.ts +0 -17
  125. package/cli/templates/app/lib/___appName__/__appName__.service.ts +0 -13
  126. package/cli/templates/app/lib/___appName__/__appName__.signal.ts +0 -17
  127. package/cli/templates/app/lib/___appName__/__appName__.store.ts +0 -15
  128. package/cli/templates/app/lib/option.ts +0 -17
  129. package/cli/templates/app/main.ts +0 -16
  130. package/cli/templates/app/package.json.template +0 -5
  131. package/cli/templates/app/page/_index.tsx +0 -296
  132. package/cli/templates/app/page/_layout.tsx +0 -31
  133. package/cli/templates/app/page/styles.css.template +0 -53
  134. package/cli/templates/app/public/favicon.ico +0 -0
  135. package/cli/templates/app/public/logo.png +0 -0
  136. package/cli/templates/app/tsconfig.json.template +0 -21
  137. package/cli/templates/client.ts +0 -46
  138. package/cli/templates/crudPages/[__model__Id]/edit/page.tsx +0 -47
  139. package/cli/templates/crudPages/[__model__Id]/page.tsx +0 -52
  140. package/cli/templates/crudPages/new/page.tsx +0 -42
  141. package/cli/templates/crudPages/page.tsx +0 -43
  142. package/cli/templates/crudSinglePage/page.tsx +0 -37
  143. package/cli/templates/env/_env.server.type.ts +0 -16
  144. package/cli/templates/facetIndex/index.ts +0 -32
  145. package/cli/templates/index.ts +0 -10
  146. package/cli/templates/lib/__lib/lib.constant.ts +0 -38
  147. package/cli/templates/lib/__lib/lib.dictionary.ts +0 -33
  148. package/cli/templates/lib/__lib/lib.document.ts +0 -35
  149. package/cli/templates/lib/__lib/lib.service.ts +0 -33
  150. package/cli/templates/lib/__lib/lib.signal.ts +0 -34
  151. package/cli/templates/lib/__lib/lib.store.ts +0 -33
  152. package/cli/templates/lib/cnst.ts +0 -29
  153. package/cli/templates/lib/db.ts +0 -32
  154. package/cli/templates/lib/dict.ts +0 -49
  155. package/cli/templates/lib/sig.ts +0 -60
  156. package/cli/templates/lib/srv.ts +0 -34
  157. package/cli/templates/lib/st.ts +0 -31
  158. package/cli/templates/lib/useClient.ts +0 -19
  159. package/cli/templates/lib/useServer.ts +0 -7
  160. package/cli/templates/libRoot/.gitignore.template +0 -16
  161. package/cli/templates/libRoot/akan.config.ts +0 -12
  162. package/cli/templates/libRoot/base/baseLogic.ts +0 -10
  163. package/cli/templates/libRoot/base/index.ts +0 -8
  164. package/cli/templates/libRoot/common/commonLogic.ts +0 -10
  165. package/cli/templates/libRoot/common/index.ts +0 -8
  166. package/cli/templates/libRoot/env/env.server.example.ts.template +0 -6
  167. package/cli/templates/libRoot/env/env.server.testing.ts.template +0 -6
  168. package/cli/templates/libRoot/lib/___libName__/__libName__.dictionary.ts +0 -15
  169. package/cli/templates/libRoot/lib/___libName__/__libName__.service.ts +0 -11
  170. package/cli/templates/libRoot/lib/___libName__/__libName__.store.ts +0 -13
  171. package/cli/templates/libRoot/lib/option.ts +0 -17
  172. package/cli/templates/libRoot/package.json.template +0 -5
  173. package/cli/templates/libRoot/srvkit/backendLogic.ts +0 -10
  174. package/cli/templates/libRoot/srvkit/index.ts +0 -8
  175. package/cli/templates/libRoot/tsconfig.json.template +0 -11
  176. package/cli/templates/libRoot/ui/index.ts +0 -7
  177. package/cli/templates/libRoot/webkit/frontendLogic.ts +0 -10
  178. package/cli/templates/libRoot/webkit/index.ts +0 -8
  179. package/cli/templates/localDev/docker-compose.yaml.template +0 -37
  180. package/cli/templates/module/__Model__.Template.tsx +0 -36
  181. package/cli/templates/module/__Model__.Unit.tsx +0 -26
  182. package/cli/templates/module/__Model__.Util.tsx +0 -30
  183. package/cli/templates/module/__Model__.View.tsx +0 -29
  184. package/cli/templates/module/__Model__.Zone.tsx +0 -43
  185. package/cli/templates/module/__model__.constant.ts +0 -24
  186. package/cli/templates/module/__model__.dictionary.ts +0 -30
  187. package/cli/templates/module/__model__.document.ts +0 -23
  188. package/cli/templates/module/__model__.service.ts +0 -16
  189. package/cli/templates/module/__model__.signal.ts +0 -27
  190. package/cli/templates/module/__model__.store.ts +0 -19
  191. package/cli/templates/moduleRoot/index.tsx +0 -31
  192. package/cli/templates/pkgRoot/tsconfig.json.template +0 -10
  193. package/cli/templates/server.ts +0 -45
  194. package/cli/templates/workspaceRoot/.env.template +0 -14
  195. package/cli/templates/workspaceRoot/.gitignore.template +0 -120
  196. package/cli/templates/workspaceRoot/.vscode/settings.json.template +0 -23
  197. package/cli/templates/workspaceRoot/biome.json.template +0 -191
  198. package/cli/templates/workspaceRoot/bunfig.toml +0 -4
  199. package/cli/templates/workspaceRoot/package.json.template +0 -7
  200. package/cli/templates/workspaceRoot/tsconfig.json.template +0 -29
  201. package/cli/testHelpers.ts +0 -171
  202. package/cli/workspace/workspace.command.ts +0 -55
  203. package/cli/workspace/workspace.runner.ts +0 -79
  204. package/cli/workspace/workspace.script.ts +0 -74
  205. package/devkit/aiEditor.ts +0 -299
  206. package/devkit/akanApp/akanApp.host.ts +0 -393
  207. package/devkit/akanApp/index.ts +0 -1
  208. package/devkit/akanConfig/akanConfig.ts +0 -360
  209. package/devkit/akanConfig/index.ts +0 -2
  210. package/devkit/akanConfig/types.ts +0 -187
  211. package/devkit/applicationBuildReporter.ts +0 -69
  212. package/devkit/applicationBuildRunner.ts +0 -302
  213. package/devkit/applicationReleasePackager.ts +0 -205
  214. package/devkit/artifact/implicitRootLayout.ts +0 -155
  215. package/devkit/artifact/index.ts +0 -1
  216. package/devkit/artifact/routeSeedIndex.ts +0 -128
  217. package/devkit/auth.ts +0 -41
  218. package/devkit/builder.ts +0 -164
  219. package/devkit/capacitor.base.config.ts +0 -88
  220. package/devkit/capacitorApp.ts +0 -443
  221. package/devkit/commandDecorators/argMeta.ts +0 -102
  222. package/devkit/commandDecorators/command.ts +0 -340
  223. package/devkit/commandDecorators/commandBuilder.ts +0 -224
  224. package/devkit/commandDecorators/commandMeta.ts +0 -6
  225. package/devkit/commandDecorators/dependencyBuilder.ts +0 -100
  226. package/devkit/commandDecorators/helpFormatter.ts +0 -220
  227. package/devkit/commandDecorators/index.ts +0 -8
  228. package/devkit/commandDecorators/targetMeta.ts +0 -31
  229. package/devkit/commandDecorators/types.ts +0 -10
  230. package/devkit/constants.ts +0 -25
  231. package/devkit/createTunnel.ts +0 -36
  232. package/devkit/dependencyScanner.ts +0 -339
  233. package/devkit/executors.ts +0 -1362
  234. package/devkit/extractDeps.ts +0 -85
  235. package/devkit/fileEditor.ts +0 -106
  236. package/devkit/fileSys.ts +0 -39
  237. package/devkit/frontendBuild/allRoutesBuilder.ts +0 -103
  238. package/devkit/frontendBuild/clientBuildTypes.ts +0 -114
  239. package/devkit/frontendBuild/clientEntriesBundler.ts +0 -300
  240. package/devkit/frontendBuild/clientEntryDiscovery.ts +0 -196
  241. package/devkit/frontendBuild/csrArtifactBuilder.ts +0 -237
  242. package/devkit/frontendBuild/cssCompiler.ts +0 -285
  243. package/devkit/frontendBuild/cssImportResolver.ts +0 -116
  244. package/devkit/frontendBuild/fontOptimizer.ts +0 -427
  245. package/devkit/frontendBuild/hmrChangeClassifier.ts +0 -28
  246. package/devkit/frontendBuild/hmrWatcher.ts +0 -101
  247. package/devkit/frontendBuild/index.ts +0 -18
  248. package/devkit/frontendBuild/pagesBundleBuilder.ts +0 -137
  249. package/devkit/frontendBuild/pagesEntrySourceGenerator.ts +0 -37
  250. package/devkit/frontendBuild/precompressArtifacts.ts +0 -59
  251. package/devkit/frontendBuild/routeClientBuilder.ts +0 -290
  252. package/devkit/frontendBuild/routesManifestArtifactSerializer.ts +0 -62
  253. package/devkit/frontendBuild/ssrBaseArtifactBuilder.ts +0 -139
  254. package/devkit/frontendBuild/vendorSpecifiers.ts +0 -16
  255. package/devkit/frontendBuild/watchRootResolver.ts +0 -28
  256. package/devkit/getCredentials.ts +0 -19
  257. package/devkit/getDirname.ts +0 -3
  258. package/devkit/getModelFileData.ts +0 -59
  259. package/devkit/getRelatedCnsts.ts +0 -300
  260. package/devkit/guideline.ts +0 -19
  261. package/devkit/incrementalBuilder/incrementalBuilder.host.ts +0 -152
  262. package/devkit/incrementalBuilder/incrementalBuilder.proc.ts +0 -331
  263. package/devkit/incrementalBuilder/index.ts +0 -1
  264. package/devkit/index.ts +0 -36
  265. package/devkit/lint/no-deep-internal-import.grit +0 -25
  266. package/devkit/lint/no-import-client-functions.grit +0 -32
  267. package/devkit/lint/no-import-external-library.grit +0 -21
  268. package/devkit/lint/no-js-private-class-method.grit +0 -42
  269. package/devkit/lint/no-use-client-in-server.grit +0 -7
  270. package/devkit/lint/non-scalar-props-restricted.grit +0 -13
  271. package/devkit/linter.ts +0 -248
  272. package/devkit/mobile/index.ts +0 -1
  273. package/devkit/mobile/mobileTarget.ts +0 -88
  274. package/devkit/prompter.ts +0 -71
  275. package/devkit/scanInfo.ts +0 -606
  276. package/devkit/selectModel.ts +0 -11
  277. package/devkit/spinner.ts +0 -54
  278. package/devkit/src/capacitorApp.ts +0 -277
  279. package/devkit/sshTunnel.ts +0 -151
  280. package/devkit/streamAi.ts +0 -45
  281. package/devkit/transforms/barrelAnalyzer.ts +0 -249
  282. package/devkit/transforms/barrelImportsPlugin.ts +0 -457
  283. package/devkit/transforms/externalizeFrameworkPlugin.ts +0 -159
  284. package/devkit/transforms/index.ts +0 -5
  285. package/devkit/transforms/rscUseClientTransform.ts +0 -52
  286. package/devkit/transforms/useClientBundlePlugin.ts +0 -47
  287. package/devkit/typeChecker.ts +0 -260
  288. package/devkit/types.ts +0 -44
  289. package/devkit/ui/MultiScrollList.tsx +0 -228
  290. package/devkit/ui/ScrollList.tsx +0 -106
  291. package/devkit/ui/index.ts +0 -2
  292. package/devkit/uploadRelease.ts +0 -95
  293. package/devkit/useStdoutDimensions.ts +0 -20
  294. package/types/cli/application/application.command.d.ts +0 -7
  295. package/types/cli/application/application.interface.d.ts +0 -40
  296. package/types/cli/application/application.runner.d.ts +0 -66
  297. package/types/cli/application/application.script.d.ts +0 -72
  298. package/types/cli/build.d.ts +0 -1
  299. package/types/cli/cloud/cloud.command.d.ts +0 -7
  300. package/types/cli/cloud/cloud.runner.d.ts +0 -13
  301. package/types/cli/cloud/cloud.script.d.ts +0 -23
  302. package/types/cli/guideline/guideline.command.d.ts +0 -7
  303. package/types/cli/guideline/guideline.prompt.d.ts +0 -29
  304. package/types/cli/guideline/guideline.runner.d.ts +0 -21
  305. package/types/cli/guideline/guideline.script.d.ts +0 -16
  306. package/types/cli/index.d.ts +0 -2
  307. package/types/cli/library/library.command.d.ts +0 -7
  308. package/types/cli/library/library.runner.d.ts +0 -11
  309. package/types/cli/library/library.script.d.ts +0 -13
  310. package/types/cli/module/module.command.d.ts +0 -7
  311. package/types/cli/module/module.prompt.d.ts +0 -13
  312. package/types/cli/module/module.request.d.ts +0 -63
  313. package/types/cli/module/module.runner.d.ts +0 -55
  314. package/types/cli/module/module.script.d.ts +0 -22
  315. package/types/cli/npmRegistry.d.ts +0 -1
  316. package/types/cli/openBrowser.d.ts +0 -1
  317. package/types/cli/package/package.command.d.ts +0 -7
  318. package/types/cli/package/package.runner.d.ts +0 -13
  319. package/types/cli/package/package.script.d.ts +0 -18
  320. package/types/cli/page/page.command.d.ts +0 -7
  321. package/types/cli/page/page.runner.d.ts +0 -10
  322. package/types/cli/page/page.script.d.ts +0 -13
  323. package/types/cli/pluralizeName.d.ts +0 -1
  324. package/types/cli/scalar/scalar.command.d.ts +0 -7
  325. package/types/cli/scalar/scalar.prompt.d.ts +0 -23
  326. package/types/cli/scalar/scalar.runner.d.ts +0 -16
  327. package/types/cli/scalar/scalar.script.d.ts +0 -11
  328. package/types/cli/semver.d.ts +0 -1
  329. package/types/cli/templates/__scalar/__model__/__model__.constant.d.ts +0 -7
  330. package/types/cli/templates/__scalar/__model__/__model__.dictionary.d.ts +0 -7
  331. package/types/cli/templates/__scalar/__model__/__model__.document.d.ts +0 -7
  332. package/types/cli/templates/app/akan.config.d.ts +0 -6
  333. package/types/cli/templates/app/env/env.client.d.ts +0 -6
  334. package/types/cli/templates/app/env/env.client.type.d.ts +0 -6
  335. package/types/cli/templates/app/env/env.server.d.ts +0 -6
  336. package/types/cli/templates/app/lib/___appName__/__appName__.dictionary.d.ts +0 -7
  337. package/types/cli/templates/app/lib/___appName__/__appName__.service.d.ts +0 -7
  338. package/types/cli/templates/app/lib/___appName__/__appName__.signal.d.ts +0 -7
  339. package/types/cli/templates/app/lib/___appName__/__appName__.store.d.ts +0 -7
  340. package/types/cli/templates/app/lib/option.d.ts +0 -6
  341. package/types/cli/templates/app/main.d.ts +0 -6
  342. package/types/cli/templates/app/page/_index.d.ts +0 -9
  343. package/types/cli/templates/app/page/_layout.d.ts +0 -11
  344. package/types/cli/templates/client.d.ts +0 -4
  345. package/types/cli/templates/crudPages/[__model__Id]/edit/page.d.ts +0 -11
  346. package/types/cli/templates/crudPages/[__model__Id]/page.d.ts +0 -11
  347. package/types/cli/templates/crudPages/new/page.d.ts +0 -11
  348. package/types/cli/templates/crudPages/page.d.ts +0 -11
  349. package/types/cli/templates/crudSinglePage/page.d.ts +0 -11
  350. package/types/cli/templates/env/_env.server.type.d.ts +0 -7
  351. package/types/cli/templates/facetIndex/index.d.ts +0 -13
  352. package/types/cli/templates/facetIndex.d.ts +0 -1
  353. package/types/cli/templates/index.d.ts +0 -6
  354. package/types/cli/templates/lib/__lib/lib.constant.d.ts +0 -4
  355. package/types/cli/templates/lib/__lib/lib.dictionary.d.ts +0 -4
  356. package/types/cli/templates/lib/__lib/lib.document.d.ts +0 -4
  357. package/types/cli/templates/lib/__lib/lib.service.d.ts +0 -4
  358. package/types/cli/templates/lib/__lib/lib.signal.d.ts +0 -4
  359. package/types/cli/templates/lib/__lib/lib.store.d.ts +0 -4
  360. package/types/cli/templates/lib/cnst.d.ts +0 -4
  361. package/types/cli/templates/lib/db.d.ts +0 -4
  362. package/types/cli/templates/lib/dict.d.ts +0 -4
  363. package/types/cli/templates/lib/sig.d.ts +0 -4
  364. package/types/cli/templates/lib/srv.d.ts +0 -4
  365. package/types/cli/templates/lib/st.d.ts +0 -4
  366. package/types/cli/templates/lib/useClient.d.ts +0 -4
  367. package/types/cli/templates/lib/useServer.d.ts +0 -4
  368. package/types/cli/templates/libRoot/akan.config.d.ts +0 -5
  369. package/types/cli/templates/libRoot/base/baseLogic.d.ts +0 -5
  370. package/types/cli/templates/libRoot/base/index.d.ts +0 -5
  371. package/types/cli/templates/libRoot/base.d.ts +0 -1
  372. package/types/cli/templates/libRoot/common/commonLogic.d.ts +0 -5
  373. package/types/cli/templates/libRoot/common/index.d.ts +0 -5
  374. package/types/cli/templates/libRoot/common.d.ts +0 -1
  375. package/types/cli/templates/libRoot/lib/___libName__/__libName__.dictionary.d.ts +0 -6
  376. package/types/cli/templates/libRoot/lib/___libName__/__libName__.service.d.ts +0 -6
  377. package/types/cli/templates/libRoot/lib/___libName__/__libName__.store.d.ts +0 -6
  378. package/types/cli/templates/libRoot/lib/option.d.ts +0 -6
  379. package/types/cli/templates/libRoot/srvkit/backendLogic.d.ts +0 -5
  380. package/types/cli/templates/libRoot/srvkit/index.d.ts +0 -5
  381. package/types/cli/templates/libRoot/srvkit.d.ts +0 -1
  382. package/types/cli/templates/libRoot/ui/index.d.ts +0 -5
  383. package/types/cli/templates/libRoot/ui.d.ts +0 -1
  384. package/types/cli/templates/libRoot/webkit/frontendLogic.d.ts +0 -5
  385. package/types/cli/templates/libRoot/webkit/index.d.ts +0 -5
  386. package/types/cli/templates/libRoot/webkit.d.ts +0 -1
  387. package/types/cli/templates/module/__Model__.Template.d.ts +0 -11
  388. package/types/cli/templates/module/__Model__.Unit.d.ts +0 -11
  389. package/types/cli/templates/module/__Model__.Util.d.ts +0 -11
  390. package/types/cli/templates/module/__Model__.View.d.ts +0 -11
  391. package/types/cli/templates/module/__Model__.Zone.d.ts +0 -11
  392. package/types/cli/templates/module/__model__.constant.d.ts +0 -8
  393. package/types/cli/templates/module/__model__.dictionary.d.ts +0 -8
  394. package/types/cli/templates/module/__model__.document.d.ts +0 -8
  395. package/types/cli/templates/module/__model__.service.d.ts +0 -8
  396. package/types/cli/templates/module/__model__.signal.d.ts +0 -9
  397. package/types/cli/templates/module/__model__.store.d.ts +0 -8
  398. package/types/cli/templates/moduleRoot/index.d.ts +0 -11
  399. package/types/cli/templates/moduleRoot.d.ts +0 -1
  400. package/types/cli/templates/server.d.ts +0 -4
  401. package/types/cli/templates.d.ts +0 -1
  402. package/types/cli/testHelpers.d.ts +0 -64
  403. package/types/cli/workspace/workspace.command.d.ts +0 -7
  404. package/types/cli/workspace/workspace.runner.d.ts +0 -14
  405. package/types/cli/workspace/workspace.script.d.ts +0 -29
  406. package/types/cli.d.ts +0 -1
  407. package/types/devkit/aiEditor.d.ts +0 -50
  408. package/types/devkit/akanApp/akanApp.host.d.ts +0 -16
  409. package/types/devkit/akanApp/index.d.ts +0 -1
  410. package/types/devkit/akanApp.d.ts +0 -1
  411. package/types/devkit/akanConfig/akanConfig.d.ts +0 -36
  412. package/types/devkit/akanConfig/index.d.ts +0 -2
  413. package/types/devkit/akanConfig.d.ts +0 -1
  414. package/types/devkit/applicationBuildReporter.d.ts +0 -25
  415. package/types/devkit/applicationBuildRunner.d.ts +0 -29
  416. package/types/devkit/applicationReleasePackager.d.ts +0 -17
  417. package/types/devkit/artifact/implicitRootLayout.d.ts +0 -17
  418. package/types/devkit/artifact/index.d.ts +0 -1
  419. package/types/devkit/artifact/routeSeedIndex.d.ts +0 -38
  420. package/types/devkit/artifact.d.ts +0 -1
  421. package/types/devkit/auth.d.ts +0 -9
  422. package/types/devkit/builder.d.ts +0 -18
  423. package/types/devkit/capacitor.base.config.d.ts +0 -3
  424. package/types/devkit/capacitorApp.d.ts +0 -58
  425. package/types/devkit/commandDecorators/argMeta.d.ts +0 -68
  426. package/types/devkit/commandDecorators/command.d.ts +0 -2
  427. package/types/devkit/commandDecorators/commandBuilder.d.ts +0 -60
  428. package/types/devkit/commandDecorators/commandMeta.d.ts +0 -2
  429. package/types/devkit/commandDecorators/dependencyBuilder.d.ts +0 -22
  430. package/types/devkit/commandDecorators/helpFormatter.d.ts +0 -3
  431. package/types/devkit/commandDecorators/index.d.ts +0 -8
  432. package/types/devkit/commandDecorators/targetMeta.d.ts +0 -21
  433. package/types/devkit/commandDecorators/types.d.ts +0 -8
  434. package/types/devkit/commandDecorators.d.ts +0 -1
  435. package/types/devkit/constants.d.ts +0 -25
  436. package/types/devkit/createTunnel.d.ts +0 -8
  437. package/types/devkit/dependencyScanner.d.ts +0 -33
  438. package/types/devkit/executors.d.ts +0 -320
  439. package/types/devkit/extractDeps.d.ts +0 -7
  440. package/types/devkit/fileEditor.d.ts +0 -16
  441. package/types/devkit/fileSys.d.ts +0 -12
  442. package/types/devkit/frontendBuild/allRoutesBuilder.d.ts +0 -18
  443. package/types/devkit/frontendBuild/clientBuildTypes.d.ts +0 -107
  444. package/types/devkit/frontendBuild/clientEntriesBundler.d.ts +0 -12
  445. package/types/devkit/frontendBuild/clientEntryDiscovery.d.ts +0 -19
  446. package/types/devkit/frontendBuild/csrArtifactBuilder.d.ts +0 -16
  447. package/types/devkit/frontendBuild/cssCompiler.d.ts +0 -25
  448. package/types/devkit/frontendBuild/cssImportResolver.d.ts +0 -9
  449. package/types/devkit/frontendBuild/fontOptimizer.d.ts +0 -14
  450. package/types/devkit/frontendBuild/hmrChangeClassifier.d.ts +0 -5
  451. package/types/devkit/frontendBuild/hmrWatcher.d.ts +0 -21
  452. package/types/devkit/frontendBuild/index.d.ts +0 -18
  453. package/types/devkit/frontendBuild/pagesBundleBuilder.d.ts +0 -28
  454. package/types/devkit/frontendBuild/pagesEntrySourceGenerator.d.ts +0 -9
  455. package/types/devkit/frontendBuild/precompressArtifacts.d.ts +0 -7
  456. package/types/devkit/frontendBuild/routeClientBuilder.d.ts +0 -50
  457. package/types/devkit/frontendBuild/routesManifestArtifactSerializer.d.ts +0 -12
  458. package/types/devkit/frontendBuild/ssrBaseArtifactBuilder.d.ts +0 -16
  459. package/types/devkit/frontendBuild/vendorSpecifiers.d.ts +0 -2
  460. package/types/devkit/frontendBuild/watchRootResolver.d.ts +0 -6
  461. package/types/devkit/frontendBuild.d.ts +0 -1
  462. package/types/devkit/getCredentials.d.ts +0 -12
  463. package/types/devkit/getDirname.d.ts +0 -1
  464. package/types/devkit/getModelFileData.d.ts +0 -16
  465. package/types/devkit/getRelatedCnsts.d.ts +0 -53
  466. package/types/devkit/guideline.d.ts +0 -19
  467. package/types/devkit/incrementalBuilder/incrementalBuilder.host.d.ts +0 -30
  468. package/types/devkit/incrementalBuilder/incrementalBuilder.proc.d.ts +0 -1
  469. package/types/devkit/incrementalBuilder/index.d.ts +0 -1
  470. package/types/devkit/incrementalBuilder.d.ts +0 -1
  471. package/types/devkit/index.d.ts +0 -36
  472. package/types/devkit/linter.d.ts +0 -108
  473. package/types/devkit/mobile/index.d.ts +0 -1
  474. package/types/devkit/mobile/mobileTarget.d.ts +0 -14
  475. package/types/devkit/mobile.d.ts +0 -1
  476. package/types/devkit/prompter.d.ts +0 -15
  477. package/types/devkit/scanInfo.d.ts +0 -82
  478. package/types/devkit/selectModel.d.ts +0 -1
  479. package/types/devkit/spinner.d.ts +0 -20
  480. package/types/devkit/src/capacitorApp.d.ts +0 -39
  481. package/types/devkit/sshTunnel.d.ts +0 -14
  482. package/types/devkit/streamAi.d.ts +0 -6
  483. package/types/devkit/transforms/barrelAnalyzer.d.ts +0 -27
  484. package/types/devkit/transforms/barrelImportsPlugin.d.ts +0 -26
  485. package/types/devkit/transforms/externalizeFrameworkPlugin.d.ts +0 -49
  486. package/types/devkit/transforms/index.d.ts +0 -5
  487. package/types/devkit/transforms/rscUseClientTransform.d.ts +0 -10
  488. package/types/devkit/transforms/useClientBundlePlugin.d.ts +0 -19
  489. package/types/devkit/transforms.d.ts +0 -1
  490. package/types/devkit/typeChecker.d.ts +0 -62
  491. package/types/devkit/types.d.ts +0 -43
  492. package/types/devkit/ui/MultiScrollList.d.ts +0 -13
  493. package/types/devkit/ui/ScrollList.d.ts +0 -7
  494. package/types/devkit/ui/index.d.ts +0 -2
  495. package/types/devkit/ui.d.ts +0 -1
  496. package/types/devkit/uploadRelease.d.ts +0 -10
  497. package/types/devkit/useStdoutDimensions.d.ts +0 -1
  498. package/types/devkit.d.ts +0 -1
@@ -1,137 +0,0 @@
1
- import path from "node:path";
2
- import type { BunPlugin } from "bun";
3
- import type { PageEntry } from "../artifact/implicitRootLayout";
4
- import { resolveSsrPageEntriesForApp } from "../artifact/implicitRootLayout";
5
- import type { App } from "../commandDecorators";
6
- import { createBarrelImportsPlugin } from "../transforms/barrelImportsPlugin";
7
- import { createExternalizeFrameworkPlugin } from "../transforms/externalizeFrameworkPlugin";
8
- import { transformUseClient } from "../transforms/rscUseClientTransform";
9
- import { createUseClientBundlePlugin } from "../transforms/useClientBundlePlugin";
10
- import { PagesEntrySourceGenerator } from "./pagesEntrySourceGenerator";
11
-
12
- export interface BuildPagesBundleResult {
13
- /** Absolute path to the emitted `pages-[hash].js`. */
14
- bundlePath: string;
15
- /**
16
- * Monotonic build identifier. Bun.build emits a fresh filename whenever
17
- * any input changes, but importers still benefit from a `?v=<buildId>`
18
- * query-string cache bust — `buildId` is that value.
19
- */
20
- buildId: number;
21
- splitting: boolean;
22
- entryBytes: number;
23
- outputBytes: number;
24
- outputCount: number;
25
- chunkCount: number;
26
- }
27
-
28
- const VIRTUAL_PAGES_ENTRY = "akan-pages-entry";
29
-
30
- /**
31
- * Build the server-side pages bundle. The RSC worker loads the result with
32
- * `await import(bundlePath?v=buildId)`.
33
- */
34
- export class PagesBundleBuilder {
35
- #app: App;
36
- #command: "build" | "start";
37
- #pageEntries?: PageEntry[];
38
- #started = Date.now();
39
-
40
- constructor(app: App, command: "build" | "start" = "start", pageEntries?: PageEntry[]) {
41
- this.#app = app;
42
- this.#command = command;
43
- this.#pageEntries = pageEntries;
44
- }
45
-
46
- async build(): Promise<BuildPagesBundleResult> {
47
- const akanConfig = await this.#app.getConfig();
48
- const resolvedEntries =
49
- this.#pageEntries ?? (await resolveSsrPageEntriesForApp(this.#app, await this.#app.getPageKeys()));
50
- const entrySource = PagesEntrySourceGenerator.generate(resolvedEntries);
51
- const workspaceRoot = this.#app.workspace.workspaceRoot;
52
- const result = await Bun.build({
53
- entrypoints: [VIRTUAL_PAGES_ENTRY],
54
- outdir: `${this.#artifactDir}/server`,
55
- target: "bun",
56
- format: "esm",
57
- splitting: this.#splitting,
58
- minify: this.#command === "build",
59
- naming: {
60
- entry: "pages-[hash].[ext]",
61
- chunk: "chunks/[name]-[hash].[ext]",
62
- asset: "assets/[name]-[hash].[ext]",
63
- },
64
- define: this.#define(),
65
- plugins: [
66
- PagesBundleBuilder.createPagesEntryPlugin(entrySource),
67
- await createExternalizeFrameworkPlugin({ app: this.#app, extra: akanConfig.externalLibs }),
68
- akanConfig.barrelImports.length > 0
69
- ? await createBarrelImportsPlugin(this.#app, {
70
- pipeAfter: (source, args) =>
71
- transformUseClient(source, {
72
- path: args.path,
73
- workspaceRoot,
74
- }),
75
- })
76
- : createUseClientBundlePlugin({ workspaceRoot }),
77
- ],
78
- });
79
-
80
- if (!result.success) throw new AggregateError(result.logs, "[PagesBundleBuilder] Bun.build failed");
81
-
82
- const entryArtifact = result.outputs.find((a) => a.kind === "entry-point");
83
- if (!entryArtifact) throw new Error("[PagesBundleBuilder] Bun.build emitted no entry-point artifact");
84
-
85
- const bundlePath = path.resolve(entryArtifact.path);
86
- const buildId = Date.now();
87
- const outputBytes = result.outputs.reduce((sum, output) => sum + output.size, 0);
88
- const chunkCount = result.outputs.filter((output) => output.kind === "chunk").length;
89
- this.#app.verbose(
90
- `[PagesBundleBuilder] ${path.basename(bundlePath)} emitted in ${Date.now() - this.#started}ms splitting=${this.#splitting} entry=${entryArtifact.size} bytes outputs=${result.outputs.length} chunks=${chunkCount} total=${outputBytes} bytes`,
91
- );
92
- return {
93
- bundlePath,
94
- buildId,
95
- splitting: this.#splitting,
96
- entryBytes: entryArtifact.size,
97
- outputBytes,
98
- outputCount: result.outputs.length,
99
- chunkCount,
100
- };
101
- }
102
-
103
- get #artifactDir(): string {
104
- return `${this.#command === "build" ? this.#app.dist.cwdPath : this.#app.cwdPath}/.akan/artifact`;
105
- }
106
-
107
- get #splitting(): boolean {
108
- return process.env.AKAN_SERVER_PAGES_SPLITTING === "1";
109
- }
110
-
111
- #define(): Record<string, string> {
112
- const nodeEnv = this.#command === "build" ? "production" : (process.env.NODE_ENV ?? "development");
113
- return {
114
- "process.env.NODE_ENV": JSON.stringify(nodeEnv),
115
- "process.env.AKAN_PUBLIC_RENDER_ENV": JSON.stringify("ssr"),
116
- ...Object.fromEntries(
117
- Object.entries(this.#app.getPublicEnv()).map(([key, value]) => [`process.env.${key}`, JSON.stringify(value)]),
118
- ),
119
- };
120
- }
121
-
122
- static createPagesEntryPlugin(source: string): BunPlugin {
123
- return {
124
- name: "akan-pages-entry",
125
- setup(build) {
126
- build.onResolve({ filter: /^akan-pages-entry$/ }, () => ({
127
- path: VIRTUAL_PAGES_ENTRY,
128
- namespace: "akan-virtual",
129
- }));
130
- build.onLoad({ filter: /^akan-pages-entry$/, namespace: "akan-virtual" }, () => ({
131
- contents: source,
132
- loader: "tsx",
133
- }));
134
- },
135
- };
136
- }
137
- }
@@ -1,37 +0,0 @@
1
- import path from "node:path";
2
- import type { PageEntry } from "../artifact/implicitRootLayout";
3
-
4
- export class PagesEntrySourceGenerator {
5
- #pageEntries: PageEntry[];
6
-
7
- constructor(pageEntries: PageEntry[]) {
8
- this.#pageEntries = pageEntries;
9
- }
10
-
11
- static generate(pageEntries: PageEntry[]): string {
12
- return new PagesEntrySourceGenerator(pageEntries).generate();
13
- }
14
-
15
- generate(): string {
16
- const lines = this.#pageEntries.map(({ key, moduleAbsPath }) => {
17
- const absPath = path.resolve(moduleAbsPath);
18
- return ` ${JSON.stringify(key)}: () => import(${JSON.stringify(absPath)}),`;
19
- });
20
- return `export const pages = {\n${lines.join("\n")}\n};\n`;
21
- }
22
-
23
- static generateStatic(pageEntries: PageEntry[]): string {
24
- return new PagesEntrySourceGenerator(pageEntries).generateStatic();
25
- }
26
-
27
- generateStatic(): string {
28
- const imports = this.#pageEntries.map(({ moduleAbsPath }, index) => {
29
- const absPath = path.resolve(moduleAbsPath);
30
- return `import * as page${index} from ${JSON.stringify(absPath)};`;
31
- });
32
- const entries = this.#pageEntries.map(({ key }, index) => {
33
- return ` ${JSON.stringify(key)}: async () => page${index},`;
34
- });
35
- return `${imports.join("\n")}\nexport const pages = {\n${entries.join("\n")}\n};\n`;
36
- }
37
- }
@@ -1,59 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import type { App } from "../commandDecorators";
4
-
5
- const COMPRESSIBLE_EXTS = new Set([".css", ".html", ".js", ".json", ".svg"]);
6
- const MIN_COMPRESS_BYTES = 1024;
7
-
8
- export interface PrecompressArtifactsResult {
9
- files: number;
10
- inputBytes: number;
11
- outputBytes: number;
12
- }
13
-
14
- export async function precompressArtifacts(app: App): Promise<PrecompressArtifactsResult> {
15
- const roots = [path.join(app.dist.cwdPath, ".akan/artifact/client")];
16
- const result: PrecompressArtifactsResult = { files: 0, inputBytes: 0, outputBytes: 0 };
17
-
18
- await Promise.all(roots.map((root) => precompressRoot(root, result)));
19
- if (result.files > 0) {
20
- app.verbose(
21
- `[precompress] wrote ${result.files} gzip sidecars (${formatBytes(result.inputBytes)} -> ${formatBytes(
22
- result.outputBytes,
23
- )})`,
24
- );
25
- }
26
- return result;
27
- }
28
-
29
- async function precompressRoot(root: string, result: PrecompressArtifactsResult): Promise<void> {
30
- if (!fs.existsSync(root) || !fs.statSync(root).isDirectory()) return;
31
- const glob = new Bun.Glob("**/*");
32
- for await (const filePath of glob.scan({ cwd: root, absolute: true })) {
33
- if (!(await shouldPrecompress(filePath))) continue;
34
- const bytes = await Bun.file(filePath).bytes();
35
- const gz = Bun.gzipSync(toArrayBuffer(bytes));
36
- await Bun.write(`${filePath}.gz`, gz);
37
- result.files += 1;
38
- result.inputBytes += bytes.byteLength;
39
- result.outputBytes += gz.byteLength;
40
- }
41
- }
42
-
43
- async function shouldPrecompress(filePath: string): Promise<boolean> {
44
- if (filePath.endsWith(".gz")) return false;
45
- if (!COMPRESSIBLE_EXTS.has(path.extname(filePath).toLowerCase())) return false;
46
- const file = Bun.file(filePath);
47
- if (!(await file.exists())) return false;
48
- return file.size >= MIN_COMPRESS_BYTES;
49
- }
50
-
51
- function toArrayBuffer(bytes: Uint8Array): ArrayBuffer {
52
- return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;
53
- }
54
-
55
- function formatBytes(bytes: number): string {
56
- if (bytes < 1024) return `${bytes}B`;
57
- if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
58
- return `${(bytes / 1024 / 1024).toFixed(1)}MB`;
59
- }
@@ -1,290 +0,0 @@
1
- import { mkdir } from "node:fs/promises";
2
- import path from "node:path";
3
- import type { BaseBuildArtifact, ClientManifest, SsrManifest } from "akanjs/server";
4
- import type { App } from "../commandDecorators";
5
- import { createBarrelImportsPlugin } from "../transforms/barrelImportsPlugin";
6
- import { toClientReferencePath } from "../transforms/rscUseClientTransform";
7
- import type { ClientEntryDiscovery } from "./clientBuildTypes";
8
- import { ClientEntriesBundler } from "./clientEntriesBundler";
9
- import { GraphClientEntryDiscovery } from "./clientEntryDiscovery";
10
- import { VENDOR_SPECIFIERS } from "./vendorSpecifiers";
11
-
12
- const SSR_CLIENT_EXTERNALS = [
13
- "react",
14
- "react-dom",
15
- "react-dom/client",
16
- "react/jsx-runtime",
17
- "react/jsx-dev-runtime",
18
- "akanjs/fetch",
19
- ] as const;
20
- const SSR_CLIENT_ALIAS_EXTERNALS = [
21
- "react",
22
- "react-dom",
23
- "react-dom/client",
24
- "react/jsx-runtime",
25
- "react/jsx-dev-runtime",
26
- ] as const;
27
-
28
- export interface BuildRouteClientOptions {
29
- app: App;
30
- seeds: string[];
31
- artifact: BaseBuildArtifact;
32
- knownEntries?: Set<string>;
33
- routeId?: string;
34
- command?: "build" | "start";
35
- discovery?: ClientEntryDiscovery;
36
- }
37
-
38
- export interface BuildRouteClientResult {
39
- /** Newly-emitted manifest rows keyed by `${absEntry}#${exportName}`. */
40
- manifestDelta: ClientManifest;
41
- /** Newly-emitted ssrManifest rows keyed by entry URL. */
42
- ssrManifestDelta: SsrManifest;
43
- /** Absolute paths of the `"use client"` leaves this build added. */
44
- newEntries: string[];
45
- /** Absolute paths of all `"use client"` leaves discovered from this route's seeds. */
46
- discoveredEntries?: string[];
47
- /** Absolute source files included in the browser bundles for new entries. */
48
- clientDeps: string[];
49
- /** Absolute source files included in the browser bundle, grouped by original client entry. */
50
- clientDepsByEntry?: Record<string, string[]>;
51
- }
52
-
53
- interface BootstrapEntries {
54
- buildEntries: string[];
55
- originalByBuildEntry: Map<string, string>;
56
- }
57
-
58
- export class RouteClientBuilder {
59
- #app: App;
60
- #seeds: string[];
61
- #knownEntries: Set<string>;
62
- #command: "build" | "start";
63
- #discovery?: ClientEntryDiscovery;
64
-
65
- constructor(options: BuildRouteClientOptions) {
66
- this.#app = options.app;
67
- this.#seeds = options.seeds;
68
- this.#knownEntries = options.knownEntries ?? new Set<string>();
69
- this.#command = options.command ?? "start";
70
- this.#discovery = options.discovery;
71
- }
72
-
73
- async build(): Promise<BuildRouteClientResult> {
74
- const discovery = this.#discovery ?? (await GraphClientEntryDiscovery.create(this.#app));
75
- const discovered = await discovery.discover(this.#seeds);
76
- const entries = discovered.filter((e) => !this.#knownEntries.has(e));
77
- if (entries.length === 0) return this.#emptyResult(discovered);
78
-
79
- const bootstrapEntries = await this.#createBootstrapEntries(entries);
80
- const browserBundle = await this.#buildBrowserBundle(bootstrapEntries);
81
- const ssrBundle = await this.#buildSsrBundle(bootstrapEntries);
82
-
83
- const acceptedEntries = new Set(entries);
84
- const manifestDelta: ClientManifest = {};
85
- const ssrModuleMap: SsrManifest["moduleMap"] = {};
86
- const clientDeps = new Set<string>();
87
- const clientDepsByEntry: Record<string, string[]> = {};
88
- for (const [key, row] of Object.entries(browserBundle.manifest)) {
89
- const manifestEntry = RouteClientBuilder.resolveOriginalManifestEntry(
90
- key,
91
- bootstrapEntries.originalByBuildEntry,
92
- browserBundle.clientReferenceIdByAbsPath,
93
- this.#app.workspace.workspaceRoot,
94
- );
95
- if (!manifestEntry) continue;
96
- if (!acceptedEntries.has(manifestEntry.originalEntry)) continue;
97
- manifestDelta[manifestEntry.key] = row;
98
-
99
- const ssrOutput = ssrBundle.entryOutputAbsByAbsPath.get(manifestEntry.buildEntry);
100
- if (!ssrOutput) continue;
101
-
102
- ssrModuleMap[row.id] ??= {};
103
- ssrModuleMap[row.id][row.name] = { id: ssrOutput, chunks: [ssrOutput, ssrOutput], name: row.name, async: true };
104
- }
105
- for (const entry of bootstrapEntries.buildEntries) {
106
- const buildEntry = path.resolve(entry);
107
- const originalEntry = path.resolve(bootstrapEntries.originalByBuildEntry.get(buildEntry) ?? buildEntry);
108
- if (!acceptedEntries.has(originalEntry)) continue;
109
- const deps = new Set<string>([originalEntry]);
110
- for (const dep of browserBundle.entryDepsByAbsPath.get(buildEntry) ?? []) deps.add(path.resolve(dep));
111
- const sortedDeps = [...deps].sort();
112
- clientDepsByEntry[originalEntry] = sortedDeps;
113
- for (const dep of sortedDeps) clientDeps.add(dep);
114
- }
115
-
116
- return {
117
- manifestDelta,
118
- ssrManifestDelta: { moduleLoading: null, moduleMap: ssrModuleMap },
119
- newEntries: entries,
120
- discoveredEntries: discovered,
121
- clientDeps: [...clientDeps].sort(),
122
- clientDepsByEntry,
123
- };
124
- }
125
-
126
- #emptyResult(discoveredEntries: string[] = []): BuildRouteClientResult {
127
- return {
128
- manifestDelta: {},
129
- ssrManifestDelta: { moduleLoading: null, moduleMap: {} },
130
- newEntries: [],
131
- discoveredEntries,
132
- clientDeps: [],
133
- clientDepsByEntry: {},
134
- };
135
- }
136
-
137
- async #buildBrowserBundle(bootstrapEntries: BootstrapEntries) {
138
- const reactFastRefresh = process.env.AKAN_REACT_FAST_REFRESH !== "0";
139
- return new ClientEntriesBundler({
140
- app: this.#app,
141
- entries: bootstrapEntries.buildEntries,
142
- plugins: [
143
- await createBarrelImportsPlugin(this.#app, {
144
- pipeAfter: reactFastRefresh ? RouteClientBuilder.normalizeNamedDefaultFunctionForFastRefresh : undefined,
145
- }),
146
- ],
147
- external: VENDOR_SPECIFIERS,
148
- command: this.#command,
149
- reactFastRefresh,
150
- }).bundle();
151
- }
152
-
153
- async #buildSsrBundle(bootstrapEntries: BootstrapEntries) {
154
- const externalOptions = RouteClientBuilder.resolveSsrClientExternalOptions(this.#command);
155
- return new ClientEntriesBundler({
156
- app: this.#app,
157
- entries: bootstrapEntries.buildEntries,
158
- plugins: [await createBarrelImportsPlugin(this.#app)],
159
- ...externalOptions,
160
- outputSubdir: "client-ssr",
161
- command: this.#command,
162
- }).bundle();
163
- }
164
-
165
- async #createBootstrapEntries(entries: string[]): Promise<BootstrapEntries> {
166
- if (!(await Bun.file(path.join(this.#app.cwdPath, "lib", "st.ts")).exists())) {
167
- return { buildEntries: entries, originalByBuildEntry: new Map() };
168
- }
169
-
170
- const outdir = path.join(this.#app.cwdPath, ".akan", "generated", "client-entry-bootstrap");
171
- await mkdir(outdir, { recursive: true });
172
-
173
- const originalByBuildEntry = new Map<string, string>();
174
- const buildEntries = await Promise.all(
175
- entries.map(async (entry) => {
176
- const absEntry = path.resolve(entry);
177
- const hash = Bun.hash(`${this.#app.name}\n${absEntry}`).toString(36);
178
- const base = path.basename(absEntry).replace(/[^A-Za-z0-9._-]/g, "_");
179
- const wrapperEntry = path.join(outdir, `${base}-${hash}.tsx`);
180
- const exportNames = await this.#scanExportNames(absEntry);
181
- await Bun.write(
182
- wrapperEntry,
183
- RouteClientBuilder.createStoreBootstrapEntrySource({
184
- appName: this.#app.name,
185
- originalEntry: absEntry,
186
- exportNames,
187
- }),
188
- );
189
- originalByBuildEntry.set(path.resolve(wrapperEntry), absEntry);
190
- return wrapperEntry;
191
- }),
192
- );
193
-
194
- return { buildEntries, originalByBuildEntry };
195
- }
196
-
197
- async #scanExportNames(absEntry: string): Promise<string[]> {
198
- const source = await Bun.file(absEntry).text();
199
- const transpiler = new Bun.Transpiler({ loader: this.#loaderFor(absEntry) });
200
- return transpiler.scan(source).exports;
201
- }
202
-
203
- #loaderFor(absPath: string): "ts" | "tsx" | "js" | "jsx" {
204
- if (absPath.endsWith(".tsx")) return "tsx";
205
- if (absPath.endsWith(".jsx")) return "jsx";
206
- if (absPath.endsWith(".ts")) return "ts";
207
- return "js";
208
- }
209
-
210
- static normalizeNamedDefaultFunctionForFastRefresh(source: string): string | null {
211
- let changed = false;
212
- const defaultNames: string[] = [];
213
- const next = source.replace(
214
- /(^|\n)(\s*)export\s+default\s+(async\s+)?function\s+([A-Za-z_$][\w$]*)(?=\s*(?:<|\())/g,
215
- (match, lineStart: string, indent: string, asyncKeyword: string | undefined, name: string) => {
216
- changed = true;
217
- defaultNames.push(name);
218
- return `${lineStart}${indent}${asyncKeyword ?? ""}function ${name}`;
219
- },
220
- );
221
- if (!changed) return null;
222
- return `${next}\n${defaultNames.map((name) => `export default ${name};`).join("\n")}\n`;
223
- }
224
-
225
- static resolveSsrClientRuntimeAliases(): Record<string, string> {
226
- const serverEntry = RouteClientBuilder.resolveAkanServerEntry();
227
- const aliases = Object.fromEntries(
228
- SSR_CLIENT_ALIAS_EXTERNALS.map((specifier) => [specifier, Bun.resolveSync(specifier, serverEntry)]),
229
- ) as Record<string, string>;
230
- aliases[Bun.resolveSync("akanjs/fetch", serverEntry)] = "akanjs/fetch";
231
- return aliases;
232
- }
233
-
234
- static resolveSsrClientExternalOptions(command: "build" | "start"): {
235
- external: readonly string[];
236
- externalSubpaths?: readonly string[];
237
- externalAliases?: Record<string, string>;
238
- } {
239
- if (command === "start") {
240
- return {
241
- external: SSR_CLIENT_EXTERNALS,
242
- externalSubpaths: ["akanjs/fetch"],
243
- externalAliases: RouteClientBuilder.resolveSsrClientRuntimeAliases(),
244
- };
245
- }
246
-
247
- return { external: SSR_CLIENT_ALIAS_EXTERNALS };
248
- }
249
-
250
- static resolveAkanServerEntry(): string {
251
- try {
252
- return Bun.resolveSync("akanjs/server", import.meta.dir);
253
- } catch {
254
- return path.resolve(import.meta.dir, "../../../server/index.ts");
255
- }
256
- }
257
-
258
- static createStoreBootstrapEntrySource(args: {
259
- appName: string;
260
- originalEntry: string;
261
- exportNames: string[];
262
- }): string {
263
- const originalEntry = JSON.stringify(path.resolve(args.originalEntry));
264
- const namedExports = args.exportNames.filter((name) => name !== "default");
265
- const lines = [
266
- `import ${JSON.stringify(`@apps/${args.appName}/client`)};`,
267
- ...(namedExports.length > 0 ? [`export { ${namedExports.join(", ")} } from ${originalEntry};`] : []),
268
- ];
269
- if (args.exportNames.includes("default")) lines.push(`export { default } from ${originalEntry};`);
270
- return `${lines.join("\n")}\n`;
271
- }
272
-
273
- static resolveOriginalManifestEntry(
274
- manifestKey: string,
275
- originalByBuildEntry: Map<string, string>,
276
- clientReferenceIdByBuildEntry: Map<string, string> = new Map(),
277
- workspaceRoot = process.cwd(),
278
- ): { buildEntry: string; originalEntry: string; name: string; key: string } | null {
279
- const hashIdx = manifestKey.lastIndexOf("#");
280
- if (hashIdx < 0) return null;
281
- const buildReferenceId = manifestKey.slice(0, hashIdx);
282
- const name = manifestKey.slice(hashIdx + 1);
283
- const buildEntry =
284
- [...clientReferenceIdByBuildEntry.entries()].find(([, referenceId]) => referenceId === buildReferenceId)?.[0] ??
285
- buildReferenceId;
286
- const originalEntry = originalByBuildEntry.get(buildEntry) ?? buildEntry;
287
- const originalReferenceId = toClientReferencePath(originalEntry, workspaceRoot);
288
- return { buildEntry, originalEntry, name, key: `${originalReferenceId}#${name}` };
289
- }
290
- }
@@ -1,62 +0,0 @@
1
- import path from "node:path";
2
- import type { RoutesManifest, SsrManifestEntry } from "akanjs/server";
3
-
4
- export type SerializedRoutesManifest = Omit<RoutesManifest, "knownEntries"> &
5
- Partial<Pick<RoutesManifest, "knownEntries">>;
6
-
7
- export class RoutesManifestArtifactSerializer {
8
- #manifest: RoutesManifest;
9
- #artifactDir: string;
10
- #production: boolean;
11
-
12
- constructor(manifest: RoutesManifest, artifactDir: string, options: { production?: boolean } = {}) {
13
- this.#manifest = manifest;
14
- this.#artifactDir = path.resolve(artifactDir);
15
- this.#production = options.production ?? false;
16
- }
17
-
18
- static serialize(
19
- manifest: RoutesManifest,
20
- artifactDir: string,
21
- options: { production?: boolean } = {},
22
- ): SerializedRoutesManifest {
23
- return new RoutesManifestArtifactSerializer(manifest, artifactDir, options).serialize();
24
- }
25
-
26
- serialize(): SerializedRoutesManifest {
27
- const serialized: SerializedRoutesManifest = {
28
- ...this.#manifest,
29
- knownEntries: this.#manifest.knownEntries.map((entry) => this.#serializeArtifactPath(entry)),
30
- };
31
- if (this.#production) delete serialized.knownEntries;
32
- return {
33
- ...serialized,
34
- clientManifest: Object.fromEntries(
35
- Object.entries(this.#manifest.clientManifest).map(([key, row]) => [this.#serializeArtifactPath(key), row]),
36
- ),
37
- ssrManifest: {
38
- ...this.#manifest.ssrManifest,
39
- moduleMap: Object.fromEntries(
40
- Object.entries(this.#manifest.ssrManifest.moduleMap).map(([entryUrl, byName]) => [
41
- entryUrl,
42
- Object.fromEntries(
43
- Object.entries(byName).map(([name, entry]) => [
44
- name,
45
- {
46
- ...entry,
47
- id: this.#serializeArtifactPath(entry.id),
48
- chunks: entry.chunks.map((chunk) => this.#serializeArtifactPath(chunk)),
49
- } satisfies SsrManifestEntry,
50
- ]),
51
- ),
52
- ]),
53
- ),
54
- },
55
- };
56
- }
57
-
58
- #serializeArtifactPath(artifactPath: string): string {
59
- if (!path.isAbsolute(artifactPath)) return artifactPath;
60
- return path.relative(this.#artifactDir, artifactPath).split(path.sep).join("/");
61
- }
62
- }