@trebired/bundler 0.1.0 → 0.2.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 CHANGED
@@ -4,6 +4,13 @@ All notable changes to `@trebired/bundler` will be documented here.
4
4
 
5
5
  This project follows semantic versioning once published.
6
6
 
7
+ ## 0.2.0
8
+
9
+ - Added built-in entry discovery so the package can walk source directories and generate entry lists itself.
10
+ - Added source-tree watching for discovered entries, including new and removed matching files during watch mode.
11
+ - Added optional manifest writing that records resolved entries and generated outputs.
12
+ - Made `entries` optional when `discover` is configured.
13
+
7
14
  ## 0.1.0
8
15
 
9
16
  - Added the `bundle()` and `watch()` APIs for fast esbuild-backed bundling.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Fast bundler wrapper around `esbuild` with SCSS support, watch mode, and inline source path annotations.
4
4
 
5
- `@trebired/bundler` is not a full custom bundler. It keeps the package-owned API small and lets `esbuild` do the heavy lifting, while adding logging aligned with other packages published by Trebired, SCSS compilation through `sass-embedded`, config-driven CLI commands, and optional inline source path comments in generated output.
5
+ `@trebired/bundler` is not a full custom bundler. It keeps the package-owned API small and lets `esbuild` do the heavy lifting, while adding logging aligned with other packages published by Trebired, SCSS compilation through `sass-embedded`, built-in source walking, config-driven CLI commands, optional manifest output, and inline source path comments in generated output.
6
6
 
7
7
  ## Install
8
8
 
@@ -18,7 +18,10 @@ Use this when:
18
18
 
19
19
  - you want a bundling package that fits alongside other packages published by Trebired instead of wiring `esbuild` directly in every project
20
20
  - you need one package that handles `tsx`, `jsx`, `ts`, `js`, `scss`, and `css`
21
+ - you want the package to discover entry files by walking your source tree
21
22
  - you want watch mode and config-driven CLI commands without building a separate toolchain wrapper
23
+ - you want newly created matching files to join the build without external entry regeneration code
24
+ - you want a manifest describing resolved entries and generated outputs
22
25
  - you want generated bundles to optionally include inline comments that point back to the original source file path
23
26
  - you want package-owned logs routed through `@trebired/logger-adapter`
24
27
 
@@ -39,13 +42,14 @@ If you want a fast bundling wrapper from the Trebired package ecosystem, use thi
39
42
  import { bundle } from "@trebired/bundler";
40
43
 
41
44
  await bundle({
42
- entries: {
43
- app: "./src/app.tsx",
44
- theme: "./src/theme.css",
45
+ discover: {
46
+ dir: "./src",
47
+ include: ["app.tsx", "theme.css"],
45
48
  },
46
49
  outDir: "./dist",
47
50
  sourcemap: "external",
48
51
  annotateSources: true,
52
+ manifest: true,
49
53
  });
50
54
  ```
51
55
 
@@ -57,11 +61,13 @@ Create a config module:
57
61
  import { defineBundlerConfig } from "@trebired/bundler";
58
62
 
59
63
  export default defineBundlerConfig({
60
- entries: {
61
- app: "./src/app.tsx",
64
+ discover: {
65
+ dir: "./src/frontend",
66
+ include: ["**/*.tsx", "**/*.scss", "**/*.css"],
62
67
  },
63
68
  outDir: "./dist",
64
69
  annotateSources: true,
70
+ manifest: true,
65
71
  });
66
72
  ```
67
73
 
@@ -72,6 +78,42 @@ trebired-bundler build --config ./bundler.config.mjs
72
78
  trebired-bundler watch --config ./bundler.config.mjs
73
79
  ```
74
80
 
81
+ ## Discovery And Walking
82
+
83
+ Set `discover` when you want `@trebired/bundler` to walk the source tree and build the entry list itself.
84
+
85
+ ```ts
86
+ await bundle({
87
+ discover: {
88
+ dir: "./src/frontend",
89
+ include: ["**/*.tsx", "global/**/*.scss"],
90
+ exclude: ["**/*.test.tsx"],
91
+ ignoreDirs: ["legacy"],
92
+ namePrefix: "frontend",
93
+ },
94
+ outDir: "./dist",
95
+ });
96
+ ```
97
+
98
+ The package:
99
+
100
+ - walks the configured directory recursively
101
+ - matches files by extension plus optional include and exclude patterns
102
+ - derives entry names from relative paths
103
+ - rebuilds the entry list during watch mode when matching files are added or removed
104
+
105
+ You can combine manual `entries` with `discover`. If both resolve the same entry name to different files, the build fails so the collision is explicit.
106
+
107
+ ## Manifest
108
+
109
+ Set `manifest: true` to write `dist/bundler-manifest.json`, or pass `manifest: { file: "custom-name.json" }` to choose a different path inside `outDir`.
110
+
111
+ The manifest contains:
112
+
113
+ - resolved entries
114
+ - whether each entry came from `manual` config or `discover`
115
+ - generated output files
116
+
75
117
  ## Source Annotation Comments
76
118
 
77
119
  Set `annotateSources: true` to inject preserved inline comments into bundled output.
@@ -118,7 +160,22 @@ You can pass:
118
160
 
119
161
  ```ts
120
162
  type BundlerOptions = {
121
- entries: string[] | Record<string, string>;
163
+ entries?: string[] | Record<string, string>;
164
+ discover?: {
165
+ dir: string;
166
+ include?: string[];
167
+ exclude?: string[];
168
+ extensions?: string[];
169
+ ignoreDirs?: string[];
170
+ namePrefix?: string;
171
+ } | Array<{
172
+ dir: string;
173
+ include?: string[];
174
+ exclude?: string[];
175
+ extensions?: string[];
176
+ ignoreDirs?: string[];
177
+ namePrefix?: string;
178
+ }>;
122
179
  outDir: string;
123
180
  rootDir?: string;
124
181
  platform?: "browser" | "node" | "neutral";
@@ -132,22 +189,29 @@ type BundlerOptions = {
132
189
  define?: Record<string, string>;
133
190
  clean?: boolean;
134
191
  annotateSources?: boolean;
192
+ manifest?: boolean | {
193
+ file?: string;
194
+ };
135
195
  logger?: unknown;
136
196
  loggerAdapter?: (logger: unknown, event: unknown) => unknown;
137
197
  };
138
198
 
139
199
  declare function bundle(options: BundlerOptions): Promise<{
200
+ entries: Record<string, string>;
140
201
  outputs: string[];
141
202
  warnings: number;
142
203
  metafile?: object;
204
+ manifestPath?: string;
143
205
  durationMs: number;
144
206
  }>;
145
207
 
146
208
  declare function watch(options: BundlerOptions): Promise<{
147
209
  rebuild(): Promise<{
210
+ entries: Record<string, string>;
148
211
  outputs: string[];
149
212
  warnings: number;
150
213
  metafile?: object;
214
+ manifestPath?: string;
151
215
  durationMs: number;
152
216
  }>;
153
217
  dispose(): Promise<void>;
@@ -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,aAAa,CAAC;AAItE,iBAAe,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkC1E;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,aAAa,CAAC;AAKtE,iBAAe,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0C1E;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -3,6 +3,7 @@ import { logPackageInitialized } from "@trebired/logger-adapter";
3
3
  import { BUNDLER_LOG_GROUP, BUNDLER_PACKAGE_NAME } from "../constants.js";
4
4
  import { resolveLogger } from "../logging.js";
5
5
  import { createEsbuildOptions, normalizeBundlerOptions } from "./esbuild-options.js";
6
+ import { resolveBundlerEntries } from "./discovery.js";
6
7
  import { cleanOutDir, formatFailure, logWarnings, toBuildResult } from "./shared.js";
7
8
  async function bundle(options) {
8
9
  const normalized = normalizeBundlerOptions(options || {});
@@ -21,9 +22,17 @@ async function bundle(options) {
21
22
  logger.info("build", "start");
22
23
  const startedAt = Date.now();
23
24
  try {
24
- const result = await runEsbuild(createEsbuildOptions(normalized, logger));
25
+ const resolvedEntries = await resolveBundlerEntries(options || {}, normalized.rootDir);
26
+ logger.info("build", `entries :: count=${resolvedEntries.records.length}`);
27
+ const result = await runEsbuild(createEsbuildOptions({
28
+ ...normalized,
29
+ entryRecords: resolvedEntries.records,
30
+ }, logger));
25
31
  logWarnings(logger, result.warnings);
26
- const summary = toBuildResult({
32
+ const summary = await toBuildResult({
33
+ entries: resolvedEntries.records,
34
+ manifest: normalized.manifest,
35
+ outDir: normalized.outDir,
27
36
  result,
28
37
  rootDir: normalized.rootDir,
29
38
  startedAt,
@@ -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,0BAA0B,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACrF,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,MAAM,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1E,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,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":"AAAA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,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,eAAe,GAAG,MAAM,qBAAqB,CAAC,OAAO,IAAI,EAAoB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QACzG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC;YACnD,GAAG,UAAU;YACb,YAAY,EAAE,eAAe,CAAC,OAAO;SACtC,EAAE,MAAM,CAAC,CAAC,CAAC;QACZ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;YAClC,OAAO,EAAE,eAAe,CAAC,OAAO;YAChC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,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"}
@@ -0,0 +1,9 @@
1
+ type DiscoveryWatcher = {
2
+ close(): void;
3
+ };
4
+ declare function createDiscoveryWatcher(args: {
5
+ dirs: string[];
6
+ onChange: () => void;
7
+ }): DiscoveryWatcher;
8
+ export { createDiscoveryWatcher };
9
+ //# sourceMappingURL=discovery-watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-watch.d.ts","sourceRoot":"","sources":["../../src/core/discovery-watch.ts"],"names":[],"mappings":"AAGA,KAAK,gBAAgB,GAAG;IACtB,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,iBAAS,sBAAsB,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,GAAG,gBAAgB,CAqEnB;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,71 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ function createDiscoveryWatcher(args) {
4
+ const watchers = new Map();
5
+ let closed = false;
6
+ let timer = null;
7
+ const interval = setInterval(() => {
8
+ for (const dir of args.dirs) {
9
+ refresh(dir);
10
+ }
11
+ emitChange();
12
+ }, 250);
13
+ const emitChange = () => {
14
+ if (closed)
15
+ return;
16
+ if (timer)
17
+ clearTimeout(timer);
18
+ timer = setTimeout(() => {
19
+ timer = null;
20
+ args.onChange();
21
+ }, 80);
22
+ };
23
+ const ensureWatch = (dir) => {
24
+ if (closed || watchers.has(dir) || !fs.existsSync(dir))
25
+ return;
26
+ if (!fs.statSync(dir).isDirectory())
27
+ return;
28
+ const watcher = fs.watch(dir, () => {
29
+ refresh(dir);
30
+ emitChange();
31
+ });
32
+ watcher.on("error", () => {
33
+ watchers.delete(dir);
34
+ });
35
+ watchers.set(dir, watcher);
36
+ };
37
+ const refresh = (startDir) => {
38
+ if (closed || !fs.existsSync(startDir))
39
+ return;
40
+ const stack = [startDir];
41
+ while (stack.length) {
42
+ const current = stack.pop();
43
+ ensureWatch(current);
44
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
45
+ if (!entry.isDirectory())
46
+ continue;
47
+ const child = path.join(current, entry.name);
48
+ if (!watchers.has(child)) {
49
+ stack.push(child);
50
+ }
51
+ }
52
+ }
53
+ };
54
+ for (const dir of args.dirs) {
55
+ refresh(dir);
56
+ }
57
+ return {
58
+ close() {
59
+ closed = true;
60
+ clearInterval(interval);
61
+ if (timer)
62
+ clearTimeout(timer);
63
+ for (const watcher of watchers.values()) {
64
+ watcher.close();
65
+ }
66
+ watchers.clear();
67
+ },
68
+ };
69
+ }
70
+ export { createDiscoveryWatcher };
71
+ //# sourceMappingURL=discovery-watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-watch.js","sourceRoot":"","sources":["../../src/core/discovery-watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { BundlerEntryRecord, BundlerManifestOptions, BundlerOptions } from "../types.js";
2
+ type NormalizedDiscoverOptions = {
3
+ dir: string;
4
+ dirAbs: string;
5
+ exclude: string[];
6
+ extensions: string[];
7
+ ignoreDirs: Set<string>;
8
+ include: string[];
9
+ namePrefix: string;
10
+ };
11
+ type ResolvedEntries = {
12
+ records: BundlerEntryRecord[];
13
+ signature: string;
14
+ };
15
+ type NormalizedManifestOptions = {
16
+ enabled: boolean;
17
+ file?: string;
18
+ };
19
+ declare function toPosixPath(value: string): string;
20
+ declare function resolveBundlerEntries(options: BundlerOptions, rootDir: string, settings?: {
21
+ allowEmpty?: boolean;
22
+ }): Promise<ResolvedEntries>;
23
+ declare function toEntryPointMap(records: BundlerEntryRecord[], rootDir: string): Record<string, string>;
24
+ declare function normalizeManifestOptions(manifest: BundlerManifestOptions | undefined): NormalizedManifestOptions;
25
+ declare function normalizeDiscoverRoots(rootDir: string, discover: BundlerOptions["discover"]): string[];
26
+ export { normalizeDiscoverRoots, normalizeManifestOptions, resolveBundlerEntries, toEntryPointMap, toPosixPath, };
27
+ export type { NormalizedDiscoverOptions, NormalizedManifestOptions, ResolvedEntries };
28
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/core/discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACf,MAAM,aAAa,CAAC;AAKrB,KAAK,yBAAyB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1C;AA0LD,iBAAe,qBAAqB,CAClC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,OAAO,CAAC,eAAe,CAAC,CAkC1B;AAED,iBAAS,eAAe,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI/F;AAED,iBAAS,wBAAwB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,GAAG,yBAAyB,CAgBzG;AAED,iBAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,MAAM,EAAE,CAc/F;AAED,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,WAAW,GACZ,CAAC;AACF,YAAY,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,227 @@
1
+ import fs from "node:fs";
2
+ import fsp from "node:fs/promises";
3
+ import path from "node:path";
4
+ const DEFAULT_DISCOVERY_EXTENSIONS = [".css", ".js", ".jsx", ".scss", ".ts", ".tsx"];
5
+ const DEFAULT_IGNORE_DIRS = [".git", "coverage", "dist", "node_modules"];
6
+ function toPosixPath(value) {
7
+ return value.replace(/\\/g, "/");
8
+ }
9
+ function normalizePathValue(value) {
10
+ return toPosixPath(String(value || "").trim()).replace(/^\.\/+/, "");
11
+ }
12
+ function globToRegExp(pattern) {
13
+ const normalized = normalizePathValue(pattern);
14
+ let source = "";
15
+ for (let index = 0; index < normalized.length; index += 1) {
16
+ const char = normalized[index];
17
+ const next = normalized[index + 1];
18
+ const afterNext = normalized[index + 2];
19
+ if (char === "*" && next === "*" && afterNext === "/") {
20
+ source += "(?:.*/)?";
21
+ index += 2;
22
+ continue;
23
+ }
24
+ if (char === "*" && next === "*") {
25
+ source += ".*";
26
+ index += 1;
27
+ continue;
28
+ }
29
+ if (char === "*") {
30
+ source += "[^/]*";
31
+ continue;
32
+ }
33
+ if (char === "?") {
34
+ source += ".";
35
+ continue;
36
+ }
37
+ if (/[|\\{}()[\]^$+?.]/.test(char)) {
38
+ source += `\\${char}`;
39
+ continue;
40
+ }
41
+ source += char;
42
+ }
43
+ return new RegExp(`^${source}$`);
44
+ }
45
+ function matchesAnyPattern(value, patterns) {
46
+ if (!patterns.length)
47
+ return false;
48
+ const normalized = normalizePathValue(value);
49
+ const base = path.basename(normalized);
50
+ return patterns.some((pattern) => {
51
+ const normalizedPattern = normalizePathValue(pattern);
52
+ if (!normalizedPattern)
53
+ return false;
54
+ if (normalizedPattern === normalized || normalizedPattern === base)
55
+ return true;
56
+ return globToRegExp(normalizedPattern).test(normalized);
57
+ });
58
+ }
59
+ function normalizeStringList(values) {
60
+ return (values || []).map(normalizePathValue).filter(Boolean);
61
+ }
62
+ function normalizeDiscoverOptions(rootDir, discover) {
63
+ const list = Array.isArray(discover) ? discover : discover ? [discover] : [];
64
+ return list
65
+ .map((item) => item && typeof item === "object" ? item : null)
66
+ .filter(Boolean)
67
+ .map((item) => {
68
+ const dir = normalizePathValue(item.dir);
69
+ if (!dir) {
70
+ throw new Error("bundler-discover-missing-dir");
71
+ }
72
+ const extensions = (item.extensions && item.extensions.length ? item.extensions : DEFAULT_DISCOVERY_EXTENSIONS)
73
+ .map((value) => String(value || "").trim().toLowerCase())
74
+ .filter(Boolean)
75
+ .map((value) => value.startsWith(".") ? value : `.${value}`);
76
+ return {
77
+ dir,
78
+ dirAbs: path.resolve(rootDir, dir),
79
+ exclude: normalizeStringList(item.exclude),
80
+ extensions,
81
+ ignoreDirs: new Set([
82
+ ...DEFAULT_IGNORE_DIRS,
83
+ ...normalizeStringList(item.ignoreDirs),
84
+ ].map((value) => path.basename(value))),
85
+ include: normalizeStringList(item.include),
86
+ namePrefix: normalizePathValue(item.namePrefix || ""),
87
+ };
88
+ });
89
+ }
90
+ function normalizeManualEntries(entries, rootDir) {
91
+ if (!entries)
92
+ return [];
93
+ if (Array.isArray(entries)) {
94
+ return entries
95
+ .map((value) => String(value || "").trim())
96
+ .filter(Boolean)
97
+ .map((value) => {
98
+ const rel = normalizePathValue(value);
99
+ const ext = path.extname(rel);
100
+ const noExt = ext ? rel.slice(0, -ext.length) : rel;
101
+ return {
102
+ name: noExt,
103
+ path: path.resolve(rootDir, rel),
104
+ source: "manual",
105
+ };
106
+ });
107
+ }
108
+ if (typeof entries === "object") {
109
+ return Object.entries(entries)
110
+ .map(([key, value]) => ({
111
+ name: normalizePathValue(key),
112
+ path: path.resolve(rootDir, String(value || "").trim()),
113
+ source: "manual",
114
+ }))
115
+ .filter((entry) => Boolean(entry.name && entry.path));
116
+ }
117
+ return [];
118
+ }
119
+ function buildDiscoveredEntryName(args) {
120
+ const ext = path.extname(args.relativePath);
121
+ const withoutExt = ext ? args.relativePath.slice(0, -ext.length) : args.relativePath;
122
+ return normalizePathValue([args.config.namePrefix, withoutExt].filter(Boolean).join("/"));
123
+ }
124
+ async function walkDiscoveredEntries(config) {
125
+ if (!fs.existsSync(config.dirAbs))
126
+ return [];
127
+ const records = [];
128
+ const visit = async (currentAbs) => {
129
+ const entries = await fsp.readdir(currentAbs, { withFileTypes: true });
130
+ for (const entry of entries) {
131
+ const abs = path.join(currentAbs, entry.name);
132
+ const relFromDiscover = normalizePathValue(path.relative(config.dirAbs, abs));
133
+ if (!relFromDiscover)
134
+ continue;
135
+ if (entry.isDirectory()) {
136
+ if (config.ignoreDirs.has(entry.name))
137
+ continue;
138
+ if (matchesAnyPattern(relFromDiscover, config.exclude))
139
+ continue;
140
+ await visit(abs);
141
+ continue;
142
+ }
143
+ if (!entry.isFile())
144
+ continue;
145
+ const ext = path.extname(entry.name).toLowerCase();
146
+ if (!config.extensions.includes(ext))
147
+ continue;
148
+ if (config.include.length && !matchesAnyPattern(relFromDiscover, config.include))
149
+ continue;
150
+ if (matchesAnyPattern(relFromDiscover, config.exclude))
151
+ continue;
152
+ records.push({
153
+ name: buildDiscoveredEntryName({
154
+ config,
155
+ relativePath: relFromDiscover,
156
+ }),
157
+ path: abs,
158
+ source: "discover",
159
+ });
160
+ }
161
+ };
162
+ await visit(config.dirAbs);
163
+ return records.sort((a, b) => a.name.localeCompare(b.name) || a.path.localeCompare(b.path));
164
+ }
165
+ async function resolveBundlerEntries(options, rootDir, settings = {}) {
166
+ const manual = normalizeManualEntries(options.entries, rootDir);
167
+ const discoveredGroups = await Promise.all(normalizeDiscoverOptions(rootDir, options.discover).map(walkDiscoveredEntries));
168
+ const discovered = discoveredGroups.flat();
169
+ const all = [...manual, ...discovered];
170
+ if (!all.length && !settings.allowEmpty) {
171
+ throw new Error("bundler-missing-entries");
172
+ }
173
+ const byName = new Map();
174
+ for (const record of all) {
175
+ const existing = byName.get(record.name);
176
+ if (!existing) {
177
+ byName.set(record.name, record);
178
+ continue;
179
+ }
180
+ if (existing.path === record.path)
181
+ continue;
182
+ throw new Error(`bundler-entry-name-conflict :: ${record.name}`);
183
+ }
184
+ const records = Array.from(byName.values()).sort((a, b) => a.name.localeCompare(b.name) || a.path.localeCompare(b.path));
185
+ const signature = JSON.stringify(records.map((record) => ({
186
+ name: record.name,
187
+ path: normalizePathValue(path.relative(rootDir, record.path)),
188
+ source: record.source,
189
+ })));
190
+ return {
191
+ records,
192
+ signature,
193
+ };
194
+ }
195
+ function toEntryPointMap(records, rootDir) {
196
+ return Object.fromEntries(records.map((record) => [record.name, normalizePathValue(path.relative(rootDir, record.path))]));
197
+ }
198
+ function normalizeManifestOptions(manifest) {
199
+ if (!manifest) {
200
+ return { enabled: false };
201
+ }
202
+ if (manifest === true) {
203
+ return {
204
+ enabled: true,
205
+ file: "bundler-manifest.json",
206
+ };
207
+ }
208
+ return {
209
+ enabled: true,
210
+ file: normalizePathValue(manifest.file || "bundler-manifest.json"),
211
+ };
212
+ }
213
+ function normalizeDiscoverRoots(rootDir, discover) {
214
+ const roots = normalizeDiscoverOptions(rootDir, discover).map((item) => {
215
+ let current = item.dirAbs;
216
+ while (!fs.existsSync(current)) {
217
+ const parent = path.dirname(current);
218
+ if (parent === current)
219
+ return rootDir;
220
+ current = parent;
221
+ }
222
+ return current;
223
+ });
224
+ return Array.from(new Set(roots));
225
+ }
226
+ export { normalizeDiscoverRoots, normalizeManifestOptions, resolveBundlerEntries, toEntryPointMap, toPosixPath, };
227
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/core/discovery.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,17 @@
1
1
  import type { BuildOptions } from "esbuild";
2
- import type { BundlerOptions, NormalizedBundlerLogger } from "../types.js";
2
+ import type { BundlerOptions, BundlerEntryRecord, NormalizedBundlerLogger } from "../types.js";
3
+ import { normalizeManifestOptions } from "./discovery.js";
3
4
  type NormalizedBundlerOptions = {
4
5
  annotateSources: boolean;
5
6
  clean: boolean;
6
7
  define?: Record<string, string>;
7
- entries: string[] | Record<string, string>;
8
+ entries?: string[] | Record<string, string>;
9
+ entryRecords?: BundlerEntryRecord[];
8
10
  external?: string[];
9
11
  format?: BundlerOptions["format"];
10
12
  logger?: BundlerOptions["logger"];
11
13
  loggerAdapter?: BundlerOptions["loggerAdapter"];
14
+ manifest: ReturnType<typeof normalizeManifestOptions>;
12
15
  minify: boolean;
13
16
  outDir: string;
14
17
  platform?: BundlerOptions["platform"];
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild-options.d.ts","sourceRoot":"","sources":["../../src/core/esbuild-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3E,KAAK,wBAAwB,GAAG;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5B,CAAC;AA4BF,iBAAS,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,wBAAwB,CA6BlF;AAED,iBAAS,oBAAoB,CAC3B,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,uBAAuB,GAC9B,YAAY,CAyCd;AAED,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;AACzD,YAAY,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"esbuild-options.d.ts","sourceRoot":"","sources":["../../src/core/esbuild-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,wBAAwB,EAAmB,MAAM,gBAAgB,CAAC;AAE3E,KAAK,wBAAwB,GAAG;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAChD,QAAQ,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,iBAAS,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,wBAAwB,CA4BlF;AAED,iBAAS,oBAAoB,CAC3B,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,uBAAuB,GAC9B,YAAY,CAiDd;AAED,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;AACzD,YAAY,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,25 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { createScssPlugin } from "../plugins/scss.js";
3
3
  import { createSourceAnnotationsPlugin } from "../plugins/source-annotations.js";
4
- function normalizeEntries(entries) {
5
- if (Array.isArray(entries)) {
6
- const filtered = entries.map((value) => String(value || "").trim()).filter(Boolean);
7
- if (!filtered.length) {
8
- throw new Error("bundler-missing-entries");
9
- }
10
- return filtered;
11
- }
12
- if (!entries || typeof entries !== "object") {
13
- throw new Error("bundler-missing-entries");
14
- }
15
- const normalized = Object.fromEntries(Object.entries(entries)
16
- .map(([key, value]) => [String(key || "").trim(), String(value || "").trim()])
17
- .filter(([key, value]) => Boolean(key && value)));
18
- if (Object.keys(normalized).length === 0) {
19
- throw new Error("bundler-missing-entries");
20
- }
21
- return normalized;
22
- }
4
+ import { normalizeManifestOptions, toEntryPointMap } from "./discovery.js";
23
5
  function normalizeBundlerOptions(options) {
24
6
  const rootDir = path.resolve(String(options.rootDir || "").trim() || process.cwd());
25
7
  const outDir = String(options.outDir || "").trim();
@@ -27,16 +9,16 @@ function normalizeBundlerOptions(options) {
27
9
  throw new Error("bundler-missing-out-dir");
28
10
  }
29
11
  const resolvedOutDir = path.resolve(rootDir, outDir);
30
- const entries = normalizeEntries(options.entries);
31
12
  return {
32
13
  annotateSources: Boolean(options.annotateSources),
33
14
  clean: options.clean !== false,
34
15
  define: options.define,
35
- entries,
16
+ entries: options.entries,
36
17
  external: options.external,
37
18
  format: options.format,
38
19
  logger: options.logger,
39
20
  loggerAdapter: options.loggerAdapter,
21
+ manifest: normalizeManifestOptions(options.manifest),
40
22
  minify: Boolean(options.minify),
41
23
  outDir: resolvedOutDir,
42
24
  platform: options.platform,
@@ -48,6 +30,12 @@ function normalizeBundlerOptions(options) {
48
30
  };
49
31
  }
50
32
  function createEsbuildOptions(options, logger) {
33
+ const entryPoints = options.entryRecords
34
+ ? toEntryPointMap(options.entryRecords, options.rootDir)
35
+ : options.entries;
36
+ if (!entryPoints || (typeof entryPoints === "object" && !Array.isArray(entryPoints) && Object.keys(entryPoints).length === 0)) {
37
+ throw new Error("bundler-missing-entries");
38
+ }
51
39
  if (options.annotateSources) {
52
40
  logger.info("annotate", "inline source annotations enabled");
53
41
  }
@@ -56,7 +44,7 @@ function createEsbuildOptions(options, logger) {
56
44
  absWorkingDir: options.rootDir,
57
45
  bundle: true,
58
46
  define: options.define,
59
- entryPoints: options.entries,
47
+ entryPoints,
60
48
  external: options.external,
61
49
  format: options.format,
62
50
  legalComments: options.annotateSources ? "inline" : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild-options.js","sourceRoot":"","sources":["../../src/core/esbuild-options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esbuild-options.js","sourceRoot":"","sources":["../../src/core/esbuild-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { BundlerEntryRecord } from "../types.js";
2
+ import type { NormalizedManifestOptions } from "./discovery.js";
3
+ type ManifestWriteResult = {
4
+ manifestPath?: string;
5
+ };
6
+ declare function writeBundlerManifest(args: {
7
+ entries: BundlerEntryRecord[];
8
+ manifest: NormalizedManifestOptions;
9
+ outDir: string;
10
+ outputs: string[];
11
+ rootDir: string;
12
+ }): Promise<ManifestWriteResult>;
13
+ export { writeBundlerManifest };
14
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,KAAK,mBAAmB,GAAG;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,iBAAe,oBAAoB,CAAC,IAAI,EAAE;IACxC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,QAAQ,EAAE,yBAAyB,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyB/B;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { toPosixPath } from "./discovery.js";
4
+ async function writeBundlerManifest(args) {
5
+ if (!args.manifest.enabled || !args.manifest.file) {
6
+ return {};
7
+ }
8
+ const manifestPath = path.resolve(args.outDir, args.manifest.file);
9
+ await fs.mkdir(path.dirname(manifestPath), { recursive: true });
10
+ const body = {
11
+ generatedAt: new Date().toISOString(),
12
+ entries: Object.fromEntries(args.entries.map((entry) => [
13
+ entry.name,
14
+ {
15
+ path: toPosixPath(path.relative(args.rootDir, entry.path)),
16
+ source: entry.source,
17
+ },
18
+ ])),
19
+ outputs: args.outputs.map((output) => toPosixPath(path.relative(args.rootDir, output))),
20
+ };
21
+ await fs.writeFile(`${manifestPath}`, `${JSON.stringify(body, null, 2)}\n`);
22
+ return { manifestPath };
23
+ }
24
+ export { writeBundlerManifest };
25
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7C,KAAK,UAAU,oBAAoB,CAAC,IAMnC;IACC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG;QACX,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI;YACV;gBACE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1D,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB;SACF,CAAC,CACH;QACD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;KACxF,CAAC;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5E,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,11 +1,15 @@
1
1
  import type { BuildResult, Message } from "esbuild";
2
- import type { BundlerBuildResult, NormalizedBundlerLogger } from "../types.js";
2
+ import type { BundlerBuildResult, BundlerEntryRecord, NormalizedBundlerLogger } from "../types.js";
3
+ import type { NormalizedManifestOptions } from "./discovery.js";
3
4
  declare function logWarnings(logger: NormalizedBundlerLogger, warnings: Message[]): void;
4
5
  declare function toBuildResult(args: {
6
+ entries: BundlerEntryRecord[];
7
+ manifest: NormalizedManifestOptions;
8
+ outDir: string;
5
9
  result: BuildResult<any>;
6
10
  rootDir: string;
7
11
  startedAt: number;
8
- }): BundlerBuildResult;
12
+ }): Promise<BundlerBuildResult>;
9
13
  declare function cleanOutDir(outDir: string): Promise<void>;
10
14
  declare function formatFailure(error: unknown): string;
11
15
  export { cleanOutDir, formatFailure, logWarnings, toBuildResult };
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/core/shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAU/E,iBAAS,WAAW,CAAC,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAI/E;AAUD,iBAAS,aAAa,CAAC,IAAI,EAAE;IAC3B,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,kBAAkB,CAOrB;AAED,iBAAe,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO7C;AAED,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/core/shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGnG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAUhE,iBAAS,WAAW,CAAC,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAI/E;AAUD,iBAAe,aAAa,CAAC,IAAI,EAAE;IACjC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,QAAQ,EAAE,yBAAyB,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkB9B;AAED,iBAAe,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO7C;AAED,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
+ import { toEntryPointMap } from "./discovery.js";
4
+ import { writeBundlerManifest } from "./manifest.js";
3
5
  function formatEsbuildMessage(message) {
4
6
  const location = message.location
5
7
  ? `${message.location.file}:${message.location.line}:${message.location.column}`
@@ -19,11 +21,21 @@ function resolveOutputs(result, rootDir) {
19
21
  .map((value) => path.isAbsolute(value) ? value : path.resolve(rootDir, value))
20
22
  .sort();
21
23
  }
22
- function toBuildResult(args) {
24
+ async function toBuildResult(args) {
25
+ const outputs = resolveOutputs(args.result, args.rootDir);
26
+ const manifestWrite = await writeBundlerManifest({
27
+ entries: args.entries,
28
+ manifest: args.manifest,
29
+ outDir: args.outDir,
30
+ outputs,
31
+ rootDir: args.rootDir,
32
+ });
23
33
  return {
24
- outputs: resolveOutputs(args.result, args.rootDir),
34
+ entries: toEntryPointMap(args.entries, args.rootDir),
35
+ outputs,
25
36
  warnings: args.result.warnings.length,
26
37
  metafile: args.result.metafile,
38
+ manifestPath: manifestWrite.manifestPath,
27
39
  durationMs: Date.now() - args.startedAt,
28
40
  };
29
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/core/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,SAAS,oBAAoB,CAAC,OAAyB;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;QAC/B,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;QAChF,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,MAA+B,EAAE,QAAmB;IACvE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAwB,EAAE,OAAe;IAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEhC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;SACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC7E,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,IAItB;IACC,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;QAClD,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;QACrC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;QAC9B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;KACxC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAc;IACvC,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,KAAgC,CAAC,MAAM,CAAC,EAAE,CAAC;QAClG,MAAM,MAAM,GAAI,KAAwC,CAAC,MAAM,CAAC;QAChE,OAAO,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/core/shared.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/core/watch.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAsB,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAI3F,iBAAe,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwD1E;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/core/watch.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAsB,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAM3F,iBAAe,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+I1E;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -3,6 +3,8 @@ import { logPackageInitialized } from "@trebired/logger-adapter";
3
3
  import { BUNDLER_LOG_GROUP, BUNDLER_PACKAGE_NAME } from "../constants.js";
4
4
  import { resolveLogger } from "../logging.js";
5
5
  import { createEsbuildOptions, normalizeBundlerOptions } from "./esbuild-options.js";
6
+ import { resolveBundlerEntries, normalizeDiscoverRoots } from "./discovery.js";
7
+ import { createDiscoveryWatcher } from "./discovery-watch.js";
6
8
  import { cleanOutDir, formatFailure, logWarnings, toBuildResult } from "./shared.js";
7
9
  async function watch(options) {
8
10
  const normalized = normalizeBundlerOptions(options || {});
@@ -18,12 +20,37 @@ async function watch(options) {
18
20
  logger.info("watch", `clean :: ${normalized.outDir}`);
19
21
  await cleanOutDir(normalized.outDir);
20
22
  }
21
- const context = await createContext(createEsbuildOptions(normalized, logger));
23
+ let disposed = false;
24
+ let currentEntries = await resolveBundlerEntries(options || {}, normalized.rootDir, {
25
+ allowEmpty: true,
26
+ });
27
+ let currentContext = null;
28
+ let queued = Promise.resolve();
29
+ const createWatchedContext = async (records = currentEntries.records) => {
30
+ const context = await createContext(createEsbuildOptions({
31
+ ...normalized,
32
+ entryRecords: records,
33
+ }, logger));
34
+ await context.watch();
35
+ return context;
36
+ };
22
37
  const executeRebuild = async () => {
38
+ if (!currentContext) {
39
+ return {
40
+ entries: {},
41
+ outputs: [],
42
+ warnings: 0,
43
+ manifestPath: undefined,
44
+ durationMs: 0,
45
+ };
46
+ }
23
47
  const startedAt = Date.now();
24
- const result = await context.rebuild();
48
+ const result = await currentContext.rebuild();
25
49
  logWarnings(logger, result.warnings);
26
- const summary = toBuildResult({
50
+ const summary = await toBuildResult({
51
+ entries: currentEntries.records,
52
+ manifest: normalized.manifest,
53
+ outDir: normalized.outDir,
27
54
  result,
28
55
  rootDir: normalized.rootDir,
29
56
  startedAt,
@@ -31,29 +58,86 @@ async function watch(options) {
31
58
  logger.info("watch", `rebuilt :: outputs=${summary.outputs.length} warnings=${summary.warnings}`);
32
59
  return summary;
33
60
  };
61
+ const refreshDiscovery = async () => {
62
+ const nextEntries = await resolveBundlerEntries(options || {}, normalized.rootDir, {
63
+ allowEmpty: true,
64
+ });
65
+ if (nextEntries.signature === currentEntries.signature)
66
+ return;
67
+ logger.info("watch", `entry-set-changed :: count=${nextEntries.records.length}`);
68
+ currentEntries = nextEntries;
69
+ if (currentContext) {
70
+ await currentContext.dispose();
71
+ currentContext = null;
72
+ }
73
+ await cleanOutDir(normalized.outDir);
74
+ if (currentEntries.records.length === 0) {
75
+ logger.info("watch", "entry-set-empty");
76
+ return;
77
+ }
78
+ currentContext = await createWatchedContext(currentEntries.records);
79
+ await executeRebuild();
80
+ };
81
+ const runExclusive = (task) => {
82
+ const next = queued.then(task, task);
83
+ queued = next.then(() => undefined, () => undefined);
84
+ return next;
85
+ };
86
+ const discoveryRoots = normalizeDiscoverRoots(normalized.rootDir, options.discover);
87
+ const discoveryWatcher = discoveryRoots.length
88
+ ? createDiscoveryWatcher({
89
+ dirs: discoveryRoots,
90
+ onChange() {
91
+ void runExclusive(async () => {
92
+ if (disposed)
93
+ return;
94
+ try {
95
+ await refreshDiscovery();
96
+ }
97
+ catch (error) {
98
+ logger.fail("watch", `discovery-refresh-failed :: ${formatFailure(error)}`);
99
+ }
100
+ });
101
+ },
102
+ })
103
+ : null;
34
104
  try {
35
105
  logger.info("watch", "start");
36
- await executeRebuild();
37
- await context.watch();
106
+ logger.info("watch", `entries :: count=${currentEntries.records.length}`);
107
+ if (currentEntries.records.length > 0) {
108
+ currentContext = await createWatchedContext(currentEntries.records);
109
+ await executeRebuild();
110
+ }
38
111
  return {
39
112
  async rebuild() {
40
- try {
41
- return await executeRebuild();
42
- }
43
- catch (error) {
44
- logger.fail("watch", `rebuild-failed :: ${formatFailure(error)}`);
45
- throw error;
46
- }
113
+ return runExclusive(async () => {
114
+ try {
115
+ await refreshDiscovery();
116
+ return await executeRebuild();
117
+ }
118
+ catch (error) {
119
+ logger.fail("watch", `rebuild-failed :: ${formatFailure(error)}`);
120
+ throw error;
121
+ }
122
+ });
47
123
  },
48
124
  async dispose() {
49
125
  logger.info("watch", "dispose");
50
- await context.dispose();
126
+ disposed = true;
127
+ discoveryWatcher?.close();
128
+ if (currentContext) {
129
+ await currentContext.dispose();
130
+ }
51
131
  },
52
132
  };
53
133
  }
54
134
  catch (error) {
55
135
  logger.fail("watch", `failed :: ${formatFailure(error)}`);
56
- await context.dispose();
136
+ disposed = true;
137
+ discoveryWatcher?.close();
138
+ if (currentContext) {
139
+ await currentContext.dispose();
140
+ }
57
141
  throw error;
58
142
  }
59
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/core/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/core/watch.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,6 @@ export { resolveLogger } from "./logging.js";
6
6
  export { buildSourceAnnotation, injectSourceAnnotation, resolveSourceLabel } from "./plugins/source-annotations.js";
7
7
  export { createScssPlugin } from "./plugins/scss.js";
8
8
  export { runCli } from "./cli/run-cli.js";
9
- export type { BundlerBuildResult, BundlerGenericLogMethod, BundlerLogEvent, BundlerLogger, BundlerLoggerAdapter, BundlerLogMethod, BundlerOptions, BundlerWatchSession, LoadedBundlerConfig, NormalizedBundlerLogger, } from "./types.js";
9
+ export type { BundlerBuildResult, BundlerDiscoverOptions, BundlerEntryRecord, BundlerEntrySource, BundlerGenericLogMethod, BundlerLogEvent, BundlerLogger, BundlerLoggerAdapter, BundlerLogMethod, BundlerManifestOptions, BundlerOptions, BundlerWatchSession, LoadedBundlerConfig, NormalizedBundlerLogger, } from "./types.js";
10
10
  export { bundle as default } from "./core/build.js";
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAe1C,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAmB1C,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -6,8 +6,26 @@ type BundlerLogMethod = LoggerAdapterLogMethod;
6
6
  type BundlerGenericLogMethod = LoggerAdapterGenericLogMethod;
7
7
  type BundlerLogEvent = LoggerAdapterEvent;
8
8
  type NormalizedBundlerLogger = NormalizedLoggerAdapter;
9
+ type BundlerDiscoverOptions = {
10
+ dir: string;
11
+ include?: string[];
12
+ exclude?: string[];
13
+ extensions?: string[];
14
+ ignoreDirs?: string[];
15
+ namePrefix?: string;
16
+ };
17
+ type BundlerManifestOptions = boolean | {
18
+ file?: string;
19
+ };
20
+ type BundlerEntrySource = "manual" | "discover";
21
+ type BundlerEntryRecord = {
22
+ name: string;
23
+ path: string;
24
+ source: BundlerEntrySource;
25
+ };
9
26
  type BundlerOptions = {
10
- entries: string[] | Record<string, string>;
27
+ entries?: string[] | Record<string, string>;
28
+ discover?: BundlerDiscoverOptions | BundlerDiscoverOptions[];
11
29
  outDir: string;
12
30
  rootDir?: string;
13
31
  platform?: Platform;
@@ -21,13 +39,16 @@ type BundlerOptions = {
21
39
  define?: Record<string, string>;
22
40
  clean?: boolean;
23
41
  annotateSources?: boolean;
42
+ manifest?: BundlerManifestOptions;
24
43
  logger?: BundlerLogger;
25
44
  loggerAdapter?: BundlerLoggerAdapter;
26
45
  };
27
46
  type BundlerBuildResult = {
47
+ entries: Record<string, string>;
28
48
  outputs: string[];
29
49
  warnings: number;
30
50
  metafile?: Metafile;
51
+ manifestPath?: string;
31
52
  durationMs: number;
32
53
  };
33
54
  type BundlerWatchSession = {
@@ -38,5 +59,5 @@ type LoadedBundlerConfig = {
38
59
  config: BundlerOptions;
39
60
  configPath: string;
40
61
  };
41
- export type { BundlerBuildResult, BundlerGenericLogMethod, BundlerLogEvent, BundlerLogger, BundlerLoggerAdapter, BundlerLogMethod, BundlerOptions, BundlerWatchSession, LoadedBundlerConfig, NormalizedBundlerLogger, };
62
+ export type { BundlerBuildResult, BundlerDiscoverOptions, BundlerEntryRecord, BundlerEntrySource, BundlerGenericLogMethod, BundlerLogEvent, BundlerLogger, BundlerLoggerAdapter, BundlerLogMethod, BundlerManifestOptions, BundlerOptions, BundlerWatchSession, LoadedBundlerConfig, NormalizedBundlerLogger, };
42
63
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EACV,kBAAkB,EAClB,6BAA6B,EAC7B,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,0BAA0B,CAAC;AAElC,KAAK,aAAa,GAAG,mBAAmB,CAAC;AACzC,KAAK,oBAAoB,GAAG,mBAAmB,CAAC;AAChD,KAAK,gBAAgB,GAAG,sBAAsB,CAAC;AAC/C,KAAK,uBAAuB,GAAG,6BAA6B,CAAC;AAC7D,KAAK,eAAe,GAAG,kBAAkB,CAAC;AAC1C,KAAK,uBAAuB,GAAG,uBAAuB,CAAC;AAEvD,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,GACxB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EACV,kBAAkB,EAClB,6BAA6B,EAC7B,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,0BAA0B,CAAC;AAElC,KAAK,aAAa,GAAG,mBAAmB,CAAC;AACzC,KAAK,oBAAoB,GAAG,mBAAmB,CAAC;AAChD,KAAK,gBAAgB,GAAG,sBAAsB,CAAC;AAC/C,KAAK,uBAAuB,GAAG,6BAA6B,CAAC;AAC7D,KAAK,eAAe,GAAG,kBAAkB,CAAC;AAC1C,KAAK,uBAAuB,GAAG,uBAAuB,CAAC;AAEvD,KAAK,sBAAsB,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,KAAK,sBAAsB,GAAG,OAAO,GAAG;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhD,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,sBAAsB,GAAG,sBAAsB,EAAE,CAAC;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,GACxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trebired/bundler",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Fast esbuild-based bundler wrapper with SCSS support, watch mode, and inline source path annotations.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "keywords": [