@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.
- package/CHANGELOG.md +21 -0
- package/README.md +279 -6
- package/dist/core/build.d.ts.map +1 -1
- package/dist/core/build.js +4 -0
- package/dist/core/build.js.map +1 -1
- package/dist/core/discovery/aggregate.d.ts +5 -1
- package/dist/core/discovery/aggregate.d.ts.map +1 -1
- package/dist/core/discovery/aggregate.js +6 -3
- package/dist/core/discovery/aggregate.js.map +1 -1
- package/dist/core/discovery/exports.d.ts +17 -0
- package/dist/core/discovery/exports.d.ts.map +1 -0
- package/dist/core/discovery/exports.js +106 -0
- package/dist/core/discovery/exports.js.map +1 -0
- package/dist/core/discovery/normalize.d.ts.map +1 -1
- package/dist/core/discovery/normalize.js +1 -0
- package/dist/core/discovery/normalize.js.map +1 -1
- package/dist/core/discovery/resolve.d.ts.map +1 -1
- package/dist/core/discovery/resolve.js +16 -8
- package/dist/core/discovery/resolve.js.map +1 -1
- package/dist/core/discovery/scan.js +1 -1
- package/dist/core/discovery/scan.js.map +1 -1
- package/dist/core/discovery/shared.d.ts +1 -0
- package/dist/core/discovery/shared.d.ts.map +1 -1
- package/dist/core/discovery/shared.js.map +1 -1
- package/dist/core/esbuild-options.d.ts +6 -1
- package/dist/core/esbuild-options.d.ts.map +1 -1
- package/dist/core/esbuild-options.js +20 -0
- package/dist/core/esbuild-options.js.map +1 -1
- package/dist/core/frontend.d.ts +8 -0
- package/dist/core/frontend.d.ts.map +1 -0
- package/dist/core/frontend.js +51 -0
- package/dist/core/frontend.js.map +1 -0
- package/dist/core/frontend_app/assets.d.ts +5 -0
- package/dist/core/frontend_app/assets.d.ts.map +1 -0
- package/dist/core/frontend_app/assets.js +74 -0
- package/dist/core/frontend_app/assets.js.map +1 -0
- package/dist/core/frontend_app/build.d.ts +5 -0
- package/dist/core/frontend_app/build.d.ts.map +1 -0
- package/dist/core/frontend_app/build.js +82 -0
- package/dist/core/frontend_app/build.js.map +1 -0
- package/dist/core/frontend_app/config.d.ts +6 -0
- package/dist/core/frontend_app/config.d.ts.map +1 -0
- package/dist/core/frontend_app/config.js +183 -0
- package/dist/core/frontend_app/config.js.map +1 -0
- package/dist/core/frontend_app/defaults.d.ts +12 -0
- package/dist/core/frontend_app/defaults.d.ts.map +1 -0
- package/dist/core/frontend_app/defaults.js +58 -0
- package/dist/core/frontend_app/defaults.js.map +1 -0
- package/dist/core/frontend_app/hygiene.d.ts +6 -0
- package/dist/core/frontend_app/hygiene.d.ts.map +1 -0
- package/dist/core/frontend_app/hygiene.js +46 -0
- package/dist/core/frontend_app/hygiene.js.map +1 -0
- package/dist/core/frontend_app/index.d.ts +11 -0
- package/dist/core/frontend_app/index.d.ts.map +1 -0
- package/dist/core/frontend_app/index.js +11 -0
- package/dist/core/frontend_app/index.js.map +1 -0
- package/dist/core/frontend_app/manifest.d.ts +16 -0
- package/dist/core/frontend_app/manifest.d.ts.map +1 -0
- package/dist/core/frontend_app/manifest.js +82 -0
- package/dist/core/frontend_app/manifest.js.map +1 -0
- package/dist/core/frontend_app/related.d.ts +4 -0
- package/dist/core/frontend_app/related.d.ts.map +1 -0
- package/dist/core/frontend_app/related.js +25 -0
- package/dist/core/frontend_app/related.js.map +1 -0
- package/dist/core/frontend_app/runtime.d.ts +4 -0
- package/dist/core/frontend_app/runtime.d.ts.map +1 -0
- package/dist/core/frontend_app/runtime.js +148 -0
- package/dist/core/frontend_app/runtime.js.map +1 -0
- package/dist/core/frontend_app/ssr.d.ts +5 -0
- package/dist/core/frontend_app/ssr.d.ts.map +1 -0
- package/dist/core/frontend_app/ssr.js +28 -0
- package/dist/core/frontend_app/ssr.js.map +1 -0
- package/dist/core/frontend_app/static.d.ts +5 -0
- package/dist/core/frontend_app/static.d.ts.map +1 -0
- package/dist/core/frontend_app/static.js +165 -0
- package/dist/core/frontend_app/static.js.map +1 -0
- package/dist/core/manifest.d.ts +3 -1
- package/dist/core/manifest.d.ts.map +1 -1
- package/dist/core/manifest.js +2 -0
- package/dist/core/manifest.js.map +1 -1
- package/dist/core/output-layout.d.ts +25 -0
- package/dist/core/output-layout.d.ts.map +1 -0
- package/dist/core/output-layout.js +239 -0
- package/dist/core/output-layout.js.map +1 -0
- package/dist/core/post-build.d.ts +15 -0
- package/dist/core/post-build.d.ts.map +1 -0
- package/dist/core/post-build.js +21 -0
- package/dist/core/post-build.js.map +1 -0
- package/dist/core/precompression.d.ts +15 -0
- package/dist/core/precompression.d.ts.map +1 -0
- package/dist/core/precompression.js +147 -0
- package/dist/core/precompression.js.map +1 -0
- package/dist/core/related-entries.d.ts +4 -0
- package/dist/core/related-entries.d.ts.map +1 -0
- package/dist/core/related-entries.js +78 -0
- package/dist/core/related-entries.js.map +1 -0
- package/dist/core/shared.d.ts +3 -1
- package/dist/core/shared.d.ts.map +1 -1
- package/dist/core/shared.js +4 -0
- package/dist/core/shared.js.map +1 -1
- package/dist/core/watch.d.ts.map +1 -1
- package/dist/core/watch.js +4 -0
- package/dist/core/watch.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/src/core/build.d.ts.map +1 -1
- package/dist/src/core/build.js +4 -0
- package/dist/src/core/build.js.map +1 -1
- package/dist/src/core/discovery/aggregate.d.ts +5 -1
- package/dist/src/core/discovery/aggregate.d.ts.map +1 -1
- package/dist/src/core/discovery/aggregate.js +6 -3
- package/dist/src/core/discovery/aggregate.js.map +1 -1
- package/dist/src/core/discovery/exports.d.ts +17 -0
- package/dist/src/core/discovery/exports.d.ts.map +1 -0
- package/dist/src/core/discovery/exports.js +106 -0
- package/dist/src/core/discovery/exports.js.map +1 -0
- package/dist/src/core/discovery/normalize.d.ts.map +1 -1
- package/dist/src/core/discovery/normalize.js +1 -0
- package/dist/src/core/discovery/normalize.js.map +1 -1
- package/dist/src/core/discovery/resolve.d.ts.map +1 -1
- package/dist/src/core/discovery/resolve.js +16 -8
- package/dist/src/core/discovery/resolve.js.map +1 -1
- package/dist/src/core/discovery/scan.js +1 -1
- package/dist/src/core/discovery/scan.js.map +1 -1
- package/dist/src/core/discovery/shared.d.ts +1 -0
- package/dist/src/core/discovery/shared.d.ts.map +1 -1
- package/dist/src/core/discovery/shared.js.map +1 -1
- package/dist/src/core/esbuild-options.d.ts +6 -1
- package/dist/src/core/esbuild-options.d.ts.map +1 -1
- package/dist/src/core/esbuild-options.js +20 -0
- package/dist/src/core/esbuild-options.js.map +1 -1
- package/dist/src/core/frontend.d.ts +8 -0
- package/dist/src/core/frontend.d.ts.map +1 -0
- package/dist/src/core/frontend.js +51 -0
- package/dist/src/core/frontend.js.map +1 -0
- package/dist/src/core/frontend_app/assets.d.ts +5 -0
- package/dist/src/core/frontend_app/assets.d.ts.map +1 -0
- package/dist/src/core/frontend_app/assets.js +74 -0
- package/dist/src/core/frontend_app/assets.js.map +1 -0
- package/dist/src/core/frontend_app/build.d.ts +5 -0
- package/dist/src/core/frontend_app/build.d.ts.map +1 -0
- package/dist/src/core/frontend_app/build.js +82 -0
- package/dist/src/core/frontend_app/build.js.map +1 -0
- package/dist/src/core/frontend_app/config.d.ts +6 -0
- package/dist/src/core/frontend_app/config.d.ts.map +1 -0
- package/dist/src/core/frontend_app/config.js +183 -0
- package/dist/src/core/frontend_app/config.js.map +1 -0
- package/dist/src/core/frontend_app/defaults.d.ts +12 -0
- package/dist/src/core/frontend_app/defaults.d.ts.map +1 -0
- package/dist/src/core/frontend_app/defaults.js +58 -0
- package/dist/src/core/frontend_app/defaults.js.map +1 -0
- package/dist/src/core/frontend_app/hygiene.d.ts +6 -0
- package/dist/src/core/frontend_app/hygiene.d.ts.map +1 -0
- package/dist/src/core/frontend_app/hygiene.js +46 -0
- package/dist/src/core/frontend_app/hygiene.js.map +1 -0
- package/dist/src/core/frontend_app/index.d.ts +11 -0
- package/dist/src/core/frontend_app/index.d.ts.map +1 -0
- package/dist/src/core/frontend_app/index.js +11 -0
- package/dist/src/core/frontend_app/index.js.map +1 -0
- package/dist/src/core/frontend_app/manifest.d.ts +16 -0
- package/dist/src/core/frontend_app/manifest.d.ts.map +1 -0
- package/dist/src/core/frontend_app/manifest.js +82 -0
- package/dist/src/core/frontend_app/manifest.js.map +1 -0
- package/dist/src/core/frontend_app/related.d.ts +4 -0
- package/dist/src/core/frontend_app/related.d.ts.map +1 -0
- package/dist/src/core/frontend_app/related.js +25 -0
- package/dist/src/core/frontend_app/related.js.map +1 -0
- package/dist/src/core/frontend_app/runtime.d.ts +4 -0
- package/dist/src/core/frontend_app/runtime.d.ts.map +1 -0
- package/dist/src/core/frontend_app/runtime.js +148 -0
- package/dist/src/core/frontend_app/runtime.js.map +1 -0
- package/dist/src/core/frontend_app/ssr.d.ts +5 -0
- package/dist/src/core/frontend_app/ssr.d.ts.map +1 -0
- package/dist/src/core/frontend_app/ssr.js +28 -0
- package/dist/src/core/frontend_app/ssr.js.map +1 -0
- package/dist/src/core/frontend_app/static.d.ts +5 -0
- package/dist/src/core/frontend_app/static.d.ts.map +1 -0
- package/dist/src/core/frontend_app/static.js +165 -0
- package/dist/src/core/frontend_app/static.js.map +1 -0
- package/dist/src/core/manifest.d.ts +3 -1
- package/dist/src/core/manifest.d.ts.map +1 -1
- package/dist/src/core/manifest.js +2 -0
- package/dist/src/core/manifest.js.map +1 -1
- package/dist/src/core/output-layout.d.ts +25 -0
- package/dist/src/core/output-layout.d.ts.map +1 -0
- package/dist/src/core/output-layout.js +239 -0
- package/dist/src/core/output-layout.js.map +1 -0
- package/dist/src/core/post-build.d.ts +15 -0
- package/dist/src/core/post-build.d.ts.map +1 -0
- package/dist/src/core/post-build.js +21 -0
- package/dist/src/core/post-build.js.map +1 -0
- package/dist/src/core/precompression.d.ts +15 -0
- package/dist/src/core/precompression.d.ts.map +1 -0
- package/dist/src/core/precompression.js +147 -0
- package/dist/src/core/precompression.js.map +1 -0
- package/dist/src/core/related-entries.d.ts +4 -0
- package/dist/src/core/related-entries.d.ts.map +1 -0
- package/dist/src/core/related-entries.js +78 -0
- package/dist/src/core/related-entries.js.map +1 -0
- package/dist/src/core/shared.d.ts +3 -1
- package/dist/src/core/shared.d.ts.map +1 -1
- package/dist/src/core/shared.js +4 -0
- package/dist/src/core/shared.js.map +1 -1
- package/dist/src/core/watch.d.ts.map +1 -1
- package/dist/src/core/watch.js +4 -0
- package/dist/src/core/watch.js.map +1 -1
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/types/discovery.d.ts +3 -0
- package/dist/src/types/discovery.d.ts.map +1 -1
- package/dist/src/types/frontend.d.ts +16 -0
- package/dist/src/types/frontend.d.ts.map +1 -0
- package/dist/src/types/frontend.js +2 -0
- package/dist/src/types/frontend.js.map +1 -0
- package/dist/src/types/frontend_app.d.ts +190 -0
- package/dist/src/types/frontend_app.d.ts.map +1 -0
- package/dist/src/types/frontend_app.js +2 -0
- package/dist/src/types/frontend_app.js.map +1 -0
- package/dist/src/types/output_layout.d.ts +19 -0
- package/dist/src/types/output_layout.d.ts.map +1 -0
- package/dist/src/types/output_layout.js +2 -0
- package/dist/src/types/output_layout.js.map +1 -0
- package/dist/src/types/precompression.d.ts +30 -0
- package/dist/src/types/precompression.d.ts.map +1 -0
- package/dist/src/types/precompression.js +2 -0
- package/dist/src/types/precompression.js.map +1 -0
- package/dist/src/types/related_entries.d.ts +22 -0
- package/dist/src/types/related_entries.d.ts.map +1 -0
- package/dist/src/types/related_entries.js +2 -0
- package/dist/src/types/related_entries.js.map +1 -0
- package/dist/src/types/runtime.d.ts +8 -1
- package/dist/src/types/runtime.d.ts.map +1 -1
- package/dist/src/types.d.ts +5 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/types/discovery.d.ts +3 -0
- package/dist/types/discovery.d.ts.map +1 -1
- package/dist/types/frontend.d.ts +16 -0
- package/dist/types/frontend.d.ts.map +1 -0
- package/dist/types/frontend.js +2 -0
- package/dist/types/frontend.js.map +1 -0
- package/dist/types/frontend_app.d.ts +190 -0
- package/dist/types/frontend_app.d.ts.map +1 -0
- package/dist/types/frontend_app.js +2 -0
- package/dist/types/frontend_app.js.map +1 -0
- package/dist/types/output_layout.d.ts +19 -0
- package/dist/types/output_layout.d.ts.map +1 -0
- package/dist/types/output_layout.js +2 -0
- package/dist/types/output_layout.js.map +1 -0
- package/dist/types/precompression.d.ts +30 -0
- package/dist/types/precompression.d.ts.map +1 -0
- package/dist/types/precompression.js +2 -0
- package/dist/types/precompression.js.map +1 -0
- package/dist/types/related_entries.d.ts +22 -0
- package/dist/types/related_entries.d.ts.map +1 -0
- package/dist/types/related_entries.js +2 -0
- package/dist/types/related_entries.js.map +1 -0
- package/dist/types/runtime.d.ts +8 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- 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
|
-
|
|
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
|
-
- `*.
|
|
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;
|
package/dist/core/build.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/core/build.js
CHANGED
|
@@ -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,
|
package/dist/core/build.js.map
CHANGED
|
@@ -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(
|
|
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,
|
|
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
|
-
|
|
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(
|
|
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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,GACtB,MAAM,aAAa,CAAC;AASrB,SAAS,uBAAuB,CAAC,eAAyB,EAAE,YAA8B;IACxF,MAAM,WAAW,GAAG,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7F,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,
|
|
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,
|
|
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"}
|