rolldown 1.0.0-beta.1-commit.35fb1f8 → 1.0.0-beta.2-commit.afd0727

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/cjs/cli.cjs +981 -25
  2. package/dist/cjs/experimental-index.cjs +2 -2
  3. package/dist/cjs/index.cjs +2 -2
  4. package/dist/cjs/parallel-plugin-worker.cjs +2 -2
  5. package/dist/cjs/parse-ast-index.cjs +1 -1
  6. package/dist/esm/cli.mjs +981 -26
  7. package/dist/esm/experimental-index.mjs +2 -2
  8. package/dist/esm/index.mjs +2 -2
  9. package/dist/esm/parallel-plugin-worker.mjs +2 -2
  10. package/dist/esm/parse-ast-index.mjs +1 -1
  11. package/dist/shared/{binding-Bl7VQy7c.mjs → binding-l7VLSKnB.mjs} +3 -3
  12. package/dist/shared/{binding-fhgdIkpS.cjs → binding-orkvONpS.cjs} +3 -3
  13. package/dist/shared/prompt-B7tq3GL9.cjs +854 -0
  14. package/dist/shared/prompt-Nfm4Xz36.mjs +851 -0
  15. package/dist/shared/{src-Busnx6mE.cjs → src-Db20iysW.cjs} +25 -9
  16. package/dist/shared/{src-DNOXsZr0.mjs → src-mclDryX0.mjs} +25 -9
  17. package/dist/types/api/build.js +22 -0
  18. package/dist/types/api/experimental.js +13 -0
  19. package/dist/types/api/rolldown/index.js +7 -0
  20. package/dist/types/api/rolldown/rolldown-build.js +43 -0
  21. package/dist/types/api/watch/index.js +8 -0
  22. package/dist/types/api/watch/watch-emitter.js +69 -0
  23. package/dist/types/api/watch/watcher.js +66 -0
  24. package/dist/types/binding.d.ts +42 -3
  25. package/dist/types/builtin-plugin/alias-plugin.js +4 -0
  26. package/dist/types/builtin-plugin/constructors.d.ts +2 -2
  27. package/dist/types/builtin-plugin/constructors.js +68 -0
  28. package/dist/types/builtin-plugin/replace-plugin.js +29 -0
  29. package/dist/types/builtin-plugin/transform-plugin.js +16 -0
  30. package/dist/types/builtin-plugin/utils.js +19 -0
  31. package/dist/types/cli/arguments/alias.js +63 -0
  32. package/dist/types/cli/arguments/index.js +127 -0
  33. package/dist/types/cli/arguments/normalize.js +48 -0
  34. package/dist/types/cli/arguments/utils.js +67 -0
  35. package/dist/types/cli/colors.js +17 -0
  36. package/dist/types/cli/commands/bundle.js +203 -0
  37. package/dist/types/cli/commands/help.js +88 -0
  38. package/dist/types/cli/index.js +27 -0
  39. package/dist/types/cli/load-config.js +95 -0
  40. package/dist/types/cli/logger.js +35 -0
  41. package/dist/types/constants/plugin-context.js +7 -0
  42. package/dist/types/constants/plugin.js +69 -0
  43. package/dist/types/experimental-index.js +9 -0
  44. package/dist/types/index.d.ts +2 -2
  45. package/dist/types/index.js +7 -0
  46. package/dist/types/log/logHandler.js +25 -0
  47. package/dist/types/log/logger.js +107 -0
  48. package/dist/types/log/logging.js +11 -0
  49. package/dist/types/log/logs.js +86 -0
  50. package/dist/types/options/input-options.d.ts +47 -2
  51. package/dist/types/options/input-options.js +1 -0
  52. package/dist/types/options/normalized-input-options.js +21 -0
  53. package/dist/types/options/normalized-output-options.js +99 -0
  54. package/dist/types/options/output-options.d.ts +6 -0
  55. package/dist/types/options/output-options.js +1 -0
  56. package/dist/types/options/watch-options.js +1 -0
  57. package/dist/types/parallel-plugin-worker.js +31 -0
  58. package/dist/types/parallel-plugin.js +1 -0
  59. package/dist/types/parse-ast-index.js +73 -0
  60. package/dist/types/plugin/bindingify-build-hooks.js +213 -0
  61. package/dist/types/plugin/bindingify-hook-filter.js +39 -0
  62. package/dist/types/plugin/bindingify-output-hooks.js +189 -0
  63. package/dist/types/plugin/bindingify-plugin-hook-meta.js +19 -0
  64. package/dist/types/plugin/bindingify-plugin.js +124 -0
  65. package/dist/types/plugin/bindingify-watch-hooks.js +29 -0
  66. package/dist/types/plugin/hook-filter.js +1 -0
  67. package/dist/types/plugin/index.js +1 -0
  68. package/dist/types/plugin/minimal-plugin-context.js +25 -0
  69. package/dist/types/plugin/parallel-plugin-implementation.js +3 -0
  70. package/dist/types/plugin/parallel-plugin.js +6 -0
  71. package/dist/types/plugin/plugin-context-data.js +55 -0
  72. package/dist/types/plugin/plugin-context.js +108 -0
  73. package/dist/types/plugin/plugin-driver.js +88 -0
  74. package/dist/types/plugin/transform-plugin-context.js +37 -0
  75. package/dist/types/types/assert.js +1 -0
  76. package/dist/types/types/config-export.js +1 -0
  77. package/dist/types/types/misc.js +1 -0
  78. package/dist/types/types/module-info.js +1 -0
  79. package/dist/types/types/module-side-effects.js +1 -0
  80. package/dist/types/types/output-bundle.js +1 -0
  81. package/dist/types/types/rolldown-options.js +1 -0
  82. package/dist/types/types/rolldown-output.js +1 -0
  83. package/dist/types/types/schema.js +1 -0
  84. package/dist/types/types/sourcemap.js +16 -0
  85. package/dist/types/types/utils.js +1 -0
  86. package/dist/types/utils/asset-source.js +8 -0
  87. package/dist/types/utils/async-flatten.js +7 -0
  88. package/dist/types/utils/bindingify-input-options.js +225 -0
  89. package/dist/types/utils/bindingify-output-options.js +92 -0
  90. package/dist/types/utils/code-frame.js +46 -0
  91. package/dist/types/utils/compose-js-plugins.js +400 -0
  92. package/dist/types/utils/create-bundler-option.js +53 -0
  93. package/dist/types/utils/create-bundler.js +15 -0
  94. package/dist/types/utils/define-config.js +3 -0
  95. package/dist/types/utils/error.js +65 -0
  96. package/dist/types/utils/initialize-parallel-plugins.js +54 -0
  97. package/dist/types/utils/misc.js +22 -0
  98. package/dist/types/utils/normalize-hook.js +21 -0
  99. package/dist/types/utils/normalize-plugin-option.js +35 -0
  100. package/dist/types/utils/normalize-string-or-regex.js +14 -0
  101. package/dist/types/utils/plugin/index.js +7 -0
  102. package/dist/types/utils/transform-module-info.js +19 -0
  103. package/dist/types/utils/transform-rendered-chunk.js +43 -0
  104. package/dist/types/utils/transform-rendered-module.js +10 -0
  105. package/dist/types/utils/transform-side-effects.js +16 -0
  106. package/dist/types/utils/transform-sourcemap.js +29 -0
  107. package/dist/types/utils/transform-to-rollup-output.js +165 -0
  108. package/dist/types/utils/validator.js +275 -0
  109. package/package.json +28 -25
  110. package/dist/shared/consola_36c0034f-Cx52UqEq.mjs +0 -832
  111. package/dist/shared/consola_36c0034f-CynBWXXO.cjs +0 -859
  112. package/dist/shared/prompt-B58MxVuU.cjs +0 -762
  113. package/dist/shared/prompt-DjjlOckE.mjs +0 -758
  114. package/dist/tsconfig.dts.tsbuildinfo +0 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  const require_chunk = require('./chunk-qZFfknuJ.cjs');
3
- const require_binding = require('./binding-fhgdIkpS.cjs');
3
+ const require_binding = require('./binding-orkvONpS.cjs');
4
4
  const node_path = require_chunk.__toESM(require("node:path"));
5
5
  const node_buffer = require_chunk.__toESM(require("node:buffer"));
6
6
  const node_worker_threads = require_chunk.__toESM(require("node:worker_threads"));
@@ -222,9 +222,19 @@ function viteResolvePlugin(config) {
222
222
  function moduleFederationPlugin(config) {
223
223
  return new BuiltinPlugin("builtin:module-federation", {
224
224
  ...config,
225
- remotes: config.remotes && Object.values(config.remotes).map((entry) => {
226
- if (typeof entry === "string") return { entry };
227
- return entry;
225
+ remotes: config.remotes && Object.entries(config.remotes).map(([name, remote]) => {
226
+ if (typeof remote === "string") {
227
+ const [entryGlobalName] = remote.split("@");
228
+ const entry = remote.replace(entryGlobalName + "@", "");
229
+ return {
230
+ entry,
231
+ name
232
+ };
233
+ }
234
+ return {
235
+ ...remote,
236
+ name: remote.name ?? name
237
+ };
228
238
  })
229
239
  });
230
240
  }
@@ -1743,7 +1753,7 @@ function bindingifySourcemapIgnoreList(sourcemapIgnoreList) {
1743
1753
  }
1744
1754
 
1745
1755
  //#endregion
1746
- //#region ../../node_modules/.pnpm/remeda@2.16.0/node_modules/remeda/dist/chunk-K26VP6CL.js
1756
+ //#region ../../node_modules/.pnpm/remeda@2.19.1/node_modules/remeda/dist/chunk-K26VP6CL.js
1747
1757
  function u$1(t$1, n, a) {
1748
1758
  let o = (r) => t$1(r, ...n);
1749
1759
  return a === void 0 ? o : Object.assign(o, {
@@ -1753,7 +1763,7 @@ function u$1(t$1, n, a) {
1753
1763
  }
1754
1764
 
1755
1765
  //#endregion
1756
- //#region ../../node_modules/.pnpm/remeda@2.16.0/node_modules/remeda/dist/chunk-RAAYCPUM.js
1766
+ //#region ../../node_modules/.pnpm/remeda@2.19.1/node_modules/remeda/dist/chunk-RAAYCPUM.js
1757
1767
  function u(r, n, a) {
1758
1768
  let o = r.length - n.length;
1759
1769
  if (o === 0) return r(...n);
@@ -1762,7 +1772,7 @@ function u(r, n, a) {
1762
1772
  }
1763
1773
 
1764
1774
  //#endregion
1765
- //#region ../../node_modules/.pnpm/remeda@2.16.0/node_modules/remeda/dist/chunk-NMJS7ULY.js
1775
+ //#region ../../node_modules/.pnpm/remeda@2.19.1/node_modules/remeda/dist/chunk-NMJS7ULY.js
1766
1776
  function t(...n) {
1767
1777
  return u(Object.keys, n);
1768
1778
  }
@@ -2293,13 +2303,19 @@ const ChunkFileNamesSchema = valibot.union([valibot.string(), valibot.pipe(valib
2293
2303
  const GlobalsFunctionSchema = valibot.pipe(valibot.function(), valibot.args(valibot.tuple([valibot.string()])), valibot.returns(valibot.string()));
2294
2304
  const AdvancedChunksSchema = valibot.strictObject({
2295
2305
  minSize: valibot.optional(valibot.number()),
2306
+ maxSize: valibot.optional(valibot.number()),
2307
+ minModuleSize: valibot.optional(valibot.number()),
2308
+ maxModuleSize: valibot.optional(valibot.number()),
2296
2309
  minShareCount: valibot.optional(valibot.number()),
2297
2310
  groups: valibot.optional(valibot.array(valibot.strictObject({
2298
2311
  name: valibot.string(),
2299
2312
  test: valibot.optional(valibot.union([valibot.string(), valibot.instance(RegExp)])),
2300
2313
  priority: valibot.optional(valibot.number()),
2301
2314
  minSize: valibot.optional(valibot.number()),
2302
- minShareCount: valibot.optional(valibot.number())
2315
+ minShareCount: valibot.optional(valibot.number()),
2316
+ maxSize: valibot.optional(valibot.number()),
2317
+ minModuleSize: valibot.optional(valibot.number()),
2318
+ maxModuleSize: valibot.optional(valibot.number())
2303
2319
  })))
2304
2320
  });
2305
2321
  const OutputOptionsSchema = valibot.strictObject({
@@ -2606,7 +2622,7 @@ const watch = (input) => {
2606
2622
 
2607
2623
  //#endregion
2608
2624
  //#region package.json
2609
- var version = "1.0.0-beta.1-commit.35fb1f8";
2625
+ var version = "1.0.0-beta.2-commit.afd0727";
2610
2626
  var description = "Fast JavaScript/TypeScript bundler in Rust with Rollup-compatible API.";
2611
2627
 
2612
2628
  //#endregion
@@ -1,4 +1,4 @@
1
- import { augmentCodeLocation, colors, error, import_binding, logCycleLoading, logInputHookInOutputPlugin, logInvalidLogPosition, logMinifyWarning, logMultiplyNotifyOption, logPluginError } from "./binding-Bl7VQy7c.mjs";
1
+ import { augmentCodeLocation, colors, error, import_binding, logCycleLoading, logInputHookInOutputPlugin, logInvalidLogPosition, logMinifyWarning, logMultiplyNotifyOption, logPluginError } from "./binding-l7VLSKnB.mjs";
2
2
  import path from "node:path";
3
3
  import { Buffer } from "node:buffer";
4
4
  import { Worker } from "node:worker_threads";
@@ -220,9 +220,19 @@ function viteResolvePlugin(config) {
220
220
  function moduleFederationPlugin(config) {
221
221
  return new BuiltinPlugin("builtin:module-federation", {
222
222
  ...config,
223
- remotes: config.remotes && Object.values(config.remotes).map((entry) => {
224
- if (typeof entry === "string") return { entry };
225
- return entry;
223
+ remotes: config.remotes && Object.entries(config.remotes).map(([name, remote]) => {
224
+ if (typeof remote === "string") {
225
+ const [entryGlobalName] = remote.split("@");
226
+ const entry = remote.replace(entryGlobalName + "@", "");
227
+ return {
228
+ entry,
229
+ name
230
+ };
231
+ }
232
+ return {
233
+ ...remote,
234
+ name: remote.name ?? name
235
+ };
226
236
  })
227
237
  });
228
238
  }
@@ -1741,7 +1751,7 @@ function bindingifySourcemapIgnoreList(sourcemapIgnoreList) {
1741
1751
  }
1742
1752
 
1743
1753
  //#endregion
1744
- //#region ../../node_modules/.pnpm/remeda@2.16.0/node_modules/remeda/dist/chunk-K26VP6CL.js
1754
+ //#region ../../node_modules/.pnpm/remeda@2.19.1/node_modules/remeda/dist/chunk-K26VP6CL.js
1745
1755
  function u$1(t$1, n, a) {
1746
1756
  let o = (r) => t$1(r, ...n);
1747
1757
  return a === void 0 ? o : Object.assign(o, {
@@ -1751,7 +1761,7 @@ function u$1(t$1, n, a) {
1751
1761
  }
1752
1762
 
1753
1763
  //#endregion
1754
- //#region ../../node_modules/.pnpm/remeda@2.16.0/node_modules/remeda/dist/chunk-RAAYCPUM.js
1764
+ //#region ../../node_modules/.pnpm/remeda@2.19.1/node_modules/remeda/dist/chunk-RAAYCPUM.js
1755
1765
  function u(r, n, a) {
1756
1766
  let o = r.length - n.length;
1757
1767
  if (o === 0) return r(...n);
@@ -1760,7 +1770,7 @@ function u(r, n, a) {
1760
1770
  }
1761
1771
 
1762
1772
  //#endregion
1763
- //#region ../../node_modules/.pnpm/remeda@2.16.0/node_modules/remeda/dist/chunk-NMJS7ULY.js
1773
+ //#region ../../node_modules/.pnpm/remeda@2.19.1/node_modules/remeda/dist/chunk-NMJS7ULY.js
1764
1774
  function t(...n) {
1765
1775
  return u(Object.keys, n);
1766
1776
  }
@@ -2291,13 +2301,19 @@ const ChunkFileNamesSchema = v.union([v.string(), v.pipe(v.function(), v.args(v.
2291
2301
  const GlobalsFunctionSchema = v.pipe(v.function(), v.args(v.tuple([v.string()])), v.returns(v.string()));
2292
2302
  const AdvancedChunksSchema = v.strictObject({
2293
2303
  minSize: v.optional(v.number()),
2304
+ maxSize: v.optional(v.number()),
2305
+ minModuleSize: v.optional(v.number()),
2306
+ maxModuleSize: v.optional(v.number()),
2294
2307
  minShareCount: v.optional(v.number()),
2295
2308
  groups: v.optional(v.array(v.strictObject({
2296
2309
  name: v.string(),
2297
2310
  test: v.optional(v.union([v.string(), v.instance(RegExp)])),
2298
2311
  priority: v.optional(v.number()),
2299
2312
  minSize: v.optional(v.number()),
2300
- minShareCount: v.optional(v.number())
2313
+ minShareCount: v.optional(v.number()),
2314
+ maxSize: v.optional(v.number()),
2315
+ minModuleSize: v.optional(v.number()),
2316
+ maxModuleSize: v.optional(v.number())
2301
2317
  })))
2302
2318
  });
2303
2319
  const OutputOptionsSchema = v.strictObject({
@@ -2604,7 +2620,7 @@ const watch = (input) => {
2604
2620
 
2605
2621
  //#endregion
2606
2622
  //#region package.json
2607
- var version = "1.0.0-beta.1-commit.35fb1f8";
2623
+ var version = "1.0.0-beta.2-commit.afd0727";
2608
2624
  var description = "Fast JavaScript/TypeScript bundler in Rust with Rollup-compatible API.";
2609
2625
 
2610
2626
  //#endregion
@@ -0,0 +1,22 @@
1
+ import { rolldown } from './rolldown';
2
+ async function build(options) {
3
+ if (Array.isArray(options)) {
4
+ return Promise.all(options.map((opts) => build(opts)));
5
+ }
6
+ else {
7
+ const { output, write = true, ...inputOptions } = options;
8
+ const build = await rolldown(inputOptions);
9
+ try {
10
+ if (write) {
11
+ return await build.write(output);
12
+ }
13
+ else {
14
+ return await build.generate(output);
15
+ }
16
+ }
17
+ finally {
18
+ await build.close();
19
+ }
20
+ }
21
+ }
22
+ export { build };
@@ -0,0 +1,13 @@
1
+ import { createBundler } from '../utils/create-bundler';
2
+ import { handleOutputErrors } from '../utils/transform-to-rollup-output';
3
+ /**
4
+ * This is an experimental API. It's behavior may change in the future.
5
+ *
6
+ * Calling this API will only execute the scan stage of rolldown.
7
+ */
8
+ export const experimental_scan = async (input) => {
9
+ const { bundler, stopWorkers } = await createBundler(input, {});
10
+ const output = await bundler.scan();
11
+ handleOutputErrors(output);
12
+ await stopWorkers?.();
13
+ };
@@ -0,0 +1,7 @@
1
+ import { PluginDriver } from '../../plugin/plugin-driver';
2
+ import { RolldownBuild } from './rolldown-build';
3
+ // `async` here is intentional to be compatible with `rollup.rollup`.
4
+ export const rolldown = async (input) => {
5
+ const inputOptions = await PluginDriver.callOptionsHook(input);
6
+ return new RolldownBuild(inputOptions);
7
+ };
@@ -0,0 +1,43 @@
1
+ import { transformToRollupOutput } from '../../utils/transform-to-rollup-output';
2
+ import { createBundler, } from '../../utils/create-bundler';
3
+ // @ts-expect-error TS2540: the polyfill of `asyncDispose`.
4
+ Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose');
5
+ export class RolldownBuild {
6
+ #inputOptions;
7
+ #bundler;
8
+ constructor(inputOptions) {
9
+ // TODO: Check if `inputOptions.output` is set. If so, throw an warning that it is ignored.
10
+ this.#inputOptions = inputOptions;
11
+ }
12
+ get closed() {
13
+ // If the bundler has not yet been created, it is not closed.
14
+ return this.#bundler ? this.#bundler.bundler.closed : false;
15
+ }
16
+ // Create bundler for each `bundle.write/generate`
17
+ async #getBundlerWithStopWorker(outputOptions) {
18
+ if (this.#bundler) {
19
+ this.#bundler.stopWorkers?.();
20
+ }
21
+ return (this.#bundler = await createBundler(this.#inputOptions, outputOptions));
22
+ }
23
+ async generate(outputOptions = {}) {
24
+ const { bundler } = await this.#getBundlerWithStopWorker(outputOptions);
25
+ const output = await bundler.generate();
26
+ return transformToRollupOutput(output);
27
+ }
28
+ async write(outputOptions = {}) {
29
+ const { bundler } = await this.#getBundlerWithStopWorker(outputOptions);
30
+ const output = await bundler.write();
31
+ return transformToRollupOutput(output);
32
+ }
33
+ async close() {
34
+ const { bundler, stopWorkers } = await this.#getBundlerWithStopWorker({});
35
+ await stopWorkers?.();
36
+ await bundler.close();
37
+ }
38
+ async [Symbol.asyncDispose]() {
39
+ await this.close();
40
+ }
41
+ }
42
+ function _assert() {
43
+ }
@@ -0,0 +1,8 @@
1
+ import { WatcherEmitter } from './watch-emitter';
2
+ import { createWatcher } from './watcher';
3
+ // Compat to `rollup.watch`
4
+ export const watch = (input) => {
5
+ const emitter = new WatcherEmitter();
6
+ createWatcher(emitter, input);
7
+ return emitter;
8
+ };
@@ -0,0 +1,69 @@
1
+ import { normalizeErrors } from '../../utils/error';
2
+ export class WatcherEmitter {
3
+ listeners = new Map();
4
+ timer;
5
+ constructor() {
6
+ // The rust side already create a thread for watcher, but it isn't at main thread.
7
+ // So here we need to avoid main process exit util the user call `watcher.close()`.
8
+ this.timer = setInterval(() => { }, 1e9 /* Low power usage */);
9
+ }
10
+ on(event, listener) {
11
+ const listeners = this.listeners.get(event);
12
+ if (listeners) {
13
+ listeners.push(listener);
14
+ }
15
+ else {
16
+ this.listeners.set(event, [listener]);
17
+ }
18
+ return this;
19
+ }
20
+ async onEvent(event) {
21
+ const listeners = this.listeners.get(event.eventKind());
22
+ if (listeners) {
23
+ switch (event.eventKind()) {
24
+ case 'close':
25
+ case 'restart':
26
+ for (const listener of listeners) {
27
+ await listener();
28
+ }
29
+ break;
30
+ case 'event':
31
+ for (const listener of listeners) {
32
+ const code = event.bundleEventKind();
33
+ switch (code) {
34
+ case 'BUNDLE_END':
35
+ const { duration, output } = event.bundleEndData();
36
+ await listener({
37
+ code: 'BUNDLE_END',
38
+ duration,
39
+ output: [output], // rolldown doesn't support arraying configure output
40
+ });
41
+ break;
42
+ case 'ERROR':
43
+ const errors = event.errors();
44
+ await listener({
45
+ code: 'ERROR',
46
+ error: normalizeErrors(errors),
47
+ });
48
+ break;
49
+ default:
50
+ await listener({ code });
51
+ break;
52
+ }
53
+ }
54
+ break;
55
+ case 'change':
56
+ for (const listener of listeners) {
57
+ const { path, kind } = event.watchChangeData();
58
+ await listener(path, { event: kind });
59
+ }
60
+ break;
61
+ default:
62
+ throw new Error(`Unknown event: ${event}`);
63
+ }
64
+ }
65
+ }
66
+ async close() {
67
+ clearInterval(this.timer);
68
+ }
69
+ }
@@ -0,0 +1,66 @@
1
+ import { BindingWatcher } from '../../binding';
2
+ import { LOG_LEVEL_WARN } from '../../log/logging';
3
+ import { logMultiplyNotifyOption } from '../../log/logs';
4
+ import { PluginDriver } from '../../plugin/plugin-driver';
5
+ import { createBundlerOptions, } from '../../utils/create-bundler-option';
6
+ import { arraify } from '../../utils/misc';
7
+ export class Watcher {
8
+ closed;
9
+ inner;
10
+ emitter;
11
+ stopWorkers;
12
+ constructor(emitter, inner, stopWorkers) {
13
+ this.closed = false;
14
+ this.inner = inner;
15
+ this.emitter = emitter;
16
+ const originClose = emitter.close.bind(emitter);
17
+ emitter.close = async () => {
18
+ await this.close();
19
+ originClose();
20
+ };
21
+ this.stopWorkers = stopWorkers;
22
+ }
23
+ async close() {
24
+ if (this.closed)
25
+ return;
26
+ this.closed = true;
27
+ for (const stop of this.stopWorkers) {
28
+ await stop?.();
29
+ }
30
+ await this.inner.close();
31
+ }
32
+ start() {
33
+ // run first build after listener is attached
34
+ process.nextTick(() => this.inner.start(this.emitter.onEvent.bind(this.emitter)));
35
+ }
36
+ }
37
+ export async function createWatcher(emitter, input) {
38
+ const options = arraify(input);
39
+ const bundlerOptions = await Promise.all(options
40
+ .map((option) => arraify(option.output || {}).map(async (output) => {
41
+ const inputOptions = await PluginDriver.callOptionsHook(option);
42
+ return createBundlerOptions(inputOptions, output);
43
+ }))
44
+ .flat());
45
+ const notifyOptions = getValidNotifyOption(bundlerOptions);
46
+ const bindingWatcher = new BindingWatcher(bundlerOptions.map((option) => option.bundlerOptions), notifyOptions);
47
+ const watcher = new Watcher(emitter, bindingWatcher, bundlerOptions.map((option) => option.stopWorkers));
48
+ watcher.start();
49
+ }
50
+ function getValidNotifyOption(bundlerOptions) {
51
+ let result;
52
+ for (const option of bundlerOptions) {
53
+ if (option.inputOptions.watch) {
54
+ const notifyOption = option.inputOptions.watch.notify;
55
+ if (notifyOption) {
56
+ if (result) {
57
+ option.onLog(LOG_LEVEL_WARN, logMultiplyNotifyOption());
58
+ return result;
59
+ }
60
+ else {
61
+ result = notifyOption;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
@@ -157,6 +157,7 @@ export declare class MagicString {
157
157
  getUtf16ByteOffset(offset: number): number
158
158
  length(): number
159
159
  toString(): string
160
+ hasChanged(): boolean
160
161
  append(input: string): this
161
162
  appendLeft(index: number, input: string): this
162
163
  appendRight(index: number, input: string): this
@@ -166,6 +167,20 @@ export declare class MagicString {
166
167
  prependRight(index: number, input: string): this
167
168
  relocate(start: number, end: number, to: number): this
168
169
  remove(start: number, end: number): this
170
+ generateMap(options?: Partial<GenerateDecodedMapOptions>): {
171
+ toString: () => string;
172
+ toUrl: () => string;
173
+ toMap: () => {
174
+ file?: string
175
+ mappings: string
176
+ names: Array<string>
177
+ sourceRoot?: string
178
+ sources: Array<string>
179
+ sourcesContent?: Array<string>
180
+ version: number
181
+ x_google_ignoreList?: Array<number>
182
+ }
183
+ }
169
184
  }
170
185
 
171
186
  export declare class ParallelJsPluginRegistry {
@@ -216,6 +231,9 @@ export interface BindingAdvancedChunksOptions {
216
231
  minSize?: number
217
232
  minShareCount?: number
218
233
  groups?: Array<BindingMatchGroup>
234
+ maxSize?: number
235
+ minModuleSize?: number
236
+ maxModuleSize?: number
219
237
  }
220
238
 
221
239
  export interface BindingAliasPluginAlias {
@@ -439,13 +457,16 @@ export interface BindingMatchGroup {
439
457
  priority?: number
440
458
  minSize?: number
441
459
  minShareCount?: number
460
+ minModuleSize?: number
461
+ maxModuleSize?: number
462
+ maxSize?: number
442
463
  }
443
464
 
444
465
  export interface BindingModuleFederationPluginOption {
445
466
  name: string
446
467
  filename?: string
447
468
  exposes?: Record<string, string>
448
- remotes?: Record<string, BindingRemote>
469
+ remotes?: Array<BindingRemote>
449
470
  shared?: Record<string, BindingShared>
450
471
  }
451
472
 
@@ -577,6 +598,7 @@ export interface BindingPluginWithIndex {
577
598
  export interface BindingRemote {
578
599
  type?: string
579
600
  entry: string
601
+ name: string
580
602
  entryGlobalName?: string
581
603
  shareScope?: string
582
604
  }
@@ -689,6 +711,12 @@ export interface CompilerAssumptions {
689
711
  setPublicClassFields?: boolean
690
712
  }
691
713
 
714
+ export interface DynamicImport {
715
+ start: number
716
+ end: number
717
+ moduleRequest: Span
718
+ }
719
+
692
720
  export interface EcmaScriptModule {
693
721
  /**
694
722
  * Has ESM syntax.
@@ -698,10 +726,12 @@ export interface EcmaScriptModule {
698
726
  * Dynamic imports `import('foo')` are ignored since they can be used in non-ESM files.
699
727
  */
700
728
  hasModuleSyntax: boolean
701
- /** Import Statements. */
729
+ /** Import statements. */
702
730
  staticImports: Array<StaticImport>
703
- /** Export Statements. */
731
+ /** Export statements. */
704
732
  staticExports: Array<StaticExport>
733
+ /** Dynamic import expressions. */
734
+ dynamicImports: Array<DynamicImport>
705
735
  /** Span positions` of `import.meta` */
706
736
  importMetas: Array<Span>
707
737
  }
@@ -769,6 +799,15 @@ export interface ExtensionAliasItem {
769
799
  replacements: Array<string>
770
800
  }
771
801
 
802
+ export interface GenerateDecodedMapOptions {
803
+ /** The filename of the file containing the original source. */
804
+ source?: string
805
+ /** Whether to include the original content in the map's `sourcesContent` array. */
806
+ includeContent: boolean
807
+ /** Whether the mapping should be high-resolution. */
808
+ hires: boolean | 'boundary'
809
+ }
810
+
772
811
  export type HelperMode = /**
773
812
  * Runtime mode (default): Helper functions are imported from a runtime package.
774
813
  *
@@ -0,0 +1,4 @@
1
+ import { BuiltinPlugin } from './constructors';
2
+ export function aliasPlugin(config) {
3
+ return new BuiltinPlugin('builtin:alias', config);
4
+ }
@@ -1,8 +1,8 @@
1
1
  import { type BindingBuiltinPluginName, BindingGlobImportPluginConfig, BindingManifestPluginConfig, BindingModulePreloadPolyfillPluginConfig, BindingJsonPluginConfig, BindingBuildImportAnalysisPluginConfig, type BindingViteResolvePluginConfig, BindingModuleFederationPluginOption, BindingRemote } from '../binding';
2
2
  export declare class BuiltinPlugin {
3
3
  name: BindingBuiltinPluginName;
4
- _options?: unknown;
5
- constructor(name: BindingBuiltinPluginName, _options?: unknown);
4
+ _options?: unknown | undefined;
5
+ constructor(name: BindingBuiltinPluginName, _options?: unknown | undefined);
6
6
  }
7
7
  export declare function modulePreloadPolyfillPlugin(config?: BindingModulePreloadPolyfillPluginConfig): BuiltinPlugin;
8
8
  export declare function dynamicImportVarsPlugin(): BuiltinPlugin;
@@ -0,0 +1,68 @@
1
+ import { makeBuiltinPluginCallable } from './utils';
2
+ export class BuiltinPlugin {
3
+ name;
4
+ _options;
5
+ constructor(name,
6
+ // NOTE: has `_` to avoid conflict with `options` hook
7
+ _options) {
8
+ this.name = name;
9
+ this._options = _options;
10
+ this.name = name;
11
+ this._options = _options;
12
+ }
13
+ }
14
+ export function modulePreloadPolyfillPlugin(config) {
15
+ return new BuiltinPlugin('builtin:module-preload-polyfill', config);
16
+ }
17
+ export function dynamicImportVarsPlugin() {
18
+ return new BuiltinPlugin('builtin:dynamic-import-vars');
19
+ }
20
+ export function importGlobPlugin(config) {
21
+ return new BuiltinPlugin('builtin:import-glob', config);
22
+ }
23
+ export function manifestPlugin(config) {
24
+ return new BuiltinPlugin('builtin:manifest', config);
25
+ }
26
+ export function wasmHelperPlugin() {
27
+ return new BuiltinPlugin('builtin:wasm-helper');
28
+ }
29
+ export function wasmFallbackPlugin() {
30
+ return new BuiltinPlugin('builtin:wasm-fallback');
31
+ }
32
+ export function loadFallbackPlugin() {
33
+ return new BuiltinPlugin('builtin:load-fallback');
34
+ }
35
+ export function jsonPlugin(config) {
36
+ return new BuiltinPlugin('builtin:json', config);
37
+ }
38
+ export function buildImportAnalysisPlugin(config) {
39
+ return new BuiltinPlugin('builtin:build-import-analysis', config);
40
+ }
41
+ export function viteResolvePlugin(config) {
42
+ const builtinPlugin = new BuiltinPlugin('builtin:vite-resolve', {
43
+ ...config,
44
+ runtime: process.versions.deno
45
+ ? 'deno'
46
+ : process.versions.bun
47
+ ? 'bun'
48
+ : 'node',
49
+ });
50
+ return makeBuiltinPluginCallable(builtinPlugin);
51
+ }
52
+ export function moduleFederationPlugin(config) {
53
+ return new BuiltinPlugin('builtin:module-federation', {
54
+ ...config,
55
+ remotes: config.remotes &&
56
+ Object.entries(config.remotes).map(([name, remote]) => {
57
+ if (typeof remote === 'string') {
58
+ const [entryGlobalName] = remote.split('@');
59
+ const entry = remote.replace(entryGlobalName + '@', '');
60
+ return { entry, name };
61
+ }
62
+ return {
63
+ ...remote,
64
+ name: remote.name ?? name,
65
+ };
66
+ }),
67
+ });
68
+ }
@@ -0,0 +1,29 @@
1
+ import { BuiltinPlugin } from './constructors';
2
+ /**
3
+ * Replaces targeted strings in files while bundling.
4
+ *
5
+ * @example
6
+ * // Basic usage
7
+ * ```js
8
+ * replacePlugin({
9
+ * 'process.env.NODE_ENV': JSON.stringify('production'),
10
+ * __buildDate__: () => JSON.stringify(new Date()),
11
+ * __buildVersion: 15
12
+ * })
13
+ * ```
14
+ * @example
15
+ * // With options
16
+ * ```js
17
+ * replacePlugin({
18
+ * 'process.env.NODE_ENV': JSON.stringify('production'),
19
+ * __buildDate__: () => JSON.stringify(new Date()),
20
+ * __buildVersion: 15
21
+ * }, {
22
+ * preventAssignment: false,
23
+ * })
24
+ * ```
25
+ *
26
+ */
27
+ export function replacePlugin(values = {}, options = {}) {
28
+ return new BuiltinPlugin('builtin:replace', { ...options, values });
29
+ }
@@ -0,0 +1,16 @@
1
+ import { BuiltinPlugin } from './constructors';
2
+ import { normalizedStringOrRegex } from '../utils/normalize-string-or-regex';
3
+ function normalizeEcmaTransformPluginConfig(config) {
4
+ if (!config) {
5
+ return undefined;
6
+ }
7
+ let normalizedConfig = {
8
+ ...config,
9
+ exclude: normalizedStringOrRegex(config.exclude),
10
+ include: normalizedStringOrRegex(config.include),
11
+ };
12
+ return normalizedConfig;
13
+ }
14
+ export function transformPlugin(config) {
15
+ return new BuiltinPlugin('builtin:transform', normalizeEcmaTransformPluginConfig(config));
16
+ }
@@ -0,0 +1,19 @@
1
+ import { BindingCallableBuiltinPlugin } from '../binding';
2
+ export function makeBuiltinPluginCallable(plugin) {
3
+ let callablePlugin = new BindingCallableBuiltinPlugin(bindingifyBuiltInPlugin(plugin));
4
+ const wrappedPlugin = plugin;
5
+ for (const key in callablePlugin) {
6
+ // @ts-expect-error
7
+ wrappedPlugin[key] = function (...args) {
8
+ // @ts-expect-error
9
+ return callablePlugin[key](...args);
10
+ };
11
+ }
12
+ return wrappedPlugin;
13
+ }
14
+ export function bindingifyBuiltInPlugin(plugin) {
15
+ return {
16
+ __name: plugin.name,
17
+ options: plugin._options,
18
+ };
19
+ }