rolldown 1.1.4 → 1.1.5

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 (35) hide show
  1. package/dist/cli.mjs +11 -8
  2. package/dist/config.d.mts +15 -2
  3. package/dist/config.mjs +2 -2
  4. package/dist/experimental-index.d.mts +4 -4
  5. package/dist/experimental-index.mjs +8 -8
  6. package/dist/filter-index.d.mts +1 -1
  7. package/dist/index.d.mts +3 -3
  8. package/dist/index.mjs +10 -4
  9. package/dist/parallel-plugin-worker.mjs +2 -2
  10. package/dist/parallel-plugin.d.mts +1 -1
  11. package/dist/parse-ast-index.d.mts +1 -1
  12. package/dist/parse-ast-index.mjs +2 -2
  13. package/dist/plugins-index.d.mts +3 -3
  14. package/dist/plugins-index.mjs +2 -2
  15. package/dist/shared/{binding-B1q9aYT-.d.mts → binding-D26QphWG.d.mts} +12 -0
  16. package/dist/shared/{binding-BmkJW3Wy.mjs → binding-TuFFIE_J.mjs} +26 -26
  17. package/dist/shared/{bindingify-input-options-BsDhfYrS.mjs → bindingify-input-options-XPJLJOD0.mjs} +11 -13
  18. package/dist/shared/{constructors-2i1T9YcF.d.mts → constructors-BbWPse2X.d.mts} +2 -2
  19. package/dist/shared/{constructors-CE6zZSUt.mjs → constructors-D_3i7dpX.mjs} +1 -1
  20. package/dist/shared/{define-config-BBz954-q.d.mts → define-config-BhJ90aEv.d.mts} +79 -2
  21. package/dist/shared/dist-DKbukT1H.mjs +154 -0
  22. package/dist/shared/{error-BlQ0-ek7.mjs → error-BHRSI0R7.mjs} +1 -1
  23. package/dist/shared/{load-config-FRmAU9xl.mjs → load-config-BL_FI6dc.mjs} +19 -2
  24. package/dist/shared/{logs-aMKUxRpj.mjs → logs-ZGEh6uhb.mjs} +6 -1
  25. package/dist/shared/{normalize-string-or-regex-BYkbbGqQ.mjs → normalize-string-or-regex-dnh67V_w.mjs} +2 -2
  26. package/dist/shared/{parse-DVMnkavl.mjs → parse-D4dtlfWy.mjs} +2 -2
  27. package/dist/shared/{prompt-B1Yc1NPt.mjs → prompt--dNycKSZ.mjs} +59 -17
  28. package/dist/shared/{resolve-tsconfig-CdIAR1Eb.mjs → resolve-tsconfig-DxqIJB3x.mjs} +2 -2
  29. package/dist/shared/{rolldown-tbHvKzVl.mjs → rolldown-ChpIlMRm.mjs} +1 -1
  30. package/dist/shared/{rolldown-build-aV0QeeTW.mjs → rolldown-build-CtPvmZgJ.mjs} +33 -13
  31. package/dist/shared/{transform-CEmFsvJW.d.mts → transform-BPrUvqEZ.d.mts} +1 -1
  32. package/dist/shared/{watch-DIhJ-T1s.mjs → watch-B1b0gmVh.mjs} +5 -5
  33. package/dist/utils-index.d.mts +3 -3
  34. package/dist/utils-index.mjs +8 -6
  35. package/package.json +21 -20
@@ -1,4 +1,4 @@
1
- import { a as makeBuiltinPluginCallable, n as BuiltinPlugin, t as normalizedStringOrRegex } from "./normalize-string-or-regex-BYkbbGqQ.mjs";
1
+ import { a as makeBuiltinPluginCallable, n as BuiltinPlugin, t as normalizedStringOrRegex } from "./normalize-string-or-regex-dnh67V_w.mjs";
2
2
  //#region src/builtin-plugin/constructors.ts
3
3
  function viteModulePreloadPolyfillPlugin(config) {
4
4
  return new BuiltinPlugin("builtin:vite-module-preload-polyfill", config);
@@ -1,5 +1,5 @@
1
1
  import { a as RolldownLog, i as RolldownError, n as LogLevelOption, o as RolldownLogWithString, r as LogOrStringHandler, t as LogLevel } from "./logging-BSNejiLS.mjs";
2
- import { A as ExternalMemoryStatus, N as JsxOptions, P as MinifyOptions$1, R as ParserOptions, U as TransformOptions$1, c as BindingHookResolveIdExtraArgs, d as BindingPluginContextResolveOptions, h as BindingTransformHookExtraArgs, k as BindingWatcherBundler, p as BindingRenderedChunk, t as BindingBuiltinPluginName, u as BindingMagicString, z as PreRenderedChunk } from "./binding-B1q9aYT-.mjs";
2
+ import { A as ExternalMemoryStatus, N as JsxOptions, P as MinifyOptions$1, R as ParserOptions, U as TransformOptions$1, c as BindingHookResolveIdExtraArgs, d as BindingPluginContextResolveOptions, h as BindingTransformHookExtraArgs, k as BindingWatcherBundler, p as BindingRenderedChunk, t as BindingBuiltinPluginName, u as BindingMagicString, z as PreRenderedChunk } from "./binding-D26QphWG.mjs";
3
3
  import { TopLevelFilterExpression } from "@rolldown/pluginutils";
4
4
  import { Program } from "@oxc-project/types";
5
5
 
@@ -420,6 +420,22 @@ interface OutputOptions {
420
420
  */
421
421
  sourcemapBaseUrl?: string;
422
422
  /**
423
+ * The pattern to use for sourcemaps created from entry points, or a function that is called per entry chunk with {@linkcode PreRenderedChunk} to return such a pattern.
424
+ *
425
+ * Patterns support the following placeholders:
426
+ * - `[format]`: The rendering format defined in the output options. The value is any of {@linkcode InternalModuleFormat}.
427
+ * - `[hash]`: A hash based only on the content of the final generated sourcemap. You can also set a specific hash length via e.g. `[hash:10]`. By default, it will create a base-64 hash. If you need a reduced character set, see {@linkcode hashCharacters | output.hashCharacters}.
428
+ * - `[chunkhash]`: The same hash as the one used for the corresponding generated chunk (if any).
429
+ * - `[name]`: The name of the corresponding chunk.
430
+ *
431
+ * Forward slashes (`/`) can be used to place files in sub-directories. This pattern will also be used for every file when setting the {@linkcode preserveModules | output.preserveModules} option.
432
+ *
433
+ * See also {@linkcode assetFileNames | output.assetFileNames}, {@linkcode chunkFileNames | output.chunkFileNames}.
434
+ *
435
+ * @default the corresponding chunk filename with `.map` appended
436
+ */
437
+ sourcemapFileNames?: string | ChunkFileNamesFunction;
438
+ /**
423
439
  * Whether to include [debug IDs](https://github.com/tc39/ecma426/blob/main/proposals/debug-id.md) in the sourcemap.
424
440
  *
425
441
  * When `true`, a unique debug ID will be emitted in source and sourcemaps which streamlines identifying sourcemaps across different builds.
@@ -1524,6 +1540,9 @@ interface ChecksOptions {
1524
1540
  * Annotations placed where they cannot annotate a call expression (e.g. before a non-call expression,
1525
1541
  * before a statement declaration, or between an identifier and `=` in a variable declarator) are
1526
1542
  * ignored by the parser. Matches Rollup's `INVALID_ANNOTATION` log code.
1543
+ *
1544
+ * By default, warnings are emitted only for local project files inside `cwd` and outside
1545
+ * `node_modules`. Set this option to `false` to disable the warning entirely.
1527
1546
  * @default true
1528
1547
  * */
1529
1548
  invalidAnnotation?: boolean;
@@ -1800,6 +1819,8 @@ interface NormalizedOutputOptions {
1800
1819
  dir: string | undefined;
1801
1820
  /** @see {@linkcode OutputOptions.entryFileNames | entryFileNames} */
1802
1821
  entryFileNames: string | ChunkFileNamesFunction;
1822
+ /** @see {@linkcode OutputOptions.sourcemapFileNames | sourcemapFileNames} */
1823
+ sourcemapFileNames: string | ChunkFileNamesFunction | undefined;
1803
1824
  /** @see {@linkcode OutputOptions.chunkFileNames | chunkFileNames} */
1804
1825
  chunkFileNames: string | ChunkFileNamesFunction;
1805
1826
  /** @see {@linkcode OutputOptions.assetFileNames | assetFileNames} */
@@ -2646,6 +2667,28 @@ type ModuleSideEffects = boolean | "no-treeshake" | null;
2646
2667
  type ModuleType = "js" | "jsx" | "ts" | "tsx" | "json" | "text" | "base64" | "dataurl" | "binary" | "empty" | (string & {});
2647
2668
  /** @category Plugin APIs */
2648
2669
  type ImportKind = BindingHookResolveIdExtraArgs["kind"];
2670
+ /**
2671
+ * Descriptive metadata a plugin can expose about itself.
2672
+ *
2673
+ * Set it via the {@linkcode Plugin.meta | meta} property of the plugin object.
2674
+ *
2675
+ * @category Plugin APIs
2676
+ */
2677
+ interface PluginMeta {
2678
+ /**
2679
+ * The name of the npm package the plugin ships in, e.g. `@vitejs/plugin-vue`.
2680
+ */
2681
+ packageName?: string;
2682
+ /**
2683
+ * The version of the npm package the plugin ships in, e.g. `5.0.0`. The
2684
+ * `version` field of that package's `package.json`.
2685
+ */
2686
+ version?: string;
2687
+ /**
2688
+ * A short, human-readable description of what the plugin does.
2689
+ */
2690
+ description?: string;
2691
+ }
2649
2692
  /** @category Plugin APIs */
2650
2693
  interface CustomPluginOptions {
2651
2694
  [plugin: string]: any;
@@ -2655,6 +2698,31 @@ interface ModuleOptions {
2655
2698
  moduleSideEffects: ModuleSideEffects;
2656
2699
  /** See [Custom module meta-data section](https://rolldown.rs/apis/plugin-api/inter-plugin-communication#custom-module-meta-data) for more details. */
2657
2700
  meta: CustomPluginOptions;
2701
+ /**
2702
+ * A short, human-readable description of the module.
2703
+ *
2704
+ * This is useful for virtual modules, whose ids (e.g.
2705
+ * `\0vite/modulepreload-polyfill.js`) do not convey their purpose on their own.
2706
+ *
2707
+ * @example
2708
+ * ```js
2709
+ * function polyfillPlugin() {
2710
+ * return {
2711
+ * name: 'vite:modulepreload-polyfill',
2712
+ * load: {
2713
+ * filter: { id: /^\0vite\/modulepreload-polyfill\.js$/ },
2714
+ * handler(id) {
2715
+ * return {
2716
+ * code: '',
2717
+ * description: 'A polyfill for `link` tag with `rel="modulepreload"`',
2718
+ * };
2719
+ * }
2720
+ * },
2721
+ * };
2722
+ * }
2723
+ * ```
2724
+ */
2725
+ description?: string;
2658
2726
  invalidate?: boolean;
2659
2727
  packageJsonPath?: string;
2660
2728
  }
@@ -3083,6 +3151,15 @@ interface OutputPlugin extends Partial<{ [K in keyof PluginHooks as K & OutputPl
3083
3151
  name: string;
3084
3152
  /** The version of the plugin, for use in inter-plugin communication scenarios. */
3085
3153
  version?: string;
3154
+ /**
3155
+ * Descriptive metadata about the plugin, such as the npm package it ships in.
3156
+ *
3157
+ * This does not affect bundling; it is informational and intended to be
3158
+ * surfaced by tooling that inspects a build. See {@linkcode PluginMeta}.
3159
+ *
3160
+ * @experimental
3161
+ */
3162
+ meta?: PluginMeta;
3086
3163
  }
3087
3164
  /**
3088
3165
  * The Plugin interface.
@@ -3898,4 +3975,4 @@ declare function defineConfig(config: RolldownOptions[]): RolldownOptions[];
3898
3975
  declare function defineConfig(config: RolldownOptionsFunction): RolldownOptionsFunction;
3899
3976
  declare function defineConfig(config: ConfigExport): ConfigExport;
3900
3977
  //#endregion
3901
- export { PluginContextMeta as $, RolldownPluginOption as A, CodeSplittingGroup as At, OutputBundle as B, PreRenderedAsset as Bt, ParallelPluginHooks as C, build as Ct, ResolveIdResult as D, BuiltinModuleTag as Dt, ResolveIdExtraOptions as E, AdvancedChunksOptions as Et, RUNTIME_MODULE_ID as F, GeneratedCodePreset as Ft, EmittedFile as G, OutputChunk as Gt, TransformPluginContext as H, PartialNull as Ht, VERSION as I, GlobalsFunction as It, PluginContext as J, RolldownOutput as Jt, EmittedPrebuiltChunk as K, RenderedChunk as Kt, BundleError as L, MinifyOptions as Lt, TransformResult as M, CodeSplittingOptions as Mt, withFilter as N, CommentsOptions as Nt, ResolvedId as O, ChunkFileNamesFunction as Ot, BuiltinPlugin as P, GeneratedCodeOptions as Pt, MinimalPluginContext as Q, SourcemapIgnoreListOption as Qt, ExistingRawSourceMap as R, ModuleFormat as Rt, ObjectHook as S, BuildOptions as St, Plugin as T, AdvancedChunksGroup as Tt, EmittedAsset as U, StringOrRegExp as Ut, TreeshakingOptions as V, MaybePromise as Vt, EmittedChunk as W, OutputAsset as Wt, DefineParallelPluginResult as X, freeExternalMemory as Xt, PluginContextResolveOptions as Y, SourceMap as Yt, defineParallelPlugin as Z, ModuleInfo as Zt, HookFilterExtension as _, RolldownWatcherEvent as _t, ChunkOptimizationOptions as a, RolldownFileStats as at, ModuleOptions as b, rolldown as bt, InputOption as c, NormalizedOutputOptions as ct, OptimizationOptions as d, ChecksOptions as dt, GeneralHookFilter as et, WatcherFileWatcherOptions as f, LoggingFunction as ft, FunctionPluginHooks as g, RolldownWatcher as gt, CustomPluginOptions as h, watch as ht, RolldownOptions as i, RolldownDirectoryEntry as it, SourceDescription as j, CodeSplittingNameFunction as jt, RolldownPlugin as k, ChunkingContext as kt, InputOptions as l, NormalizedInputOptions as lt, AsyncPluginHooks as m, RolldownMagicString as mt, RolldownOptionsFunction as n, ModuleTypeFilter as nt, ExternalOption as o, RolldownFsModule as ot, WatcherOptions as p, WarningHandlerWithDefault as pt, GetModuleInfo as q, RenderedModule as qt, defineConfig as r, BufferEncoding as rt, ExternalOptionFunction as s, InternalModuleFormat as st, ConfigExport as t, HookFilter as tt, ModuleTypes as u, TransformOptions as ut, ImportKind as v, RolldownWatcherWatcherEventMap as vt, PartialResolvedId as w, AddonFunction as wt, ModuleType as x, RolldownBuild as xt, LoadResult as y, WatchOptions as yt, SourceMapInput as z, OutputOptions as zt };
3978
+ export { MinimalPluginContext as $, SourcemapIgnoreListOption as $t, RolldownPlugin as A, ChunkingContext as At, SourceMapInput as B, OutputOptions as Bt, ParallelPluginHooks as C, BuildOptions as Ct, ResolveIdExtraOptions as D, AdvancedChunksOptions as Dt, PluginMeta as E, AdvancedChunksGroup as Et, BuiltinPlugin as F, GeneratedCodeOptions as Ft, EmittedChunk as G, OutputAsset as Gt, TreeshakingOptions as H, MaybePromise as Ht, RUNTIME_MODULE_ID as I, GeneratedCodePreset as It, GetModuleInfo as J, RenderedModule as Jt, EmittedFile as K, OutputChunk as Kt, VERSION as L, GlobalsFunction as Lt, SourceDescription as M, CodeSplittingNameFunction as Mt, TransformResult as N, CodeSplittingOptions as Nt, ResolveIdResult as O, BuiltinModuleTag as Ot, withFilter as P, CommentsOptions as Pt, defineParallelPlugin as Q, ModuleInfo as Qt, BundleError as R, MinifyOptions as Rt, ObjectHook as S, RolldownBuild as St, Plugin as T, AddonFunction as Tt, TransformPluginContext as U, PartialNull as Ut, OutputBundle as V, PreRenderedAsset as Vt, EmittedAsset as W, StringOrRegExp as Wt, PluginContextResolveOptions as X, SourceMap as Xt, PluginContext as Y, RolldownOutput as Yt, DefineParallelPluginResult as Z, freeExternalMemory as Zt, HookFilterExtension as _, RolldownWatcher as _t, ChunkOptimizationOptions as a, RolldownDirectoryEntry as at, ModuleOptions as b, WatchOptions as bt, InputOption as c, InternalModuleFormat as ct, OptimizationOptions as d, TransformOptions as dt, PluginContextMeta as et, WatcherFileWatcherOptions as f, ChecksOptions as ft, FunctionPluginHooks as g, watch as gt, CustomPluginOptions as h, RolldownMagicString as ht, RolldownOptions as i, BufferEncoding as it, RolldownPluginOption as j, CodeSplittingGroup as jt, ResolvedId as k, ChunkFileNamesFunction as kt, InputOptions as l, NormalizedOutputOptions as lt, AsyncPluginHooks as m, WarningHandlerWithDefault as mt, RolldownOptionsFunction as n, HookFilter as nt, ExternalOption as o, RolldownFileStats as ot, WatcherOptions as p, LoggingFunction as pt, EmittedPrebuiltChunk as q, RenderedChunk as qt, defineConfig as r, ModuleTypeFilter as rt, ExternalOptionFunction as s, RolldownFsModule as st, ConfigExport as t, GeneralHookFilter as tt, ModuleTypes as u, NormalizedInputOptions as ut, ImportKind as v, RolldownWatcherEvent as vt, PartialResolvedId as w, build as wt, ModuleType as x, rolldown as xt, LoadResult as y, RolldownWatcherWatcherEventMap as yt, ExistingRawSourceMap as z, ModuleFormat as zt };
@@ -0,0 +1,154 @@
1
+ import { Module } from "node:module";
2
+ import { MessageChannel } from "node:worker_threads";
3
+ import { fileURLToPath } from "node:url";
4
+ //#region ../../node_modules/.pnpm/fresh-import@0.2.1/node_modules/fresh-import/dist/index.js
5
+ const instanceId = Math.random().toString(36).slice(2);
6
+ const relativeImportRE = /^\.{1,2}(?:\/|\\)/;
7
+ function escapeRegExp(value) {
8
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
9
+ }
10
+ /**
11
+ * The tracking query name `fresh-import-<instance>`, where `<instance>` is a
12
+ * random value unique to this loaded module instance. Any two instances (even
13
+ * two copies of the same build loaded into the same process) get distinct
14
+ * names, so each hook only recognizes the imports it tagged itself.
15
+ */
16
+ function buildQueryName() {
17
+ return `fresh-import-${instanceId}`;
18
+ }
19
+ /**
20
+ * Build the regex that matches the tracking query `?<name>=<id>,<context>`
21
+ * (or the `&<name>=...` form).
22
+ */
23
+ function buildQueryRE(queryName) {
24
+ return new RegExp(`(?:\\?|&)${escapeRegExp(queryName)}=(\\d+),([^&]+)(?:&|$)`);
25
+ }
26
+ /**
27
+ * Build the tracking query `?<name>=<id>,<context>` that `collect` appends to
28
+ * the entry specifier. `id` cache-busts the import (a distinct URL forces a
29
+ * fresh evaluation) and `context` tags the import graph so the resolve hook can
30
+ * attribute resolved dependencies back to the originating collect.
31
+ */
32
+ function formatTrackingQuery(queryName, id, context) {
33
+ return `?${queryName}=${id},${context}`;
34
+ }
35
+ /**
36
+ * Shared body of the resolve hook for both the on-thread and off-thread
37
+ * importers. Given an already-resolved `result`, decides whether it is a tracked
38
+ * relative file dependency; if so, reports it via `onDependency` and tags the
39
+ * URL so the query propagates to its own dependencies.
40
+ *
41
+ * The sync/async difference between the two hooks lives entirely in the caller
42
+ * (which awaits `nextResolve` or not); this function performs no I/O. `result`
43
+ * is mutated in place and returned.
44
+ */
45
+ function trackResolved(specifier, context, result, queryName, queryRE, onDependency) {
46
+ const isRelativeImport = relativeImportRE.test(specifier);
47
+ if (result.format === "builtin" || !isRelativeImport) return result;
48
+ if (!context.parentURL || queryRE.test(result.url) || !result.url.startsWith("file:")) return result;
49
+ const m = queryRE.exec(context.parentURL);
50
+ if (m) {
51
+ const [, id, contextFile] = m;
52
+ onDependency(contextFile, result.url);
53
+ result.url = result.url.replace(/(\?)|$/, (_n, n1) => `?${queryName}=${id},${contextFile}${n1 === "?" ? "&" : ""}`);
54
+ }
55
+ return result;
56
+ }
57
+ var loader_default = "data:text/javascript,Math.random().toString(36).slice(2);%0Aconst relativeImportRE = /^\\.{1,2}(%3F:\\/|\\\\)/;%0Afunction escapeRegExp(value) {%0A%09return value.replace(/[.*+%3F^${}()|[\\]\\\\]/g, \"\\\\$&\");%0A}%0A/**%0A* Build the regex that matches the tracking query `%3F<name>=<id>,<context>`%0A* (or the `&<name>=...` form).%0A*/%0Afunction buildQueryRE(queryName) {%0A%09return new RegExp(`(%3F:\\\\%3F|&)${escapeRegExp(queryName)}=(\\\\d+),([^&]+)(%3F:&|$)`);%0A}%0A/**%0A* Shared body of the resolve hook for both the on-thread and off-thread%0A* importers. Given an already-resolved `result`, decides whether it is a tracked%0A* relative file dependency; if so, reports it via `onDependency` and tags the%0A* URL so the query propagates to its own dependencies.%0A*%0A* The sync/async difference between the two hooks lives entirely in the caller%0A* (which awaits `nextResolve` or not); this function performs no I/O. `result`%0A* is mutated in place and returned.%0A*/%0Afunction trackResolved(specifier, context, result, queryName, queryRE, onDependency) {%0A%09const isRelativeImport = relativeImportRE.test(specifier);%0A%09if (result.format === \"builtin\" || !isRelativeImport) return result;%0A%09if (!context.parentURL || queryRE.test(result.url) || !result.url.startsWith(\"file:\")) return result;%0A%09const m = queryRE.exec(context.parentURL);%0A%09if (m) {%0A%09%09const [, id, contextFile] = m;%0A%09%09onDependency(contextFile, result.url);%0A%09%09result.url = result.url.replace(/(\\%3F)|$/, (_n, n1) => `%3F${queryName}=${id},${contextFile}${n1 === \"%3F\" %3F \"&\" : \"\"}`);%0A%09}%0A%09return result;%0A}%0A//%23endregion%0A//%23region src/off-thread/loader.ts%0Alet port;%0Alet queryName;%0Alet queryRE;%0Aconst initialize = async (data) => {%0A%09port = data.port;%0A%09queryName = data.queryName;%0A%09queryRE = buildQueryRE(queryName);%0A};%0Aconst resolve = async (specifier, context, nextResolve) => {%0A%09return trackResolved(specifier, context, await nextResolve(specifier, context), queryName, queryRE, (ctx, url) => {%0A%09%09port.postMessage({%0A%09%09%09context: ctx,%0A%09%09%09url%0A%09%09});%0A%09});%0A};%0A//%23endregion%0Aexport { initialize, resolve };%0A";
58
+ let nextId$1 = 0;
59
+ /**
60
+ * Off-thread importer: registers an ESM loader in a worker thread via
61
+ * `Module.register` and receives tracked dependencies over a `MessagePort`.
62
+ * Used on Node versions without `Module.registerHooks`.
63
+ */
64
+ function createOffThreadImporter() {
65
+ const queryName = buildQueryName();
66
+ const { port1, port2 } = new MessageChannel();
67
+ Module.register(loader_default, {
68
+ data: {
69
+ port: port2,
70
+ queryName
71
+ },
72
+ transferList: [port2]
73
+ });
74
+ port1.unref();
75
+ return { async collect(specifier) {
76
+ const id = nextId$1++;
77
+ const depsList = /* @__PURE__ */ new Set();
78
+ const onMessage = (e) => {
79
+ if (e.context === specifier) depsList.add(e.url);
80
+ };
81
+ port1.on("message", onMessage);
82
+ port1.unref();
83
+ try {
84
+ const result = await import(specifier + formatTrackingQuery(queryName, id, specifier));
85
+ await new Promise((resolve) => setImmediate(resolve));
86
+ return {
87
+ result,
88
+ dependencies: [...depsList].filter((url) => url.startsWith("file:")).map((url) => fileURLToPath(url))
89
+ };
90
+ } finally {
91
+ port1.off("message", onMessage);
92
+ }
93
+ } };
94
+ }
95
+ let nextId = 0;
96
+ /**
97
+ * On-thread importer: registers synchronous resolution hooks via
98
+ * `Module.registerHooks` (Node 22.15+/23.5+).
99
+ */
100
+ function createOnThreadImporter() {
101
+ const registry = /* @__PURE__ */ new Map();
102
+ const queryName = buildQueryName();
103
+ const queryRE = buildQueryRE(queryName);
104
+ const resolve = (specifier, context, nextResolve) => {
105
+ return trackResolved(specifier, context, nextResolve(specifier, context), queryName, queryRE, (ctx, url) => {
106
+ registry.get(ctx)?.add(url);
107
+ });
108
+ };
109
+ Module.registerHooks({ resolve });
110
+ return { async collect(specifier) {
111
+ const id = nextId++;
112
+ const depsList = /* @__PURE__ */ new Set();
113
+ registry.set(specifier, depsList);
114
+ try {
115
+ return {
116
+ result: await import(specifier + formatTrackingQuery(queryName, id, specifier)),
117
+ dependencies: [...depsList].filter((url) => url.startsWith("file:")).map((url) => fileURLToPath(url))
118
+ };
119
+ } finally {
120
+ registry.delete(specifier);
121
+ }
122
+ } };
123
+ }
124
+ /**
125
+ * Create the importer best suited to the current runtime, or `undefined` if it
126
+ * provides neither module-hook API.
127
+ */
128
+ function createImporter() {
129
+ if (Module.registerHooks) return createOnThreadImporter();
130
+ if (Module.register) return createOffThreadImporter();
131
+ }
132
+ let importer;
133
+ let initialized = false;
134
+ /**
135
+ * Import an ESM entry in its own fresh module graph (separate from Node's module
136
+ * cache and from other concurrent imports) and report the dependency files it
137
+ * pulled in.
138
+ *
139
+ * Each call re-evaluates the entry in a fresh graph; concurrent calls stay
140
+ * isolated from one another. Only statically-imported relative dependencies are
141
+ * tracked, not dynamic imports.
142
+ *
143
+ * Returns `undefined` on runtimes that provide neither `Module.registerHooks`
144
+ * nor `Module.register`.
145
+ */
146
+ function freshImport(specifier) {
147
+ if (!initialized) {
148
+ importer = createImporter();
149
+ initialized = true;
150
+ }
151
+ return importer?.collect(specifier);
152
+ }
153
+ //#endregion
154
+ export { freshImport };
@@ -1,4 +1,4 @@
1
- import { t as require_binding } from "./binding-BmkJW3Wy.mjs";
1
+ import { t as require_binding } from "./binding-TuFFIE_J.mjs";
2
2
  //#region src/types/sourcemap.ts
3
3
  function bindingifySourcemap(map) {
4
4
  if (map == null) return;
@@ -1,4 +1,4 @@
1
- import { t as rolldown } from "./rolldown-tbHvKzVl.mjs";
1
+ import { t as rolldown } from "./rolldown-ChpIlMRm.mjs";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { readdir } from "node:fs/promises";
@@ -98,21 +98,38 @@ function tryStatSync(file) {
98
98
  return fs.statSync(file, { throwIfNoEntry: false });
99
99
  } catch {}
100
100
  }
101
+ async function loadNativeConfig(resolvedPath) {
102
+ const url = pathToFileURL(resolvedPath).href;
103
+ const { freshImport } = await import("./dist-DKbukT1H.mjs");
104
+ const freshImported = freshImport(url);
105
+ if (freshImported) {
106
+ const { result } = await freshImported;
107
+ return result.default;
108
+ }
109
+ return (await import(url + "?t=" + Date.now())).default;
110
+ }
101
111
  /**
102
112
  * Load config from a file in a way that Rolldown does.
103
113
  *
104
114
  * @param configPath The path to the config file. If empty, it will look for `rolldown.config` with supported extensions in the current working directory.
115
+ * @param options Loading options. `configLoader` selects `'bundle'` (default) or `'native'`.
105
116
  * @returns The loaded config export
106
117
  *
107
118
  * @category Config
108
119
  */
109
- async function loadConfig(configPath) {
120
+ async function loadConfig(configPath, options = {}) {
121
+ const configLoader = options.configLoader ?? "bundle";
110
122
  const ext = path.extname(configPath = configPath || await findConfigFileNameInCwd());
111
123
  try {
124
+ if (configLoader === "native") return await loadNativeConfig(path.resolve(configPath));
112
125
  if (SUPPORTED_JS_CONFIG_FORMATS.includes(ext) || process.env.NODE_OPTIONS?.includes("--import=tsx") && SUPPORTED_TS_CONFIG_FORMATS.includes(ext)) return (await import(pathToFileURL(configPath).href)).default;
113
126
  else if (SUPPORTED_TS_CONFIG_FORMATS.includes(ext)) return await loadTsConfig(path.resolve(configPath));
114
127
  else throw new Error(`Unsupported config format. Expected: \`${SUPPORTED_CONFIG_FORMATS.join(",")}\` but got \`${ext}\``);
115
128
  } catch (err) {
129
+ if (configLoader === "native") {
130
+ const tsHint = SUPPORTED_TS_CONFIG_FORMATS.includes(ext) && !process.features.typescript ? " This runtime does not natively support TypeScript config files." : "";
131
+ throw new Error(`Failed to load the config file "${configPath}" using the "native" config loader.${tsHint} Try "--configLoader bundle", or register a loader such as "--import tsx".`, { cause: err });
132
+ }
116
133
  throw new Error("Error happened while loading config.", { cause: err });
117
134
  }
118
135
  }
@@ -97,7 +97,12 @@ function locate(source, search, options) {
97
97
  }
98
98
  //#endregion
99
99
  //#region src/log/logs.ts
100
- const INVALID_LOG_POSITION = "INVALID_LOG_POSITION", PLUGIN_ERROR = "PLUGIN_ERROR", INPUT_HOOK_IN_OUTPUT_PLUGIN = "INPUT_HOOK_IN_OUTPUT_PLUGIN", CYCLE_LOADING = "CYCLE_LOADING", MULTIPLE_WATCHER_OPTION = "MULTIPLE_WATCHER_OPTION", PARSE_ERROR = "PARSE_ERROR";
100
+ const INVALID_LOG_POSITION = "INVALID_LOG_POSITION";
101
+ const PLUGIN_ERROR = "PLUGIN_ERROR";
102
+ const INPUT_HOOK_IN_OUTPUT_PLUGIN = "INPUT_HOOK_IN_OUTPUT_PLUGIN";
103
+ const CYCLE_LOADING = "CYCLE_LOADING";
104
+ const MULTIPLE_WATCHER_OPTION = "MULTIPLE_WATCHER_OPTION";
105
+ const PARSE_ERROR = "PARSE_ERROR";
101
106
  function logParseError(message, id, pos) {
102
107
  return {
103
108
  code: PARSE_ERROR,
@@ -1,5 +1,5 @@
1
- import { n as __toESM, t as require_binding } from "./binding-BmkJW3Wy.mjs";
2
- import { c as logPluginError, n as error } from "./logs-aMKUxRpj.mjs";
1
+ import { n as __toESM, t as require_binding } from "./binding-TuFFIE_J.mjs";
2
+ import { c as logPluginError, n as error } from "./logs-ZGEh6uhb.mjs";
3
3
  //#region src/builtin-plugin/utils.ts
4
4
  var import_binding = /* @__PURE__ */ __toESM(require_binding(), 1);
5
5
  var BuiltinPlugin = class {
@@ -1,5 +1,5 @@
1
- import { n as __toESM, t as require_binding } from "./binding-BmkJW3Wy.mjs";
2
- //#region ../../node_modules/.pnpm/oxc-parser@0.138.0/node_modules/oxc-parser/src-js/wrap.js
1
+ import { n as __toESM, t as require_binding } from "./binding-TuFFIE_J.mjs";
2
+ //#region ../../node_modules/.pnpm/oxc-parser@0.139.0/node_modules/oxc-parser/src-js/wrap.js
3
3
  var import_binding = /* @__PURE__ */ __toESM(require_binding(), 1);
4
4
  function wrap(result) {
5
5
  let program, module, comments, errors;
@@ -204,7 +204,11 @@ function A$1(t, u = {}) {
204
204
  }
205
205
  return e;
206
206
  }
207
- const m = 10, L$1 = (t = 0) => (u) => `\x1B[${u + t}m`, N = (t = 0) => (u) => `\x1B[${38 + t};5;${u}m`, I = (t = 0) => (u, F, e) => `\x1B[${38 + t};2;${u};${F};${e}m`, r = {
207
+ const m = 10;
208
+ const L$1 = (t = 0) => (u) => `\x1B[${u + t}m`;
209
+ const N = (t = 0) => (u) => `\x1B[${38 + t};5;${u}m`;
210
+ const I = (t = 0) => (u, F, e) => `\x1B[${38 + t};2;${u};${F};${e}m`;
211
+ const r = {
208
212
  modifier: {
209
213
  reset: [0, 0],
210
214
  bold: [1, 22],
@@ -258,7 +262,8 @@ const m = 10, L$1 = (t = 0) => (u) => `\x1B[${u + t}m`, N = (t = 0) => (u) => `\
258
262
  }
259
263
  };
260
264
  Object.keys(r.modifier);
261
- const tD = Object.keys(r.color), eD = Object.keys(r.bgColor);
265
+ const tD = Object.keys(r.color);
266
+ const eD = Object.keys(r.bgColor);
262
267
  [...tD, ...eD];
263
268
  function sD() {
264
269
  const t = /* @__PURE__ */ new Map();
@@ -331,7 +336,18 @@ function sD() {
331
336
  }
332
337
  }), r;
333
338
  }
334
- const iD = sD(), v = /* @__PURE__ */ new Set(["\x1B", "›"]), CD = 39, w$1 = "\x07", W$1 = "[", rD = "]", R = "m", y = `${rD}8;;`, V$1 = (t) => `${v.values().next().value}${W$1}${t}${R}`, z = (t) => `${v.values().next().value}${y}${t}${w$1}`, ED = (t) => t.split(" ").map((u) => A$1(u)), _ = (t, u, F) => {
339
+ const iD = sD();
340
+ const v = /* @__PURE__ */ new Set(["\x1B", "›"]);
341
+ const CD = 39;
342
+ const w$1 = "\x07";
343
+ const W$1 = "[";
344
+ const rD = "]";
345
+ const R = "m";
346
+ const y = `${rD}8;;`;
347
+ const V$1 = (t) => `${v.values().next().value}${W$1}${t}${R}`;
348
+ const z = (t) => `${v.values().next().value}${y}${t}${w$1}`;
349
+ const ED = (t) => t.split(" ").map((u) => A$1(u));
350
+ const _ = (t, u, F) => {
335
351
  const e = [...u];
336
352
  let s = false, i = false, D = A$1(T$1(t[t.length - 1]));
337
353
  for (const [C, o] of e.entries()) {
@@ -343,12 +359,14 @@ const iD = sD(), v = /* @__PURE__ */ new Set(["\x1B", "›"]), CD = 39, w$1 = "\x
343
359
  D += E, D === F && C < e.length - 1 && (t.push(""), D = 0);
344
360
  }
345
361
  !D && t[t.length - 1].length > 0 && t.length > 1 && (t[t.length - 2] += t.pop());
346
- }, nD = (t) => {
362
+ };
363
+ const nD = (t) => {
347
364
  const u = t.split(" ");
348
365
  let F = u.length;
349
366
  for (; F > 0 && !(A$1(u[F - 1]) > 0);) F--;
350
367
  return F === u.length ? t : u.slice(0, F).join(" ") + u.slice(F).join("");
351
- }, oD = (t, u, F = {}) => {
368
+ };
369
+ const oD = (t, u, F = {}) => {
352
370
  if (F.trim !== false && t.trim() === "") return "";
353
371
  let e = "", s, i;
354
372
  const D = ED(t);
@@ -436,12 +454,14 @@ function d$1(t, u) {
436
454
  const F = t;
437
455
  F.isTTY && F.setRawMode(u);
438
456
  }
439
- var AD = Object.defineProperty, pD = (t, u, F) => u in t ? AD(t, u, {
457
+ var AD = Object.defineProperty;
458
+ var pD = (t, u, F) => u in t ? AD(t, u, {
440
459
  enumerable: true,
441
460
  configurable: true,
442
461
  writable: true,
443
462
  value: F
444
- }) : t[u] = F, h = (t, u, F) => (pD(t, typeof u != "symbol" ? u + "" : u, F), F);
463
+ }) : t[u] = F;
464
+ var h = (t, u, F) => (pD(t, typeof u != "symbol" ? u + "" : u, F), F);
445
465
  var x = class {
446
466
  constructor(u, F = true) {
447
467
  h(this, "input"), h(this, "output"), h(this, "_abortSignal"), h(this, "rl"), h(this, "opts"), h(this, "_render"), h(this, "_track", false), h(this, "_prevFrame", ""), h(this, "_subscribers", /* @__PURE__ */ new Map()), h(this, "_cursor", 0), h(this, "state", "initial"), h(this, "error", ""), h(this, "value");
@@ -562,12 +582,14 @@ var fD = class extends x {
562
582
  });
563
583
  }
564
584
  };
565
- var bD = Object.defineProperty, mD = (t, u, F) => u in t ? bD(t, u, {
585
+ var bD = Object.defineProperty;
586
+ var mD = (t, u, F) => u in t ? bD(t, u, {
566
587
  enumerable: true,
567
588
  configurable: true,
568
589
  writable: true,
569
590
  value: F
570
- }) : t[u] = F, Y = (t, u, F) => (mD(t, typeof u != "symbol" ? u + "" : u, F), F);
591
+ }) : t[u] = F;
592
+ var Y = (t, u, F) => (mD(t, typeof u != "symbol" ? u + "" : u, F), F);
571
593
  let wD = class extends x {
572
594
  constructor(u) {
573
595
  super(u, false), Y(this, "options"), Y(this, "cursor", 0), this.options = u.options, this.value = [...u.initialValues ?? []], this.cursor = Math.max(this.options.findIndex(({ value: F }) => F === u.cursorAt), 0), this.on("key", (F) => {
@@ -600,12 +622,14 @@ let wD = class extends x {
600
622
  this.value = u ? this.value.filter((F) => F !== this._value) : [...this.value, this._value];
601
623
  }
602
624
  };
603
- var SD = Object.defineProperty, $D = (t, u, F) => u in t ? SD(t, u, {
625
+ var SD = Object.defineProperty;
626
+ var $D = (t, u, F) => u in t ? SD(t, u, {
604
627
  enumerable: true,
605
628
  configurable: true,
606
629
  writable: true,
607
630
  value: F
608
- }) : t[u] = F, q = (t, u, F) => ($D(t, typeof u != "symbol" ? u + "" : u, F), F);
631
+ }) : t[u] = F;
632
+ var q = (t, u, F) => ($D(t, typeof u != "symbol" ? u + "" : u, F), F);
609
633
  var jD = class extends x {
610
634
  constructor(u) {
611
635
  super(u, false), q(this, "options"), q(this, "cursor", 0), this.options = u.options, this.cursor = this.options.findIndex(({ value: F }) => F === u.initialValue), this.cursor === -1 && (this.cursor = 0), this.changeValue(), this.on("cursor", (F) => {
@@ -648,7 +672,20 @@ var PD = class extends x {
648
672
  function ce() {
649
673
  return g$1.platform !== "win32" ? g$1.env.TERM !== "linux" : !!g$1.env.CI || !!g$1.env.WT_SESSION || !!g$1.env.TERMINUS_SUBLIME || g$1.env.ConEmuTask === "{cmd::Cmder}" || g$1.env.TERM_PROGRAM === "Terminus-Sublime" || g$1.env.TERM_PROGRAM === "vscode" || g$1.env.TERM === "xterm-256color" || g$1.env.TERM === "alacritty" || g$1.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
650
674
  }
651
- const V = ce(), u = (t, n) => V ? t : n, le = u("❯", ">"), L = u("■", "x"), W = u("▲", "x"), C = u("✔", "√"), o = u(""), d = u(""), k = u("●", ">"), P = u("○", " "), A = u("◻", "[•]"), T = u("◼", "[+]"), F = u("◻", "[ ]"), w = (t) => {
675
+ const V = ce();
676
+ const u = (t, n) => V ? t : n;
677
+ const le = u("❯", ">");
678
+ const L = u("■", "x");
679
+ const W = u("▲", "x");
680
+ const C = u("✔", "√");
681
+ const o = u("");
682
+ const d = u("");
683
+ const k = u("●", ">");
684
+ const P = u("○", " ");
685
+ const A = u("◻", "[•]");
686
+ const T = u("◼", "[+]");
687
+ const F = u("◻", "[ ]");
688
+ const w = (t) => {
652
689
  switch (t) {
653
690
  case "initial":
654
691
  case "active": return e.cyan(le);
@@ -656,7 +693,8 @@ const V = ce(), u = (t, n) => V ? t : n, le = u("❯", ">"), L = u("■", "x"),
656
693
  case "error": return e.yellow(W);
657
694
  case "submit": return e.green(C);
658
695
  }
659
- }, B = (t) => {
696
+ };
697
+ const B = (t) => {
660
698
  const { cursor: n, options: s, style: r } = t, i = t.maxItems ?? Number.POSITIVE_INFINITY, a = Math.max(process.stdout.rows - 4, 0), c = Math.min(a, Math.max(i, 5));
661
699
  let l = 0;
662
700
  n >= l + c - 3 ? l = Math.max(Math.min(n - c + 3, s.length - c), 0) : n < l + 2 && (l = Math.max(n - 2, 0));
@@ -665,7 +703,8 @@ const V = ce(), u = (t, n) => V ? t : n, le = u("❯", ">"), L = u("■", "x"),
665
703
  const j = v === 0 && $, E = v === x.length - 1 && p;
666
704
  return j || E ? e.dim("...") : r(M, v + l === n);
667
705
  });
668
- }, he = (t) => new PD({
706
+ };
707
+ const he = (t) => new PD({
669
708
  validate: t.validate,
670
709
  placeholder: t.placeholder,
671
710
  defaultValue: t.defaultValue,
@@ -687,7 +726,8 @@ ${e.cyan(d)}
687
726
  `;
688
727
  }
689
728
  }
690
- }).prompt(), ye = (t) => {
729
+ }).prompt();
730
+ const ye = (t) => {
691
731
  const n = t.active ?? "Yes", s = t.inactive ?? "No";
692
732
  return new fD({
693
733
  active: n,
@@ -707,7 +747,8 @@ ${e.cyan(d)}
707
747
  }
708
748
  }
709
749
  }).prompt();
710
- }, ve = (t) => {
750
+ };
751
+ const ve = (t) => {
711
752
  const n = (s, r) => {
712
753
  const i = s.label ?? String(s.value);
713
754
  switch (r) {
@@ -740,7 +781,8 @@ ${e.cyan(d)}
740
781
  }
741
782
  }
742
783
  }).prompt();
743
- }, fe = (t) => {
784
+ };
785
+ const fe = (t) => {
744
786
  const n = (s, r) => {
745
787
  const i = s.label ?? String(s.value);
746
788
  return r === "active" ? `${e.cyan(A)} ${i} ${s.hint ? e.dim(`(${s.hint})`) : ""}` : r === "selected" ? `${e.green(T)} ${e.dim(i)}` : r === "cancelled" ? `${e.strikethrough(e.dim(i))}` : r === "active-selected" ? `${e.green(T)} ${i} ${s.hint ? e.dim(`(${s.hint})`) : ""}` : r === "submitted" ? `${e.dim(i)}` : `${e.dim(F)} ${e.dim(i)}`;
@@ -1,5 +1,5 @@
1
- import { n as __toESM, t as require_binding } from "./binding-BmkJW3Wy.mjs";
2
- import { a as bindingifySourcemap, n as normalizeBindingError } from "./error-BlQ0-ek7.mjs";
1
+ import { n as __toESM, t as require_binding } from "./binding-TuFFIE_J.mjs";
2
+ import { a as bindingifySourcemap, n as normalizeBindingError } from "./error-BHRSI0R7.mjs";
3
3
  //#region src/utils/minify.ts
4
4
  var import_binding = /* @__PURE__ */ __toESM(require_binding(), 1);
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { c as validateOption, t as RolldownBuild, u as PluginDriver } from "./rolldown-build-aV0QeeTW.mjs";
1
+ import { c as validateOption, t as RolldownBuild, u as PluginDriver } from "./rolldown-build-CtPvmZgJ.mjs";
2
2
  //#region src/api/rolldown/index.ts
3
3
  /**
4
4
  * The API compatible with Rollup's `rollup` function.