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,249 +0,0 @@
1
- import path from "node:path";
2
- import { Logger } from "akanjs/common";
3
-
4
- export interface BarrelExportTarget {
5
- /** Subpath specifier to emit in rewritten import, e.g. `akanjs/ui/Empty`. */
6
- subpath: string;
7
- /** Name as it is exported by the leaf module. */
8
- originalName: string;
9
- }
10
-
11
- export type BarrelExportMap = Map<string, BarrelExportTarget>;
12
-
13
- export interface PackageEntry {
14
- /** Package specifier (e.g. `akanjs/ui`). */
15
- pkgName: string;
16
- /** Absolute path of the barrel entry file. */
17
- entryFile: string;
18
- /** Absolute directory used as the base for subpath computation. Typically dirname(entryFile). */
19
- pkgDir: string;
20
- /** Preserve concrete file paths for package exports that do not support extensionless deep imports. */
21
- preserveFilePath?: boolean;
22
- }
23
-
24
- export interface BarrelAnalyzerOptions {
25
- resolvePackage: (pkgName: string) => Promise<PackageEntry | null>;
26
- /** Resolve a relative specifier from `fromFile` to an absolute file path on disk. */
27
- resolveRelative?: (fromFile: string, relSpec: string) => Promise<string | null>;
28
- }
29
-
30
- const REEXPORT_RE =
31
- /(?:^|\n)\s*export\s+(?:type\s+)?(?:(\*)(?:\s+as\s+(\w+))?|\{\s*([^}]*?)\s*\})\s+from\s+(["'])([^"']+)\4;?/g;
32
-
33
- const LOCAL_NAMED_RE = /(?:^|\n)\s*export\s+\{\s*([^}]*?)\s*\}(?!\s*from)/g;
34
-
35
- const CANDIDATE_EXTS = [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"];
36
-
37
- export class BarrelAnalyzer {
38
- readonly #logger = new Logger("BarrelAnalyzer");
39
- readonly #opts: BarrelAnalyzerOptions;
40
- readonly #cache = new Map<string, Promise<BarrelExportMap | null>>();
41
- readonly #tsTranspiler = new Bun.Transpiler({ loader: "ts" });
42
- readonly #tsxTranspiler = new Bun.Transpiler({ loader: "tsx" });
43
-
44
- constructor(opts: BarrelAnalyzerOptions) {
45
- this.#opts = opts;
46
- }
47
-
48
- analyze(pkgName: string): Promise<BarrelExportMap | null> {
49
- const cached = this.#cache.get(pkgName);
50
- if (cached) return cached;
51
- const promise = this.#analyzeSafe(pkgName);
52
- this.#cache.set(pkgName, promise);
53
- return promise;
54
- }
55
-
56
- async #analyzeSafe(pkgName: string): Promise<BarrelExportMap | null> {
57
- try {
58
- return await this.#analyzeUncached(pkgName);
59
- } catch (err) {
60
- this.#logger.error(`analyze failed for ${pkgName}: ${(err as Error).message}`);
61
- return null;
62
- }
63
- }
64
-
65
- async #analyzeUncached(pkgName: string): Promise<BarrelExportMap | null> {
66
- const pkg = await this.#opts.resolvePackage(pkgName);
67
- if (!pkg) return null;
68
- const map: BarrelExportMap = new Map();
69
- const visited = new Set<string>();
70
- await this.#walk(pkg.entryFile, pkg, map, visited);
71
- return map;
72
- }
73
-
74
- async #walk(absFile: string, pkg: PackageEntry, map: BarrelExportMap, visited: Set<string>): Promise<void> {
75
- if (visited.has(absFile)) return;
76
- visited.add(absFile);
77
- const source = await readIfExists(absFile);
78
- if (source === null) return;
79
- const currentSubpath = this.#subpathFor(pkg, absFile);
80
- if (!currentSubpath) return;
81
-
82
- const authoritative = this.#scanExports(source, absFile);
83
-
84
- authoritative.delete("default");
85
-
86
- const attributed = new Set<string>();
87
-
88
- REEXPORT_RE.lastIndex = 0;
89
- let m: RegExpExecArray | null = REEXPORT_RE.exec(source);
90
- while (m !== null) {
91
- const star = m[1];
92
- const nsAs = m[2];
93
- const namedList = m[3];
94
- const spec = m[5] ?? "";
95
- m = REEXPORT_RE.exec(source);
96
- if (!isRelative(spec)) continue;
97
-
98
- if (star) {
99
- if (nsAs) {
100
-
101
- authoritative.delete(nsAs);
102
- continue;
103
- }
104
- const targetAbs = await this.#resolveRel(absFile, spec);
105
- if (!targetAbs) continue;
106
-
107
- await this.#walk(targetAbs, pkg, map, visited);
108
- continue;
109
- }
110
-
111
- if (namedList !== undefined) {
112
- const targetAbs = await this.#resolveRel(absFile, spec);
113
- if (!targetAbs) continue;
114
- const targetSubpath = this.#subpathFor(pkg, targetAbs);
115
- if (!targetSubpath) continue;
116
- for (const item of parseNamedList(namedList)) {
117
- if (item.isType) continue;
118
- if (item.imported === "default") continue;
119
-
120
- if (!authoritative.has(item.local)) continue;
121
- attributed.add(item.local);
122
- if (!map.has(item.local)) {
123
- map.set(item.local, { subpath: targetSubpath, originalName: item.imported });
124
- }
125
- }
126
- }
127
- }
128
-
129
- LOCAL_NAMED_RE.lastIndex = 0;
130
- let n: RegExpExecArray | null = LOCAL_NAMED_RE.exec(source);
131
- while (n !== null) {
132
- const body = n[1] ?? "";
133
- n = LOCAL_NAMED_RE.exec(source);
134
- for (const item of parseNamedList(body)) {
135
- if (item.isType) continue;
136
- if (item.imported === "default") continue;
137
-
138
- if (!authoritative.has(item.local)) continue;
139
- attributed.add(item.local);
140
- if (!map.has(item.local)) {
141
- map.set(item.local, { subpath: currentSubpath, originalName: item.imported });
142
- }
143
- }
144
- }
145
-
146
- for (const name of authoritative) {
147
- if (attributed.has(name)) continue;
148
- if (map.has(name)) continue;
149
- map.set(name, { subpath: currentSubpath, originalName: name });
150
- }
151
- }
152
-
153
- #scanExports(source: string, absFile: string): Set<string> {
154
- try {
155
- const transpiler = [".tsx", ".jsx"].includes(path.extname(absFile)) ? this.#tsxTranspiler : this.#tsTranspiler;
156
- const { exports } = transpiler.scan(source);
157
- return new Set(exports);
158
- } catch (err) {
159
- this.#logger.error(`scan failed: ${(err as Error).message}`);
160
- return new Set();
161
- }
162
- }
163
-
164
- #subpathFor(pkg: PackageEntry, absFile: string): string | null {
165
- const rel = path.relative(pkg.pkgDir, absFile);
166
- if (!rel || rel.startsWith("..") || path.isAbsolute(rel)) return null;
167
- if (pkg.preserveFilePath) return `${pkg.pkgName}/${rel.split(path.sep).join("/")}`;
168
- const noExt = stripKnownExt(rel);
169
-
170
- const tail = collapseIndex(noExt);
171
- if (tail === "") return pkg.pkgName;
172
- return `${pkg.pkgName}/${tail.split(path.sep).join("/")}`;
173
- }
174
-
175
- async #resolveRel(fromFile: string, relSpec: string): Promise<string | null> {
176
- if (this.#opts.resolveRelative) return this.#opts.resolveRelative(fromFile, relSpec);
177
- return defaultResolveRelative(fromFile, relSpec);
178
- }
179
- }
180
-
181
- interface NamedItem {
182
- imported: string;
183
- local: string;
184
- isType: boolean;
185
- }
186
-
187
- const parseNamedList = (listBody: string): NamedItem[] => {
188
- const out: NamedItem[] = [];
189
- for (const raw of listBody.split(",")) {
190
- const s = raw.trim();
191
- if (!s) continue;
192
- let rest = s;
193
- let isType = false;
194
- if (rest.startsWith("type ")) {
195
- isType = true;
196
- rest = rest.slice(5).trim();
197
- }
198
- const asMatch = /^(\w+)\s+as\s+(\w+)$/.exec(rest);
199
- if (asMatch) {
200
- out.push({ imported: asMatch[1] ?? "", local: asMatch[2] ?? "", isType });
201
- continue;
202
- }
203
- if (/^\w+$/.test(rest)) {
204
- out.push({ imported: rest, local: rest, isType });
205
- }
206
- }
207
- return out;
208
- };
209
-
210
- const isRelative = (spec: string): boolean => {
211
- return spec.startsWith("./") || spec.startsWith("../") || spec === "." || spec === "..";
212
- };
213
-
214
- const readIfExists = async (absFile: string): Promise<string | null> => {
215
- const file = Bun.file(absFile);
216
- if (!(await file.exists())) return null;
217
- return file.text();
218
- };
219
-
220
- const defaultResolveRelative = async (fromFile: string, relSpec: string): Promise<string | null> => {
221
- const baseDir = path.dirname(fromFile);
222
- const joined = path.resolve(baseDir, relSpec);
223
- if (path.extname(joined)) {
224
- if (await Bun.file(joined).exists()) return joined;
225
- return null;
226
- }
227
- for (const ext of CANDIDATE_EXTS) {
228
- const cand = joined + ext;
229
- if (await Bun.file(cand).exists()) return cand;
230
- }
231
- for (const ext of CANDIDATE_EXTS) {
232
- const cand = path.join(joined, `index${ext}`);
233
- if (await Bun.file(cand).exists()) return cand;
234
- }
235
- return null;
236
- };
237
-
238
- const stripKnownExt = (relPath: string): string => {
239
- for (const ext of CANDIDATE_EXTS) {
240
- if (relPath.endsWith(ext)) return relPath.slice(0, -ext.length);
241
- }
242
- return relPath;
243
- };
244
-
245
- const collapseIndex = (relPathNoExt: string): string => {
246
- const parts = relPathNoExt.split(path.sep);
247
- if (parts[parts.length - 1] === "index") parts.pop();
248
- return parts.join(path.sep);
249
- };
@@ -1,457 +0,0 @@
1
- import path from "node:path";
2
- import type { BunPlugin } from "bun";
3
- import ts from "typescript";
4
- import type { App } from "../commandDecorators";
5
- import { BarrelAnalyzer, type BarrelExportMap, type PackageEntry } from "./barrelAnalyzer";
6
-
7
- export interface BarrelImportsPluginOptions {
8
- /** Absolute paths whose content should be returned unchanged (e.g. node_modules). */
9
- skipPath?: (absPath: string) => boolean;
10
- /**
11
- * Optional transform applied after the barrel rewrite in the same onLoad
12
- * pass. Useful to chain further transforms (e.g. `"use client"` stubbing)
13
- * that would otherwise be blocked — Bun's `onLoad` cannot fall through to a
14
- * second plugin once a response is returned.
15
- * Return the transformed source, or `null` to indicate no change.
16
- */
17
- pipeAfter?: (source: string, args: { path: string }) => string | Promise<string | null> | null;
18
- }
19
-
20
- export const createBarrelImportsPlugin = async (
21
- app: App,
22
- { skipPath = defaultSkipPath, pipeAfter }: BarrelImportsPluginOptions = {},
23
- ): Promise<BunPlugin> => {
24
- const akanConfig = await app.getConfig();
25
- const barrels = [...new Set(akanConfig.barrelImports)].filter(Boolean);
26
- const analyzer = new BarrelAnalyzer({
27
- resolvePackage: await createTsconfigPackageResolver(app),
28
- });
29
-
30
- return {
31
- name: "barrel-imports",
32
- setup(build) {
33
-
34
- build.onLoad(
35
- {
36
- filter:
37
- /^(?:(?!.*[\\/]node_modules[\\/]).*|.*[\\/]node_modules[\\/]akanjs[\\/].*)\.(tsx|ts|jsx|js)(\?v=\d+)?$/,
38
- },
39
- async (args) => {
40
- const realPath = args.path.replace(/\?v=\d+$/, "");
41
- const loader = loaderFor(realPath);
42
- if (skipPath(realPath)) {
43
- const raw = await Bun.file(realPath).text();
44
- return { contents: raw, loader };
45
- }
46
-
47
- let source = await Bun.file(realPath).text();
48
-
49
- const hasMacroAttr = MACRO_ATTR_RE.test(source);
50
-
51
- if (!hasMacroAttr && barrels.length > 0) {
52
-
53
- let maybe = false;
54
- for (const b of barrels) {
55
- if (source.includes(b)) {
56
- maybe = true;
57
- break;
58
- }
59
- }
60
- if (maybe) {
61
- const rewritten = await rewriteBarrelImports(source, barrels, analyzer);
62
- if (rewritten !== null) source = rewritten;
63
- }
64
- }
65
-
66
- if (pipeAfter) {
67
- const piped = await pipeAfter(source, { path: realPath });
68
- if (piped !== null) source = piped;
69
- }
70
-
71
- return { contents: source, loader };
72
- },
73
- );
74
- },
75
- };
76
- };
77
-
78
- /**
79
- * Build a `resolvePackage` that maps a package specifier (like `akanjs/ui`)
80
- * to its barrel entry file using the workspace tsconfig `paths`. If no direct
81
- * mapping exists, falls back to node_modules resolution.
82
- */
83
- export const createTsconfigPackageResolver = async (
84
- app: App,
85
- ): Promise<(pkgName: string) => Promise<PackageEntry | null>> => {
86
- const tsconfig = await app.getTsConfig();
87
- const tsconfigPaths = tsconfig.compilerOptions.paths ?? {};
88
-
89
- const wildcardEntries = Object.entries(tsconfigPaths)
90
- .filter(([k]) => k.endsWith("/*"))
91
- .map(([k, v]) => ({
92
- prefix: k.slice(0, -1), // keep trailing `/`
93
- replacements: v,
94
- }))
95
- .sort((a, b) => b.prefix.length - a.prefix.length);
96
-
97
- return async (pkgName) => {
98
- const exact = tsconfigPaths[pkgName];
99
- if (exact && exact.length > 0) {
100
- const raw = exact[0];
101
- if (!raw) return null;
102
- const entryFile = path.resolve(app.workspace.workspaceRoot, raw);
103
- if (!(await Bun.file(entryFile).exists())) return null;
104
-
105
- const parsed = path.parse(entryFile);
106
- const lastSlash = pkgName.lastIndexOf("/");
107
- if (parsed.name !== "index" && lastSlash !== -1) {
108
- const facet = pkgName.slice(lastSlash + 1);
109
- const parentSpec = pkgName.slice(0, lastSlash);
110
- if (facet === parsed.name && parentSpec.length > 0) {
111
- return { pkgName: parentSpec, entryFile, pkgDir: parsed.dir };
112
- }
113
- }
114
- return { pkgName, entryFile, pkgDir: path.dirname(entryFile) };
115
- }
116
-
117
- for (const { prefix, replacements } of wildcardEntries) {
118
- if (!pkgName.startsWith(prefix)) continue;
119
- const suffix = pkgName.slice(prefix.length);
120
- for (const repl of replacements) {
121
- if (!repl) continue;
122
- const replPath = repl.endsWith("/*") ? repl.slice(0, -1) : repl;
123
- const candidate = path.resolve(app.workspace.workspaceRoot, replPath + suffix);
124
-
125
- for (const ext of CANDIDATE_EXTS) {
126
- const file = `${candidate}${ext}`;
127
- if (await Bun.file(file).exists()) {
128
- const lastSlash = pkgName.lastIndexOf("/");
129
- if (lastSlash !== -1) {
130
- const parentSpec = pkgName.slice(0, lastSlash);
131
- if (parentSpec.length > 0) {
132
- return { pkgName: parentSpec, entryFile: file, pkgDir: path.dirname(file) };
133
- }
134
- }
135
- return { pkgName, entryFile: file, pkgDir: path.dirname(file) };
136
- }
137
- }
138
- for (const ext of CANDIDATE_EXTS) {
139
- const file = path.join(candidate, `index${ext}`);
140
- if (await Bun.file(file).exists()) {
141
- return { pkgName, entryFile: file, pkgDir: candidate };
142
- }
143
- }
144
- }
145
-
146
- return null;
147
- }
148
-
149
- const exported = await resolveNodePackageExport(app.workspace.workspaceRoot, pkgName);
150
- if (exported) return exported;
151
-
152
- const pkgJsonPath = path.join(app.workspace.workspaceRoot, "node_modules", pkgName, "package.json");
153
- if (!(await Bun.file(pkgJsonPath).exists())) return null;
154
- try {
155
- const pkgJson = JSON.parse(await Bun.file(pkgJsonPath).text()) as {
156
- main?: string;
157
- module?: string;
158
- };
159
- const rel = pkgJson.module ?? pkgJson.main ?? "index.js";
160
- const entryFile = path.resolve(path.dirname(pkgJsonPath), rel);
161
- if (!(await Bun.file(entryFile).exists())) return null;
162
- return { pkgName, entryFile, pkgDir: path.dirname(pkgJsonPath) };
163
- } catch {
164
- return null;
165
- }
166
- };
167
- };
168
-
169
- const CANDIDATE_EXTS = [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"];
170
-
171
- const NODE_MODULES_RE = /[\\/]node_modules[\\/]/;
172
- const AKANJS_NODE_MODULE_RE = /[\\/]node_modules[\\/]akanjs[\\/]/;
173
- const defaultSkipPath = (absPath: string) => NODE_MODULES_RE.test(absPath) && !AKANJS_NODE_MODULE_RE.test(absPath);
174
-
175
- type ExportValue = string | string[] | { [condition: string]: ExportValue | undefined };
176
-
177
- const resolveNodePackageExport = async (workspaceRoot: string, specifier: string): Promise<PackageEntry | null> => {
178
- const packageName = getPackageName(specifier);
179
- if (!packageName) return null;
180
- const pkgJsonPath = path.join(workspaceRoot, "node_modules", packageName, "package.json");
181
- if (!(await Bun.file(pkgJsonPath).exists())) return null;
182
-
183
- try {
184
- const pkgDir = path.dirname(pkgJsonPath);
185
- const pkgJson = JSON.parse(await Bun.file(pkgJsonPath).text()) as {
186
- exports?: Record<string, ExportValue>;
187
- module?: string;
188
- main?: string;
189
- };
190
- const subpath = specifier === packageName ? "." : `.${specifier.slice(packageName.length)}`;
191
- const exported = resolvePackageExport(pkgJson.exports, subpath);
192
- const rel = exported ?? (subpath === "." ? (pkgJson.module ?? pkgJson.main ?? "index.js") : null);
193
- if (!rel || !rel.startsWith(".")) return null;
194
- const entryFile = await resolveFileCandidate(path.resolve(pkgDir, rel));
195
- if (!entryFile) return null;
196
- const pkgEntryName = specifier;
197
- return { pkgName: pkgEntryName, entryFile, pkgDir: path.dirname(entryFile), preserveFilePath: true };
198
- } catch {
199
- return null;
200
- }
201
- };
202
-
203
- const resolveExportValue = (value: ExportValue | undefined): string | null => {
204
- if (!value) return null;
205
- if (typeof value === "string") return value;
206
- if (Array.isArray(value)) {
207
- for (const item of value) {
208
- const resolved = resolveExportValue(item);
209
- if (resolved) return resolved;
210
- }
211
- return null;
212
- }
213
- for (const condition of ["source", "import", "default", "types"]) {
214
- const resolved = resolveExportValue(value[condition]);
215
- if (resolved) return resolved;
216
- }
217
- return null;
218
- };
219
-
220
- const resolvePackageExport = (exportsMap: Record<string, ExportValue> | undefined, subpath: string): string | null => {
221
- if (!exportsMap) return null;
222
- const exact = resolveExportValue(exportsMap[subpath]);
223
- if (exact) return exact;
224
-
225
- for (const [key, value] of Object.entries(exportsMap)) {
226
- const starIdx = key.indexOf("*");
227
- if (starIdx === -1) continue;
228
- const prefix = key.slice(0, starIdx);
229
- const suffix = key.slice(starIdx + 1);
230
- if (!subpath.startsWith(prefix) || !subpath.endsWith(suffix)) continue;
231
- const wildcard = subpath.slice(prefix.length, subpath.length - suffix.length);
232
- const resolved = resolveExportValue(value);
233
- if (resolved) return resolved.replace("*", wildcard);
234
- }
235
-
236
- return null;
237
- };
238
-
239
- const getPackageName = (specifier: string): string | null => {
240
- const parts = specifier.split("/");
241
- if (!parts[0]) return null;
242
- if (specifier.startsWith("@")) return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : null;
243
- return parts[0];
244
- };
245
-
246
- const resolveFileCandidate = async (candidate: string): Promise<string | null> => {
247
- if (await Bun.file(candidate).exists()) return candidate;
248
- if (path.extname(candidate)) return null;
249
- for (const ext of CANDIDATE_EXTS) {
250
- const file = `${candidate}${ext}`;
251
- if (await Bun.file(file).exists()) return file;
252
- }
253
- for (const ext of CANDIDATE_EXTS) {
254
- const file = path.join(candidate, `index${ext}`);
255
- if (await Bun.file(file).exists()) return file;
256
- }
257
- return null;
258
- };
259
-
260
- const MACRO_ATTR_RE = /with\s*\{\s*type\s*:\s*["']macro["']\s*\}/;
261
-
262
- /** Exposed for testing. */
263
- export const rewriteBarrelImports = async (
264
- source: string,
265
- barrels: string[],
266
- analyzer: BarrelAnalyzer,
267
- ): Promise<string | null> => {
268
- const statements = findImportStatements(source);
269
- if (statements.length === 0) return null;
270
-
271
- let changed = false;
272
- let out = source;
273
- for (let i = statements.length - 1; i >= 0; i--) {
274
- const stmt = statements[i];
275
- if (!stmt) continue;
276
- if (!barrels.includes(stmt.specifier)) continue;
277
- const map = await analyzer.analyze(stmt.specifier);
278
- if (!map || map.size === 0) continue;
279
- const replacement = rewriteSingleStatement(stmt, map);
280
- if (replacement === null) continue;
281
- out = out.slice(0, stmt.start) + replacement + out.slice(stmt.end);
282
- changed = true;
283
- }
284
- return changed ? out : null;
285
- };
286
-
287
- interface ImportStatement {
288
- start: number;
289
- end: number;
290
- clause: string;
291
- specifier: string;
292
- trailingSemicolon: boolean;
293
- raw: string;
294
- }
295
-
296
- const findImportStatements = (source: string): ImportStatement[] => {
297
- const statements: ImportStatement[] = [];
298
- const sourceFile = ts.createSourceFile("barrel-imports.tsx", source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
299
- for (const statement of sourceFile.statements) {
300
- if (!ts.isImportDeclaration(statement)) continue;
301
- if (!ts.isStringLiteral(statement.moduleSpecifier)) continue;
302
- const importClause = statement.importClause;
303
- if (!importClause) continue;
304
- const statementStart = statement.getStart(sourceFile);
305
- const statementEnd = statement.end;
306
- statements.push({
307
- start: statementStart,
308
- end: statementEnd,
309
- clause: source.slice(importClause.getStart(sourceFile), importClause.end).trim(),
310
- specifier: statement.moduleSpecifier.text,
311
- trailingSemicolon: source.slice(statement.moduleSpecifier.end, statement.end).includes(";"),
312
- raw: source.slice(statementStart, statementEnd),
313
- });
314
- }
315
- return statements;
316
- };
317
-
318
- interface NamedImportItem {
319
- imported: string;
320
- local: string;
321
- isType: boolean;
322
- }
323
-
324
- interface ParsedClause {
325
- defaultImport?: string;
326
- namespaceImport?: string;
327
- named?: NamedImportItem[];
328
- /** Whole clause is `import type { ... } from "..."`. */
329
- typeOnly: boolean;
330
- }
331
-
332
- const parseImportClause = (clause: string): ParsedClause | null => {
333
- let rest = clause.trim();
334
- let typeOnly = false;
335
- if (rest.startsWith("type ")) {
336
- typeOnly = true;
337
- rest = rest.slice(5).trim();
338
- }
339
- const parsed: ParsedClause = { typeOnly };
340
-
341
- const commaMatch = /^(\w+)\s*,\s*(.+)$/.exec(rest);
342
- if (commaMatch) {
343
- parsed.defaultImport = commaMatch[1];
344
- rest = commaMatch[2] ?? "";
345
- } else if (/^\w+$/.test(rest)) {
346
- parsed.defaultImport = rest;
347
- return parsed;
348
- }
349
- if (rest.startsWith("*")) {
350
- const ns = /^\*\s+as\s+(\w+)$/.exec(rest);
351
- if (!ns) return null;
352
- parsed.namespaceImport = ns[1];
353
- return parsed;
354
- }
355
- if (rest.startsWith("{")) {
356
- const close = rest.indexOf("}");
357
- if (close === -1) return null;
358
- const inner = rest.slice(1, close);
359
- parsed.named = parseNamedImportList(inner);
360
- return parsed;
361
- }
362
- return parsed;
363
- };
364
-
365
- const parseNamedImportList = (body: string): NamedImportItem[] => {
366
- const out: NamedImportItem[] = [];
367
- for (const raw of body.split(",")) {
368
- const s = raw.trim();
369
- if (!s) continue;
370
- let isType = false;
371
- let rest = s;
372
- if (rest.startsWith("type ")) {
373
- isType = true;
374
- rest = rest.slice(5).trim();
375
- }
376
- const asMatch = /^(\w+)\s+as\s+(\w+)$/.exec(rest);
377
- if (asMatch) {
378
- out.push({ imported: asMatch[1] ?? "", local: asMatch[2] ?? "", isType });
379
- continue;
380
- }
381
- if (/^\w+$/.test(rest)) {
382
- out.push({ imported: rest, local: rest, isType });
383
- }
384
- }
385
- return out;
386
- };
387
-
388
- const rewriteSingleStatement = (stmt: ImportStatement, map: BarrelExportMap): string | null => {
389
- const clause = parseImportClause(stmt.clause);
390
- if (!clause) return null;
391
-
392
- if (clause.namespaceImport) return null;
393
-
394
- if (clause.typeOnly && !clause.defaultImport) return null;
395
- if (!clause.named || clause.named.length === 0) {
396
-
397
- return null;
398
- }
399
-
400
- const remaining: NamedImportItem[] = [];
401
- const rewrites = new Map<string, NamedImportItem[]>();
402
- for (const item of clause.named) {
403
- if (item.isType) {
404
- remaining.push(item);
405
- continue;
406
- }
407
- const target = map.get(item.imported);
408
- if (!target) {
409
- remaining.push(item);
410
- continue;
411
- }
412
- const list = rewrites.get(target.subpath) ?? [];
413
-
414
- list.push({ imported: target.originalName, local: item.local, isType: false });
415
- rewrites.set(target.subpath, list);
416
- }
417
-
418
- if (rewrites.size === 0) return null;
419
-
420
- const lines: string[] = [];
421
-
422
- const tail = ";";
423
-
424
- if (shouldPreserveBarrelSideEffects(stmt.specifier)) {
425
- lines.push(`import "${stmt.specifier}"${tail}`);
426
- }
427
-
428
- if (clause.defaultImport || remaining.length > 0) {
429
- const parts: string[] = [];
430
- if (clause.defaultImport) parts.push(clause.defaultImport);
431
- if (remaining.length > 0) {
432
- parts.push(`{ ${remaining.map(serializeNamedItem).join(", ")} }`);
433
- }
434
- lines.push(`import ${parts.join(", ")} from "${stmt.specifier}"${tail}`);
435
- }
436
-
437
- for (const [subpath, items] of rewrites) {
438
- lines.push(`import { ${items.map(serializeNamedItem).join(", ")} } from "${subpath}"${tail}`);
439
- }
440
-
441
- return lines.join("\n");
442
- };
443
-
444
- const shouldPreserveBarrelSideEffects = (specifier: string): boolean => /^@(apps|libs)\/[^/]+\/client$/.test(specifier);
445
-
446
- const serializeNamedItem = (item: NamedImportItem): string => {
447
- const prefix = item.isType ? "type " : "";
448
- if (item.imported === item.local) return `${prefix}${item.imported}`;
449
- return `${prefix}${item.imported} as ${item.local}`;
450
- };
451
-
452
- const loaderFor = (absPath: string): "ts" | "tsx" | "js" | "jsx" => {
453
- if (absPath.endsWith(".tsx")) return "tsx";
454
- if (absPath.endsWith(".jsx")) return "jsx";
455
- if (absPath.endsWith(".ts")) return "ts";
456
- return "js";
457
- };