@trebired/bundler 3.6.1 → 4.0.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 (265) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +279 -6
  3. package/dist/core/build.d.ts.map +1 -1
  4. package/dist/core/build.js +4 -0
  5. package/dist/core/build.js.map +1 -1
  6. package/dist/core/discovery/aggregate.d.ts +5 -1
  7. package/dist/core/discovery/aggregate.d.ts.map +1 -1
  8. package/dist/core/discovery/aggregate.js +6 -3
  9. package/dist/core/discovery/aggregate.js.map +1 -1
  10. package/dist/core/discovery/exports.d.ts +17 -0
  11. package/dist/core/discovery/exports.d.ts.map +1 -0
  12. package/dist/core/discovery/exports.js +106 -0
  13. package/dist/core/discovery/exports.js.map +1 -0
  14. package/dist/core/discovery/normalize.d.ts.map +1 -1
  15. package/dist/core/discovery/normalize.js +1 -0
  16. package/dist/core/discovery/normalize.js.map +1 -1
  17. package/dist/core/discovery/resolve.d.ts.map +1 -1
  18. package/dist/core/discovery/resolve.js +16 -8
  19. package/dist/core/discovery/resolve.js.map +1 -1
  20. package/dist/core/discovery/scan.js +1 -1
  21. package/dist/core/discovery/scan.js.map +1 -1
  22. package/dist/core/discovery/shared.d.ts +1 -0
  23. package/dist/core/discovery/shared.d.ts.map +1 -1
  24. package/dist/core/discovery/shared.js.map +1 -1
  25. package/dist/core/esbuild-options.d.ts +6 -1
  26. package/dist/core/esbuild-options.d.ts.map +1 -1
  27. package/dist/core/esbuild-options.js +20 -0
  28. package/dist/core/esbuild-options.js.map +1 -1
  29. package/dist/core/frontend.d.ts +8 -0
  30. package/dist/core/frontend.d.ts.map +1 -0
  31. package/dist/core/frontend.js +51 -0
  32. package/dist/core/frontend.js.map +1 -0
  33. package/dist/core/frontend_app/assets.d.ts +5 -0
  34. package/dist/core/frontend_app/assets.d.ts.map +1 -0
  35. package/dist/core/frontend_app/assets.js +74 -0
  36. package/dist/core/frontend_app/assets.js.map +1 -0
  37. package/dist/core/frontend_app/build.d.ts +5 -0
  38. package/dist/core/frontend_app/build.d.ts.map +1 -0
  39. package/dist/core/frontend_app/build.js +82 -0
  40. package/dist/core/frontend_app/build.js.map +1 -0
  41. package/dist/core/frontend_app/config.d.ts +6 -0
  42. package/dist/core/frontend_app/config.d.ts.map +1 -0
  43. package/dist/core/frontend_app/config.js +183 -0
  44. package/dist/core/frontend_app/config.js.map +1 -0
  45. package/dist/core/frontend_app/defaults.d.ts +12 -0
  46. package/dist/core/frontend_app/defaults.d.ts.map +1 -0
  47. package/dist/core/frontend_app/defaults.js +58 -0
  48. package/dist/core/frontend_app/defaults.js.map +1 -0
  49. package/dist/core/frontend_app/hygiene.d.ts +6 -0
  50. package/dist/core/frontend_app/hygiene.d.ts.map +1 -0
  51. package/dist/core/frontend_app/hygiene.js +46 -0
  52. package/dist/core/frontend_app/hygiene.js.map +1 -0
  53. package/dist/core/frontend_app/index.d.ts +11 -0
  54. package/dist/core/frontend_app/index.d.ts.map +1 -0
  55. package/dist/core/frontend_app/index.js +11 -0
  56. package/dist/core/frontend_app/index.js.map +1 -0
  57. package/dist/core/frontend_app/manifest.d.ts +16 -0
  58. package/dist/core/frontend_app/manifest.d.ts.map +1 -0
  59. package/dist/core/frontend_app/manifest.js +82 -0
  60. package/dist/core/frontend_app/manifest.js.map +1 -0
  61. package/dist/core/frontend_app/related.d.ts +4 -0
  62. package/dist/core/frontend_app/related.d.ts.map +1 -0
  63. package/dist/core/frontend_app/related.js +25 -0
  64. package/dist/core/frontend_app/related.js.map +1 -0
  65. package/dist/core/frontend_app/runtime.d.ts +4 -0
  66. package/dist/core/frontend_app/runtime.d.ts.map +1 -0
  67. package/dist/core/frontend_app/runtime.js +148 -0
  68. package/dist/core/frontend_app/runtime.js.map +1 -0
  69. package/dist/core/frontend_app/ssr.d.ts +5 -0
  70. package/dist/core/frontend_app/ssr.d.ts.map +1 -0
  71. package/dist/core/frontend_app/ssr.js +28 -0
  72. package/dist/core/frontend_app/ssr.js.map +1 -0
  73. package/dist/core/frontend_app/static.d.ts +5 -0
  74. package/dist/core/frontend_app/static.d.ts.map +1 -0
  75. package/dist/core/frontend_app/static.js +165 -0
  76. package/dist/core/frontend_app/static.js.map +1 -0
  77. package/dist/core/manifest.d.ts +3 -1
  78. package/dist/core/manifest.d.ts.map +1 -1
  79. package/dist/core/manifest.js +2 -0
  80. package/dist/core/manifest.js.map +1 -1
  81. package/dist/core/output-layout.d.ts +25 -0
  82. package/dist/core/output-layout.d.ts.map +1 -0
  83. package/dist/core/output-layout.js +239 -0
  84. package/dist/core/output-layout.js.map +1 -0
  85. package/dist/core/post-build.d.ts +15 -0
  86. package/dist/core/post-build.d.ts.map +1 -0
  87. package/dist/core/post-build.js +21 -0
  88. package/dist/core/post-build.js.map +1 -0
  89. package/dist/core/precompression.d.ts +15 -0
  90. package/dist/core/precompression.d.ts.map +1 -0
  91. package/dist/core/precompression.js +147 -0
  92. package/dist/core/precompression.js.map +1 -0
  93. package/dist/core/related-entries.d.ts +4 -0
  94. package/dist/core/related-entries.d.ts.map +1 -0
  95. package/dist/core/related-entries.js +78 -0
  96. package/dist/core/related-entries.js.map +1 -0
  97. package/dist/core/shared.d.ts +3 -1
  98. package/dist/core/shared.d.ts.map +1 -1
  99. package/dist/core/shared.js +4 -0
  100. package/dist/core/shared.js.map +1 -1
  101. package/dist/core/watch.d.ts.map +1 -1
  102. package/dist/core/watch.js +4 -0
  103. package/dist/core/watch.js.map +1 -1
  104. package/dist/index.d.ts +5 -1
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +4 -0
  107. package/dist/index.js.map +1 -1
  108. package/dist/src/core/build.d.ts.map +1 -1
  109. package/dist/src/core/build.js +4 -0
  110. package/dist/src/core/build.js.map +1 -1
  111. package/dist/src/core/discovery/aggregate.d.ts +5 -1
  112. package/dist/src/core/discovery/aggregate.d.ts.map +1 -1
  113. package/dist/src/core/discovery/aggregate.js +6 -3
  114. package/dist/src/core/discovery/aggregate.js.map +1 -1
  115. package/dist/src/core/discovery/exports.d.ts +17 -0
  116. package/dist/src/core/discovery/exports.d.ts.map +1 -0
  117. package/dist/src/core/discovery/exports.js +106 -0
  118. package/dist/src/core/discovery/exports.js.map +1 -0
  119. package/dist/src/core/discovery/normalize.d.ts.map +1 -1
  120. package/dist/src/core/discovery/normalize.js +1 -0
  121. package/dist/src/core/discovery/normalize.js.map +1 -1
  122. package/dist/src/core/discovery/resolve.d.ts.map +1 -1
  123. package/dist/src/core/discovery/resolve.js +16 -8
  124. package/dist/src/core/discovery/resolve.js.map +1 -1
  125. package/dist/src/core/discovery/scan.js +1 -1
  126. package/dist/src/core/discovery/scan.js.map +1 -1
  127. package/dist/src/core/discovery/shared.d.ts +1 -0
  128. package/dist/src/core/discovery/shared.d.ts.map +1 -1
  129. package/dist/src/core/discovery/shared.js.map +1 -1
  130. package/dist/src/core/esbuild-options.d.ts +6 -1
  131. package/dist/src/core/esbuild-options.d.ts.map +1 -1
  132. package/dist/src/core/esbuild-options.js +20 -0
  133. package/dist/src/core/esbuild-options.js.map +1 -1
  134. package/dist/src/core/frontend.d.ts +8 -0
  135. package/dist/src/core/frontend.d.ts.map +1 -0
  136. package/dist/src/core/frontend.js +51 -0
  137. package/dist/src/core/frontend.js.map +1 -0
  138. package/dist/src/core/frontend_app/assets.d.ts +5 -0
  139. package/dist/src/core/frontend_app/assets.d.ts.map +1 -0
  140. package/dist/src/core/frontend_app/assets.js +74 -0
  141. package/dist/src/core/frontend_app/assets.js.map +1 -0
  142. package/dist/src/core/frontend_app/build.d.ts +5 -0
  143. package/dist/src/core/frontend_app/build.d.ts.map +1 -0
  144. package/dist/src/core/frontend_app/build.js +82 -0
  145. package/dist/src/core/frontend_app/build.js.map +1 -0
  146. package/dist/src/core/frontend_app/config.d.ts +6 -0
  147. package/dist/src/core/frontend_app/config.d.ts.map +1 -0
  148. package/dist/src/core/frontend_app/config.js +183 -0
  149. package/dist/src/core/frontend_app/config.js.map +1 -0
  150. package/dist/src/core/frontend_app/defaults.d.ts +12 -0
  151. package/dist/src/core/frontend_app/defaults.d.ts.map +1 -0
  152. package/dist/src/core/frontend_app/defaults.js +58 -0
  153. package/dist/src/core/frontend_app/defaults.js.map +1 -0
  154. package/dist/src/core/frontend_app/hygiene.d.ts +6 -0
  155. package/dist/src/core/frontend_app/hygiene.d.ts.map +1 -0
  156. package/dist/src/core/frontend_app/hygiene.js +46 -0
  157. package/dist/src/core/frontend_app/hygiene.js.map +1 -0
  158. package/dist/src/core/frontend_app/index.d.ts +11 -0
  159. package/dist/src/core/frontend_app/index.d.ts.map +1 -0
  160. package/dist/src/core/frontend_app/index.js +11 -0
  161. package/dist/src/core/frontend_app/index.js.map +1 -0
  162. package/dist/src/core/frontend_app/manifest.d.ts +16 -0
  163. package/dist/src/core/frontend_app/manifest.d.ts.map +1 -0
  164. package/dist/src/core/frontend_app/manifest.js +82 -0
  165. package/dist/src/core/frontend_app/manifest.js.map +1 -0
  166. package/dist/src/core/frontend_app/related.d.ts +4 -0
  167. package/dist/src/core/frontend_app/related.d.ts.map +1 -0
  168. package/dist/src/core/frontend_app/related.js +25 -0
  169. package/dist/src/core/frontend_app/related.js.map +1 -0
  170. package/dist/src/core/frontend_app/runtime.d.ts +4 -0
  171. package/dist/src/core/frontend_app/runtime.d.ts.map +1 -0
  172. package/dist/src/core/frontend_app/runtime.js +148 -0
  173. package/dist/src/core/frontend_app/runtime.js.map +1 -0
  174. package/dist/src/core/frontend_app/ssr.d.ts +5 -0
  175. package/dist/src/core/frontend_app/ssr.d.ts.map +1 -0
  176. package/dist/src/core/frontend_app/ssr.js +28 -0
  177. package/dist/src/core/frontend_app/ssr.js.map +1 -0
  178. package/dist/src/core/frontend_app/static.d.ts +5 -0
  179. package/dist/src/core/frontend_app/static.d.ts.map +1 -0
  180. package/dist/src/core/frontend_app/static.js +165 -0
  181. package/dist/src/core/frontend_app/static.js.map +1 -0
  182. package/dist/src/core/manifest.d.ts +3 -1
  183. package/dist/src/core/manifest.d.ts.map +1 -1
  184. package/dist/src/core/manifest.js +2 -0
  185. package/dist/src/core/manifest.js.map +1 -1
  186. package/dist/src/core/output-layout.d.ts +25 -0
  187. package/dist/src/core/output-layout.d.ts.map +1 -0
  188. package/dist/src/core/output-layout.js +239 -0
  189. package/dist/src/core/output-layout.js.map +1 -0
  190. package/dist/src/core/post-build.d.ts +15 -0
  191. package/dist/src/core/post-build.d.ts.map +1 -0
  192. package/dist/src/core/post-build.js +21 -0
  193. package/dist/src/core/post-build.js.map +1 -0
  194. package/dist/src/core/precompression.d.ts +15 -0
  195. package/dist/src/core/precompression.d.ts.map +1 -0
  196. package/dist/src/core/precompression.js +147 -0
  197. package/dist/src/core/precompression.js.map +1 -0
  198. package/dist/src/core/related-entries.d.ts +4 -0
  199. package/dist/src/core/related-entries.d.ts.map +1 -0
  200. package/dist/src/core/related-entries.js +78 -0
  201. package/dist/src/core/related-entries.js.map +1 -0
  202. package/dist/src/core/shared.d.ts +3 -1
  203. package/dist/src/core/shared.d.ts.map +1 -1
  204. package/dist/src/core/shared.js +4 -0
  205. package/dist/src/core/shared.js.map +1 -1
  206. package/dist/src/core/watch.d.ts.map +1 -1
  207. package/dist/src/core/watch.js +4 -0
  208. package/dist/src/core/watch.js.map +1 -1
  209. package/dist/src/index.d.ts +5 -1
  210. package/dist/src/index.d.ts.map +1 -1
  211. package/dist/src/index.js +4 -0
  212. package/dist/src/index.js.map +1 -1
  213. package/dist/src/types/discovery.d.ts +3 -0
  214. package/dist/src/types/discovery.d.ts.map +1 -1
  215. package/dist/src/types/frontend.d.ts +16 -0
  216. package/dist/src/types/frontend.d.ts.map +1 -0
  217. package/dist/src/types/frontend.js +2 -0
  218. package/dist/src/types/frontend.js.map +1 -0
  219. package/dist/src/types/frontend_app.d.ts +190 -0
  220. package/dist/src/types/frontend_app.d.ts.map +1 -0
  221. package/dist/src/types/frontend_app.js +2 -0
  222. package/dist/src/types/frontend_app.js.map +1 -0
  223. package/dist/src/types/output_layout.d.ts +19 -0
  224. package/dist/src/types/output_layout.d.ts.map +1 -0
  225. package/dist/src/types/output_layout.js +2 -0
  226. package/dist/src/types/output_layout.js.map +1 -0
  227. package/dist/src/types/precompression.d.ts +30 -0
  228. package/dist/src/types/precompression.d.ts.map +1 -0
  229. package/dist/src/types/precompression.js +2 -0
  230. package/dist/src/types/precompression.js.map +1 -0
  231. package/dist/src/types/related_entries.d.ts +22 -0
  232. package/dist/src/types/related_entries.d.ts.map +1 -0
  233. package/dist/src/types/related_entries.js +2 -0
  234. package/dist/src/types/related_entries.js.map +1 -0
  235. package/dist/src/types/runtime.d.ts +8 -1
  236. package/dist/src/types/runtime.d.ts.map +1 -1
  237. package/dist/src/types.d.ts +5 -0
  238. package/dist/src/types.d.ts.map +1 -1
  239. package/dist/types/discovery.d.ts +3 -0
  240. package/dist/types/discovery.d.ts.map +1 -1
  241. package/dist/types/frontend.d.ts +16 -0
  242. package/dist/types/frontend.d.ts.map +1 -0
  243. package/dist/types/frontend.js +2 -0
  244. package/dist/types/frontend.js.map +1 -0
  245. package/dist/types/frontend_app.d.ts +190 -0
  246. package/dist/types/frontend_app.d.ts.map +1 -0
  247. package/dist/types/frontend_app.js +2 -0
  248. package/dist/types/frontend_app.js.map +1 -0
  249. package/dist/types/output_layout.d.ts +19 -0
  250. package/dist/types/output_layout.d.ts.map +1 -0
  251. package/dist/types/output_layout.js +2 -0
  252. package/dist/types/output_layout.js.map +1 -0
  253. package/dist/types/precompression.d.ts +30 -0
  254. package/dist/types/precompression.d.ts.map +1 -0
  255. package/dist/types/precompression.js +2 -0
  256. package/dist/types/precompression.js.map +1 -0
  257. package/dist/types/related_entries.d.ts +22 -0
  258. package/dist/types/related_entries.d.ts.map +1 -0
  259. package/dist/types/related_entries.js +2 -0
  260. package/dist/types/related_entries.js.map +1 -0
  261. package/dist/types/runtime.d.ts +8 -1
  262. package/dist/types/runtime.d.ts.map +1 -1
  263. package/dist/types.d.ts +5 -0
  264. package/dist/types.d.ts.map +1 -1
  265. package/package.json +4 -2
package/CHANGELOG.md CHANGED
@@ -4,6 +4,27 @@ All notable changes to `@trebired/bundler` will be documented here.
4
4
 
5
5
  This project follows semantic versioning once published.
6
6
 
7
+ ## 4.0.0
8
+
9
+ - Added a generic frontend app preset with default source, public, client-entry, deferred-entry, global-style, ignore, browser, node SSR, output-layout, i18n, and production precompression options.
10
+ - Added aggregate module-map export filtering with `requireMatchedModuleExport`, including skipped-source metadata for generated entries and rules.
11
+ - Added SSR module-map rule helpers for root modules, matched module maps, index collapsing, map exports, resolver exports, root exports, and optional default exports.
12
+ - Added manifest runtime helpers for reading written manifests, extracting asset manifests, resolving aggregate entries, collecting aggregate matched sources, resolving emitted entry files, and normalizing source paths to route/page IDs.
13
+ - Added related client entry map, frontend asset link collection, and link/script tag rendering helpers.
14
+ - Added a generic frontend build runner for client builds, optional SSR builds, public directory copying, precompression stats, SSR entry output resolution, and optional SSR `node_modules` symlink/copy handling.
15
+ - Added a frontend runtime helper for dev/prod manifest state, watch-backed rebuilds, cache-busted SSR ESM imports, SSR root/page export resolution, and page asset links.
16
+ - Added framework-neutral and Express-compatible static asset serving helpers with private manifest/map blocking, Brotli/gzip selection, cache headers, and development public directory serving.
17
+ - Added `quarantineUnwritableOutputDir()` and frontend app verification coverage for the 4.0 runtime/build/preset behavior.
18
+
19
+ ## 3.7.0
20
+
21
+ - Added generic frontend entry helpers for `*.client.*` and `*.client.defer.*` discovery patterns without changing discover-rule behavior.
22
+ - Added `collectRelatedEntries()` and frontend-related entry collection on top of the existing import graph resolver and tsconfig path support.
23
+ - Added generic `outputLayout` support for relocating JS, CSS, assets, and source maps while keeping metafiles, manifests, asset manifests, references, and public paths aligned.
24
+ - Added default esbuild file loaders for common static asset extensions, with `loader` overrides still available to callers.
25
+ - Added generic Brotli and gzip precompression for selected output assets, plus standalone `precompressAssets()` stats.
26
+ - Added aggregate module-map, output layout, precompression, related entry, and frontend convention verification coverage.
27
+
7
28
  ## 3.6.1
8
29
 
9
30
  - Added pack verification for published entrypoints and executable CLI output.
package/README.md CHANGED
@@ -9,7 +9,7 @@ Discover-only bundler wrapper around `esbuild` with SCSS support, watch mode, so
9
9
  Runtime support: Bun 1+ and Node.js 18+.
10
10
 
11
11
  ```sh
12
- npm install @trebired/bundler
12
+ bun i @trebired/bundler
13
13
  ```
14
14
 
15
15
  ## Quick Start
@@ -28,7 +28,7 @@ await bundle({
28
28
  },
29
29
  {
30
30
  key: "defer",
31
- include: ["**/*.defer.ts"],
31
+ include: ["**/*.client.defer.ts", "**/*.client.defer.tsx"],
32
32
  strategy: "entry",
33
33
  },
34
34
  {
@@ -40,7 +40,7 @@ await bundle({
40
40
  {
41
41
  key: "shared-script",
42
42
  include: ["**/*.ts", "**/*.js"],
43
- exclude: ["**/*.client.ts", "**/*.client.tsx", "**/*.defer.ts"],
43
+ exclude: ["**/*.client.ts", "**/*.client.tsx", "**/*.client.defer.ts", "**/*.client.defer.tsx"],
44
44
  strategy: "bundle",
45
45
  maxBundleSize: "50mb",
46
46
  },
@@ -224,7 +224,7 @@ await bundle({
224
224
  {
225
225
  key: "ssr-pages",
226
226
  include: ["pages/**/*.tsx"],
227
- exclude: ["**/*.client.tsx", "**/*.defer.tsx", "**/*.spec.tsx", "**/*.test.tsx"],
227
+ exclude: ["**/*.client.tsx", "**/*.client.defer.tsx", "**/*.spec.tsx", "**/*.test.tsx"],
228
228
  strategy: "aggregate",
229
229
  aggregate: {
230
230
  kind: "module-map",
@@ -250,13 +250,41 @@ Path keys default to the matched module path relative to the aggregate rule root
250
250
  - `pages/blog/post.tsx` -> `blog/post`
251
251
  - `pages/settings/index.tsx` -> `settings` when `collapseIndex: true`
252
252
 
253
+ Set `requireMatchedModuleExport: true` when an aggregate rule intentionally uses a broad pattern but should only include modules that provide the configured `matchedModuleExportName`. Files without that export are skipped, not imported into the generated module. Skipped paths are reported in aggregate entry metadata and rule metadata.
254
+
255
+ The export check parses TypeScript and JavaScript source. It supports `export default ...`, `export { value as default }`, `export { default } from "./module"`, and normal named exports.
256
+
257
+ Use the SSR module-map helper to create the same rule without repeating the aggregate shape:
258
+
259
+ ```ts
260
+ import { createSsrModuleMapRule } from "@trebired/bundler";
261
+
262
+ const ssrPages = createSsrModuleMapRule({
263
+ key: "ssr-pages",
264
+ include: ["pages/**/*.tsx"],
265
+ rootModule: "layouts/root/document.tsx",
266
+ rootExport: "rootDocument",
267
+ mapExport: "pages",
268
+ resolverExport: "getPageComponent",
269
+ matchedModuleExportName: "default",
270
+ requireMatchedModuleExport: true,
271
+ });
272
+ ```
273
+
253
274
  ## Frontend Conventions
254
275
 
255
276
  This API is meant for conventions like:
256
277
 
257
278
  - `*.client.ts`
258
279
  - `*.client.tsx`
259
- - `*.defer.ts`
280
+ - `*.client.js`
281
+ - `*.client.jsx`
282
+ - `*.client.css`
283
+ - `*.client.scss`
284
+ - `*.client.defer.ts`
285
+ - `*.client.defer.tsx`
286
+ - `*.client.defer.js`
287
+ - `*.client.defer.jsx`
260
288
  - global `css/**/*.css`
261
289
  - global `css/**/*.scss`
262
290
 
@@ -271,7 +299,198 @@ Typical setup:
271
299
  Important behavior:
272
300
 
273
301
  - grouped `bundle` rules must stay style-only or script-only; mixing CSS/SCSS with JS/TS in one rule fails
274
- - `*.client.*` and `*.defer.*` entries may not import JS/TS files owned by a grouped bundle rule; that fails the build because those files are treated as shared standalone bundles, not implicit app-entry dependencies
302
+ - `*.client.*` and `*.client.defer.*` entries may not import JS/TS files owned by a grouped bundle rule; that fails the build because those files are treated as shared standalone bundles, not implicit app-entry dependencies
303
+
304
+ Use the frontend helper when you want those common entry patterns without hiding rules inside bundler core:
305
+
306
+ ```ts
307
+ import { bundle, createFrontendEntryRules } from "@trebired/bundler";
308
+
309
+ await bundle({
310
+ discover: {
311
+ dir: "./src/frontend",
312
+ rules: [
313
+ ...createFrontendEntryRules(),
314
+ {
315
+ key: "shared-script",
316
+ include: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
317
+ exclude: ["**/*.client.*", "**/*.client.defer.*"],
318
+ strategy: "bundle",
319
+ },
320
+ ],
321
+ },
322
+ outDir: "./dist",
323
+ });
324
+ ```
325
+
326
+ The helper returns ordinary discover rules. Override `clientInclude`, `deferredInclude`, rule keys, or excludes when a project uses different conventions.
327
+
328
+ ## Frontend App Preset
329
+
330
+ Use the frontend app preset when a project follows the common frontend/SSR shape and should not repeat discover-rule boilerplate.
331
+
332
+ Before the preset, a project typically had to assemble client rules, SSR aggregate rules, public copying, manifest reading, related-client lookups, and static tag rendering separately.
333
+
334
+ After the preset, the app-specific part is mostly paths, environment defines, and language policy:
335
+
336
+ ```ts
337
+ import {
338
+ buildFrontendApp,
339
+ createFrontendBundlerRuntime,
340
+ defineFrontendBundlerConfig,
341
+ } from "@trebired/bundler";
342
+
343
+ const bundlerConfig = defineFrontendBundlerConfig({
344
+ clientOutDir: "dist/client",
345
+ ssrOutDir: "dist/ssr",
346
+ supportedI18nLanguages: ["en", "cs"],
347
+ ssr: {
348
+ key: "ssr-pages",
349
+ include: ["pages/**/*.tsx"],
350
+ rootModule: "layouts/root/document.tsx",
351
+ rootExport: "rootDocument",
352
+ mapExport: "pages",
353
+ resolverExport: "getPageComponent",
354
+ matchedModuleExportName: "default",
355
+ requireMatchedModuleExport: true,
356
+ },
357
+ });
358
+
359
+ await buildFrontendApp(bundlerConfig);
360
+
361
+ const runtime = createFrontendBundlerRuntime(bundlerConfig);
362
+ await runtime.ensure();
363
+ const page = await runtime.resolvePageComponent("account");
364
+ const rootDocument = await runtime.resolveRootDocument();
365
+ const assets = await runtime.buildAssetLinks(["account"]);
366
+ ```
367
+
368
+ Defaults:
369
+
370
+ - `frontendDir`: `src/frontend`
371
+ - `publicDir`: `src/frontend/public`
372
+ - client entries: `*.client.ts`, `*.client.tsx`, `*.client.js`, `*.client.jsx`, `*.client.css`, `*.client.scss`
373
+ - deferred client entries: `*.client.defer.ts`, `*.client.defer.tsx`, `*.client.defer.js`, `*.client.defer.jsx`
374
+ - global style bundle patterns: `css/**/*.css`, `css/**/*.scss`, component `styles.*`, and `js/**/styles.*`
375
+ - ignored sources: tests, declarations, SCSS partials, public files, and runtime-oriented source patterns
376
+ - browser builds: ESM, splitting on, output layout on
377
+ - node SSR builds: ESM, splitting off, output layout on
378
+ - production client builds: minify, strip comments, and precompress JS/CSS
379
+
380
+ The preset returns ordinary `BundlerOptions` through `createFrontendAppBundlerOptions()`, so callers can still inspect or pass the client and SSR builds to `bundle()` or `watch()` directly.
381
+
382
+ ## Related Entries
383
+
384
+ Use `collectRelatedEntries()` when server-side or build orchestration code starts from one or more source modules and needs related client or style entry source paths for `collectAssetLinks()`.
385
+
386
+ ```ts
387
+ import { collectAssetLinks, collectRelatedFrontendEntries } from "@trebired/bundler";
388
+
389
+ const related = await collectRelatedFrontendEntries({
390
+ sources: ["src/pages/account.tsx"],
391
+ rootDir: process.cwd(),
392
+ tsconfig: true,
393
+ });
394
+
395
+ const links = collectAssetLinks(assetManifest, related.entries, {
396
+ from: "source",
397
+ publicPath: "/assets/",
398
+ });
399
+ ```
400
+
401
+ The generic helper walks the import graph with the same relative import and tsconfig path support as `walkImportGraph()`, then checks configurable candidate patterns. The frontend wrapper uses the default `.client.*` and `.client.defer.*` patterns; pass `candidatePatterns` to replace them.
402
+
403
+ Use `buildRelatedClientEntryMap()` when a runtime starts from aggregate SSR matched sources and needs a page ID -> related client entry map:
404
+
405
+ ```ts
406
+ import { buildRelatedClientEntryMap } from "@trebired/bundler";
407
+
408
+ const relatedClientEntries = await buildRelatedClientEntryMap({
409
+ manifest: ssrManifest,
410
+ ruleKey: "ssr-pages",
411
+ rootDir: process.cwd(),
412
+ pageId: {
413
+ sourcePrefix: "src/frontend/pages",
414
+ collapseIndex: true,
415
+ },
416
+ tsconfig: true,
417
+ });
418
+ ```
419
+
420
+ ## Output Layout
421
+
422
+ Use `outputLayout` when emitted files should be organized by type without a separate relocation step:
423
+
424
+ ```ts
425
+ await bundle({
426
+ discover: {
427
+ dir: "./src/frontend",
428
+ rules: createFrontendEntryRules(),
429
+ },
430
+ manifest: true,
431
+ outDir: "./dist",
432
+ outputLayout: {
433
+ js: "js/[path][ext]",
434
+ css: "css/[path][ext]",
435
+ asset: "assets/[path][ext]",
436
+ map: "maps/[path][ext]",
437
+ },
438
+ publicPath: "/assets/",
439
+ sourcemap: "external",
440
+ });
441
+ ```
442
+
443
+ Supported tokens are `[path]`, `[dir]`, `[name]`, and `[ext]`. `outputLayout: true` uses `js/[path][ext]`, `css/[path][ext]`, `assets/[path][ext]`, and source maps alongside their moved output. The build result exposes `outputLayout.moved`, and written manifests plus `assetManifest` use the final paths.
444
+
445
+ Common static asset extensions such as images and fonts use esbuild's `file` loader by default so CSS and JS references can emit assets. Override `loader` when a project needs a different asset treatment.
446
+
447
+ ## Precompression
448
+
449
+ Use `precompress` to write `.br` and `.gz` files for selected outputs:
450
+
451
+ ```ts
452
+ await bundle({
453
+ discover: {
454
+ dir: "./src/frontend",
455
+ rules: createFrontendEntryRules(),
456
+ },
457
+ outDir: "./dist",
458
+ precompress: {
459
+ minSize: "1kb",
460
+ brotliQuality: 11,
461
+ gzipLevel: 9,
462
+ },
463
+ });
464
+ ```
465
+
466
+ When enabled, JS and CSS outputs are compressed by default. Use `include`, `exclude`, `formats`, and `minSize` to tune the selection. `precompressAssets()` is also exported for standalone output folders and returns the same byte and ratio stats.
467
+
468
+ ## Static Assets
469
+
470
+ Use `serveStaticAsset()` for a framework-neutral static response object, or `createStaticAssetMiddleware()` for an Express-compatible middleware.
471
+
472
+ ```ts
473
+ import { createStaticAssetMiddleware } from "@trebired/bundler";
474
+
475
+ app.use("/assets", createStaticAssetMiddleware({
476
+ clientOutDir: "dist/client",
477
+ mode: "production",
478
+ extraStaticDirs: [
479
+ { dir: "dist/vendor", mountPath: "vendor" },
480
+ ],
481
+ }));
482
+ ```
483
+
484
+ The handler:
485
+
486
+ - blocks `manifest.json`, `bundler-manifest.json`, and source map requests
487
+ - prefers `.br` over `.gz` for JS/CSS when `Accept-Encoding` allows it
488
+ - sets `Content-Encoding`, `Vary: Accept-Encoding`, and `X-Content-Type-Options: nosniff`
489
+ - sends immutable cache headers for hashed production assets
490
+ - sends `no-store` cache headers in development
491
+ - can serve `publicDir` in development and `clientOutDir` in all modes
492
+
493
+ Use `quarantineUnwritableOutputDir(dir, { logger })` before a build when a project wants to move aside an existing output directory that cannot be written.
275
494
 
276
495
  ## Manifest
277
496
 
@@ -351,6 +570,44 @@ Supported lookup modes:
351
570
  - `from: "ruleKey"`
352
571
  - `from: "auto"` (default)
353
572
 
573
+ ### Manifest Runtime Helpers
574
+
575
+ Runtime code can use package helpers instead of digging through the written manifest shape:
576
+
577
+ ```ts
578
+ import {
579
+ collectAggregateMatchedSourcesByRuleKey,
580
+ createAggregateSourceIdMap,
581
+ extractAssetManifest,
582
+ normalizeAggregateSourceId,
583
+ readBundlerManifest,
584
+ resolveAggregateEntryByRuleKey,
585
+ resolveAssetManifestEntryOutputPath,
586
+ } from "@trebired/bundler";
587
+
588
+ const writtenManifest = await readBundlerManifest("dist/ssr/bundler-manifest.json");
589
+ const assetManifest = extractAssetManifest(writtenManifest);
590
+ const aggregateEntry = resolveAggregateEntryByRuleKey(assetManifest, "ssr-pages");
591
+ const matchedSources = collectAggregateMatchedSourcesByRuleKey(assetManifest, "ssr-pages");
592
+ const sourceIds = createAggregateSourceIdMap(matchedSources, {
593
+ sourcePrefix: "src/frontend/pages",
594
+ collapseIndex: true,
595
+ });
596
+ const entryFile = resolveAssetManifestEntryOutputPath({
597
+ manifest: assetManifest,
598
+ entryId: "ssr-pages",
599
+ from: "ruleKey",
600
+ outDir: "dist/ssr",
601
+ });
602
+ const pageId = normalizeAggregateSourceId("src/frontend/pages/docs/index.tsx", {
603
+ sourcePrefix: "src/frontend/pages",
604
+ });
605
+ ```
606
+
607
+ `createEmptyAssetManifest()` is also exported for callers that need a stable empty shape before a build has produced outputs.
608
+
609
+ Use `collectFrontendAssetLinks()` when runtime code wants global styles, global client entries, and page-related client entries in one call. Pass `renderTags: true`, or call `renderAssetLinkTags()` directly, to get plain `<link>` and `<script type="module">` strings.
610
+
354
611
  ## Watch Mode
355
612
 
356
613
  `watch()` stays discover-driven.
@@ -448,6 +705,7 @@ type BundlerDiscoverRule =
448
705
  keyFromPath?: "relative-path";
449
706
  collapseIndex?: boolean;
450
707
  allowEmpty?: boolean;
708
+ requireMatchedModuleExport?: boolean;
451
709
  exports?: {
452
710
  root?: string;
453
711
  map: string;
@@ -483,6 +741,21 @@ type BundlerOptions = {
483
741
  sourcemap?: boolean | "inline" | "external";
484
742
  splitting?: boolean;
485
743
  publicPath?: string;
744
+ loader?: Record<string, Loader>;
745
+ outputLayout?: boolean | {
746
+ js?: string;
747
+ css?: string;
748
+ asset?: string;
749
+ map?: string | "alongside";
750
+ };
751
+ precompress?: boolean | {
752
+ formats?: Array<"br" | "gzip">;
753
+ include?: string[];
754
+ exclude?: string[];
755
+ minSize?: number | string;
756
+ brotliQuality?: number;
757
+ gzipLevel?: number;
758
+ };
486
759
  external?: string[];
487
760
  define?: Record<string, string>;
488
761
  clean?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/core/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKxE,iBAAe,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4C1E;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/core/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMxE,iBAAe,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+C1E;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -3,6 +3,7 @@ import { logPackageInitialized } from "@package/logger-adapter";
3
3
  import { BUNDLER_LOG_GROUP, BUNDLER_PACKAGE_NAME } from "../src/constants.js";
4
4
  import { resolveLogger } from "../src/logging.js";
5
5
  import { createEsbuildOptions, normalizeBundlerOptions } from "./esbuild-options.js";
6
+ import { postProcessBuildOutput } from "./post-build.js";
6
7
  import { resolveBundlerEntries } from "./discovery.js";
7
8
  import { cleanOutDir, formatFailure, logWarnings, toBuildResult } from "./shared.js";
8
9
  async function bundle(options) {
@@ -30,10 +31,13 @@ async function bundle(options) {
30
31
  ...normalized,
31
32
  entryRecords: resolvedDiscovery.entries,
32
33
  }, logger));
34
+ const postProcessed = await postProcessBuildOutput({ normalized, result });
33
35
  logWarnings(logger, result.warnings);
34
36
  const summary = await toBuildResult({
35
37
  manifest: normalized.manifest,
36
38
  outDir: normalized.outDir,
39
+ outputLayout: postProcessed.outputLayout,
40
+ precompressed: postProcessed.precompressed,
37
41
  resolvedDiscovery,
38
42
  result,
39
43
  rootDir: normalized.rootDir,
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/core/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAErF,KAAK,UAAU,MAAM,CAAC,OAAuB;IAC3C,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,IAAI,EAAoB,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAE1E,qBAAqB,CAAC;QACpB,OAAO,EAAE,UAAU,CAAC,aAAa;QACjC,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,MAAM,EAAE,oBAAoB;KAC7B,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,qBAAqB,CAAC,OAAO,IAAI,EAAoB,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE;YAC7G,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;SACtE,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC;YACnD,GAAG,UAAU;YACb,YAAY,EAAE,iBAAiB,CAAC,OAAO;SACxC,EAAE,MAAM,CAAC,CAAC,CAAC;QACZ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;YAClC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,iBAAiB;YACjB,MAAM;YACN,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,SAAS;SACV,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,OAAO,CAAC,OAAO,CAAC,MAAM,aAAa,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnG,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/core/build.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,12 @@ declare function validateAggregatePathKeys(args: {
14
14
  declare function createAggregateEntryMetadata(args: {
15
15
  matchedFiles: DiscoveredFile[];
16
16
  rootModule?: ResolvedAggregateRootModule;
17
+ skippedSources?: string[];
17
18
  }): BundlerAggregateEntryMetadata;
18
- declare function createAggregateRuleMetadata(rootModule?: ResolvedAggregateRootModule): BundlerAggregateRuleMetadata;
19
+ declare function createAggregateRuleMetadata(args?: {
20
+ rootModule?: ResolvedAggregateRootModule;
21
+ skippedSources?: string[];
22
+ }): BundlerAggregateRuleMetadata;
19
23
  declare function buildAggregateModuleMapContents(args: {
20
24
  aggregate: NormalizedAggregateModuleMap;
21
25
  includePatterns: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/core/discovery/aggregate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,eAAe,CAAC;AAUvB,OAAO,KAAK,EACV,cAAc,EACd,4BAA4B,EAC5B,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AAErB,iBAAS,uBAAuB,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,MAAM,CAIlG;AAED,iBAAS,yBAAyB,CAAC,IAAI,EAAE;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAUT;AAED,iBAAS,yBAAyB,CAAC,IAAI,EAAE;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,IAAI,EAAE,uBAAuB,CAAC;CAC/B,GAAG,IAAI,CAYP;AAED,iBAAS,4BAA4B,CAAC,IAAI,EAAE;IAC1C,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,2BAA2B,CAAC;CAC1C,GAAG,6BAA6B,CAMhC;AAED,iBAAS,2BAA2B,CAAC,UAAU,CAAC,EAAE,2BAA2B,GAAG,4BAA4B,CAK3G;AAED,iBAAS,+BAA+B,CAAC,IAAI,EAAE;IAC7C,SAAS,EAAE,4BAA4B,CAAC;IACxC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,2BAA2B,CAAC;CAC1C,GAAG,MAAM,CAYT;AAED,iBAAS,0BAA0B,CAAC,IAAI,EAAE;IACxC,MAAM,EAAE,yBAAyB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,uBAAuB,CAAC;CAC/B,GAAG,2BAA2B,GAAG,SAAS,CAa1C;AA2FD,OAAO,EACL,+BAA+B,EAC/B,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,GAC1B,CAAC"}
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/core/discovery/aggregate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,eAAe,CAAC;AAUvB,OAAO,KAAK,EACV,cAAc,EACd,4BAA4B,EAC5B,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AAErB,iBAAS,uBAAuB,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,MAAM,CAKlG;AAED,iBAAS,yBAAyB,CAAC,IAAI,EAAE;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAUT;AAED,iBAAS,yBAAyB,CAAC,IAAI,EAAE;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,IAAI,EAAE,uBAAuB,CAAC;CAC/B,GAAG,IAAI,CAYP;AAED,iBAAS,4BAA4B,CAAC,IAAI,EAAE;IAC1C,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,2BAA2B,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,GAAG,6BAA6B,CAOhC;AAED,iBAAS,2BAA2B,CAAC,IAAI,GAAE;IACzC,UAAU,CAAC,EAAE,2BAA2B,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,4BAA4B,CAMpC;AAED,iBAAS,+BAA+B,CAAC,IAAI,EAAE;IAC7C,SAAS,EAAE,4BAA4B,CAAC;IACxC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,2BAA2B,CAAC;CAC1C,GAAG,MAAM,CAYT;AAED,iBAAS,0BAA0B,CAAC,IAAI,EAAE;IACxC,MAAM,EAAE,yBAAyB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,uBAAuB,CAAC;CAC/B,GAAG,2BAA2B,GAAG,SAAS,CAa1C;AA2FD,OAAO,EACL,+BAA+B,EAC/B,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,GAC1B,CAAC"}
@@ -4,7 +4,8 @@ function computeAggregateKeyRoot(includePatterns, matchedFiles) {
4
4
  const includeBase = commonPathPrefix(includePatterns.map(staticPatternBase).filter(Boolean));
5
5
  if (includeBase)
6
6
  return includeBase;
7
- return commonPathPrefix(matchedFiles.map((file) => toPosixDirname(file.discoverRel)).filter(Boolean));
7
+ const matchedDirs = matchedFiles.map((file) => toPosixDirname(file.discoverRel));
8
+ return matchedDirs.includes("") ? "" : commonPathPrefix(matchedDirs);
8
9
  }
9
10
  function normalizeAggregatePathKey(args) {
10
11
  const fromRoot = args.keyRoot
@@ -34,12 +35,14 @@ function createAggregateEntryMetadata(args) {
34
35
  kind: "module-map",
35
36
  matchedSources: args.matchedFiles.map((file) => file.rootRel),
36
37
  rootModule: args.rootModule?.rootRel,
38
+ skippedSources: args.skippedSources?.length ? args.skippedSources : undefined,
37
39
  };
38
40
  }
39
- function createAggregateRuleMetadata(rootModule) {
41
+ function createAggregateRuleMetadata(args = {}) {
40
42
  return {
41
43
  kind: "module-map",
42
- rootModule: rootModule?.rootRel,
44
+ rootModule: args.rootModule?.rootRel,
45
+ skippedSources: args.skippedSources?.length ? args.skippedSources : undefined,
43
46
  };
44
47
  }
45
48
  function buildAggregateModuleMapContents(args) {
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../../src/core/discovery/aggregate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../../src/core/discovery/aggregate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { DiscoveredFile, NormalizedAggregateRule } from "./shared.js";
2
+ type FilteredAggregateFiles = {
3
+ matchedFiles: DiscoveredFile[];
4
+ skippedSources: string[];
5
+ };
6
+ declare function filterAggregateMatchedFiles(args: {
7
+ matchedFiles: DiscoveredFile[];
8
+ rule: NormalizedAggregateRule;
9
+ }): Promise<FilteredAggregateFiles>;
10
+ declare function hasModuleExport(args: {
11
+ exportName: string;
12
+ filePath: string;
13
+ source: string;
14
+ }): boolean;
15
+ export { filterAggregateMatchedFiles, hasModuleExport, };
16
+ export type { FilteredAggregateFiles, };
17
+ //# sourceMappingURL=exports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../../src/core/discovery/exports.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3E,KAAK,sBAAsB,GAAG;IAC5B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,iBAAe,2BAA2B,CAAC,IAAI,EAAE;IAC/C,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,IAAI,EAAE,uBAAuB,CAAC;CAC/B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAuBlC;AAED,iBAAS,eAAe,CAAC,IAAI,EAAE;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CASV;AAkED,OAAO,EACL,2BAA2B,EAC3B,eAAe,GAChB,CAAC;AACF,YAAY,EACV,sBAAsB,GACvB,CAAC"}
@@ -0,0 +1,106 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import ts from "typescript";
4
+ import { resolveAggregateModuleLoader } from "./shared.js";
5
+ async function filterAggregateMatchedFiles(args) {
6
+ if (!args.rule.aggregate.requireMatchedModuleExport) {
7
+ return { matchedFiles: args.matchedFiles, skippedSources: [] };
8
+ }
9
+ const matchedFiles = [];
10
+ const skippedSources = [];
11
+ for (const file of args.matchedFiles) {
12
+ if (!resolveAggregateModuleLoader(file.rootRel)) {
13
+ skippedSources.push(file.rootRel);
14
+ continue;
15
+ }
16
+ const source = await fs.readFile(file.absPath, "utf8");
17
+ if (hasModuleExport({ exportName: args.rule.aggregate.matchedModuleExportName, filePath: file.absPath, source })) {
18
+ matchedFiles.push(file);
19
+ }
20
+ else {
21
+ skippedSources.push(file.rootRel);
22
+ }
23
+ }
24
+ return { matchedFiles, skippedSources };
25
+ }
26
+ function hasModuleExport(args) {
27
+ const sourceFile = ts.createSourceFile(args.filePath, args.source, ts.ScriptTarget.Latest, true, resolveScriptKind(args.filePath));
28
+ return sourceFile.statements.some((statement) => statementExportsName(statement, args.exportName));
29
+ }
30
+ function statementExportsName(statement, exportName) {
31
+ if (exportName === "default" && isDefaultExportAssignment(statement))
32
+ return true;
33
+ if (isExportedDeclaration(statement, exportName))
34
+ return true;
35
+ if (ts.isVariableStatement(statement))
36
+ return variableStatementExportsName(statement, exportName);
37
+ if (ts.isExportDeclaration(statement))
38
+ return exportDeclarationExportsName(statement, exportName);
39
+ return false;
40
+ }
41
+ function isDefaultExportAssignment(statement) {
42
+ return ts.isExportAssignment(statement) && !statement.isExportEquals;
43
+ }
44
+ function isExportedDeclaration(statement, exportName) {
45
+ const modifiers = getNodeModifiers(statement);
46
+ const exported = modifiers.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword);
47
+ if (!exported)
48
+ return false;
49
+ const defaulted = modifiers.some((modifier) => modifier.kind === ts.SyntaxKind.DefaultKeyword);
50
+ if (defaulted)
51
+ return exportName === "default";
52
+ return getStatementName(statement) === exportName;
53
+ }
54
+ function variableStatementExportsName(statement, exportName) {
55
+ if (!getNodeModifiers(statement).some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword))
56
+ return false;
57
+ return statement.declarationList.declarations.some((declaration) => bindingNameExportsName(declaration.name, exportName));
58
+ }
59
+ function getNodeModifiers(node) {
60
+ return ts.canHaveModifiers(node) ? ts.getModifiers(node) || [] : [];
61
+ }
62
+ function getStatementName(statement) {
63
+ if (ts.isFunctionDeclaration(statement))
64
+ return statement.name?.text;
65
+ if (ts.isClassDeclaration(statement))
66
+ return statement.name?.text;
67
+ if (ts.isInterfaceDeclaration(statement))
68
+ return statement.name.text;
69
+ if (ts.isTypeAliasDeclaration(statement))
70
+ return statement.name.text;
71
+ if (ts.isEnumDeclaration(statement))
72
+ return statement.name.text;
73
+ if (ts.isModuleDeclaration(statement) && ts.isIdentifier(statement.name))
74
+ return statement.name.text;
75
+ return undefined;
76
+ }
77
+ function bindingNameExportsName(name, exportName) {
78
+ if (ts.isIdentifier(name))
79
+ return name.text === exportName;
80
+ const elements = ts.isObjectBindingPattern(name) ? name.elements : name.elements;
81
+ return elements.some((element) => {
82
+ if (!ts.isBindingElement(element))
83
+ return false;
84
+ return bindingNameExportsName(element.name, exportName);
85
+ });
86
+ }
87
+ function exportDeclarationExportsName(statement, exportName) {
88
+ const clause = statement.exportClause;
89
+ if (!clause || !ts.isNamedExports(clause))
90
+ return false;
91
+ return clause.elements.some((specifier) => specifier.name.text === exportName);
92
+ }
93
+ function resolveScriptKind(filePath) {
94
+ const extension = path.extname(filePath).toLowerCase();
95
+ if (extension === ".tsx")
96
+ return ts.ScriptKind.TSX;
97
+ if (extension === ".jsx")
98
+ return ts.ScriptKind.JSX;
99
+ if (extension === ".ts" || extension === ".mts" || extension === ".cts")
100
+ return ts.ScriptKind.TS;
101
+ if (extension === ".js" || extension === ".mjs" || extension === ".cjs")
102
+ return ts.ScriptKind.JS;
103
+ return ts.ScriptKind.Unknown;
104
+ }
105
+ export { filterAggregateMatchedFiles, hasModuleExport, };
106
+ //# sourceMappingURL=exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../../../src/core/discovery/exports.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/core/discovery/normalize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACf,MAAM,eAAe,CAAC;AAevB,OAAO,KAAK,EACV,4BAA4B,EAC5B,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,iBAAS,2BAA2B,CAClC,SAAS,EAAE,yBAAyB,GAAG,SAAS,EAChD,OAAO,EAAE,MAAM,GACd,4BAA4B,CAiC9B;AAED,iBAAS,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,sBAAsB,CA6BhF;AAED,iBAAS,wBAAwB,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,EACpC,QAAQ,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACvC,yBAAyB,EAAE,CAW7B;AAwBD,iBAAS,wBAAwB,CAAC,QAAQ,EAAE,OAAO,eAAe,EAAE,sBAAsB,GAAG,SAAS,GAAG,OAAO,aAAa,EAAE,yBAAyB,CAIvJ;AAkCD,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,GACzB,CAAC"}
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/core/discovery/normalize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACf,MAAM,eAAe,CAAC;AAevB,OAAO,KAAK,EACV,4BAA4B,EAC5B,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,iBAAS,2BAA2B,CAClC,SAAS,EAAE,yBAAyB,GAAG,SAAS,EAChD,OAAO,EAAE,MAAM,GACd,4BAA4B,CAkC9B;AAED,iBAAS,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,sBAAsB,CA6BhF;AAED,iBAAS,wBAAwB,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,EACpC,QAAQ,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACvC,yBAAyB,EAAE,CAW7B;AAwBD,iBAAS,wBAAwB,CAAC,QAAQ,EAAE,OAAO,eAAe,EAAE,sBAAsB,GAAG,SAAS,GAAG,OAAO,aAAa,EAAE,yBAAyB,CAIvJ;AAkCD,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,GACzB,CAAC"}