rolldown 0.13.2-snapshot-ea56d8d-20241010003429 → 0.13.2-snapshot-e65437c-20241011073722

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/dist/cjs/cli.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  const { __export, __toESM } = require("../shared/chunk-JoMxl5V2.cjs");
4
- const { LogLevelOptionSchema, LogLevelSchema, LogLevelWithErrorSchema, RollupLogSchema, RollupLogWithStringSchema, arraify, description, rolldown, version } = require("../shared/src_index-cDpxiTWS.cjs");
4
+ const { LogLevelOptionSchema, LogLevelSchema, LogLevelWithErrorSchema, RollupLogSchema, RollupLogWithStringSchema, arraify, description, rolldown, version } = require("../shared/src_index-tbUfWh5c.cjs");
5
5
  const { createConsola } = require("../shared/consola.36c0034f-HcmWcfPe.cjs");
6
6
  const { default: nodePath } = __toESM(require("node:path"));
7
7
  const { ZodFirstPartyTypeKind, ZodFirstPartyTypeKind: ZodFirstPartyTypeKind$1, ZodFirstPartyTypeKind: ZodFirstPartyTypeKind$2, z, z: z$1, z: z$2, z: z$3 } = __toESM(require("zod"));
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  const { __toESM } = require("../shared/chunk-JoMxl5V2.cjs");
4
- const { aliasPlugin, buildImportAnalysisPlugin, composeJsPlugins, dynamicImportVarsPlugin, experimental_scan, importGlobPlugin, jsonPlugin, loadFallbackPlugin, manifestPlugin, modulePreloadPolyfillPlugin, replacePlugin, require_binding, transformPlugin, wasmFallbackPlugin, wasmHelperPlugin } = require("../shared/src_index-cDpxiTWS.cjs");
4
+ const { aliasPlugin, buildImportAnalysisPlugin, composeJsPlugins, dynamicImportVarsPlugin, experimental_scan, importGlobPlugin, jsonPlugin, loadFallbackPlugin, manifestPlugin, modulePreloadPolyfillPlugin, replacePlugin, require_binding, transformPlugin, wasmFallbackPlugin, wasmHelperPlugin } = require("../shared/src_index-tbUfWh5c.cjs");
5
5
  const { pathToFileURL } = __toESM(require("node:url"));
6
6
 
7
7
  //#region src/plugin/parallel-plugin.ts
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- const { VERSION, defineConfig, rolldown } = require("../shared/src_index-cDpxiTWS.cjs");
3
+ const { VERSION, defineConfig, rolldown } = require("../shared/src_index-tbUfWh5c.cjs");
4
4
 
5
5
  Object.defineProperty(exports, '__esModule', { value: true });
6
6
  exports.VERSION = VERSION;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  const { __toESM } = require("../shared/chunk-JoMxl5V2.cjs");
4
- const { PluginContextData, bindingifyPlugin, require_binding } = require("../shared/src_index-cDpxiTWS.cjs");
4
+ const { PluginContextData, bindingifyPlugin, require_binding } = require("../shared/src_index-tbUfWh5c.cjs");
5
5
  const { parentPort, workerData } = __toESM(require("node:worker_threads"));
6
6
 
7
7
  //#region src/parallel-plugin-worker.ts
package/dist/esm/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import __node_module__ from 'node:module';
2
2
  const require = __node_module__.createRequire(import.meta.url)
3
- import { LogLevelOptionSchema, LogLevelSchema, LogLevelWithErrorSchema, RollupLogSchema, RollupLogWithStringSchema, __export, arraify, description, rolldown, version } from "../shared/src_index-oEOW7fvj.mjs";
3
+ import { LogLevelOptionSchema, LogLevelSchema, LogLevelWithErrorSchema, RollupLogSchema, RollupLogWithStringSchema, __export, arraify, description, rolldown, version } from "../shared/src_index-yXEZE2lt.mjs";
4
4
  import { createConsola } from "../shared/consola.36c0034f-Xyw7SC_7.mjs";
5
5
  import { default as nodePath } from "node:path";
6
6
  import { ZodFirstPartyTypeKind, ZodFirstPartyTypeKind as ZodFirstPartyTypeKind$1, ZodFirstPartyTypeKind as ZodFirstPartyTypeKind$2, z, z as z$1, z as z$2, z as z$3 } from "zod";
@@ -1,6 +1,6 @@
1
1
  import __node_module__ from 'node:module';
2
2
  const require = __node_module__.createRequire(import.meta.url)
3
- import { __toESM, aliasPlugin, buildImportAnalysisPlugin, composeJsPlugins, dynamicImportVarsPlugin, experimental_scan, importGlobPlugin, jsonPlugin, loadFallbackPlugin, manifestPlugin, modulePreloadPolyfillPlugin, replacePlugin, require_binding, transformPlugin, wasmFallbackPlugin, wasmHelperPlugin } from "../shared/src_index-oEOW7fvj.mjs";
3
+ import { __toESM, aliasPlugin, buildImportAnalysisPlugin, composeJsPlugins, dynamicImportVarsPlugin, experimental_scan, importGlobPlugin, jsonPlugin, loadFallbackPlugin, manifestPlugin, modulePreloadPolyfillPlugin, replacePlugin, require_binding, transformPlugin, wasmFallbackPlugin, wasmHelperPlugin } from "../shared/src_index-yXEZE2lt.mjs";
4
4
  import { pathToFileURL } from "node:url";
5
5
 
6
6
  //#region src/plugin/parallel-plugin.ts
@@ -1,5 +1,5 @@
1
1
  import __node_module__ from 'node:module';
2
2
  const require = __node_module__.createRequire(import.meta.url)
3
- import { VERSION, defineConfig, rolldown } from "../shared/src_index-oEOW7fvj.mjs";
3
+ import { VERSION, defineConfig, rolldown } from "../shared/src_index-yXEZE2lt.mjs";
4
4
 
5
5
  export { VERSION, defineConfig, rolldown };
@@ -1,6 +1,6 @@
1
1
  import __node_module__ from 'node:module';
2
2
  const require = __node_module__.createRequire(import.meta.url)
3
- import { PluginContextData, __toESM, bindingifyPlugin, require_binding } from "../shared/src_index-oEOW7fvj.mjs";
3
+ import { PluginContextData, __toESM, bindingifyPlugin, require_binding } from "../shared/src_index-yXEZE2lt.mjs";
4
4
  import { parentPort, workerData } from "node:worker_threads";
5
5
 
6
6
  //#region src/parallel-plugin-worker.ts
@@ -147,20 +147,21 @@ function __napi_rs_initialize_modules(__napiInstance) {
147
147
  __napiInstance.exports['__napi_register__BindingModuleInfo_struct_62']?.()
148
148
  __napiInstance.exports['__napi_register__BindingModuleInfo_impl_64']?.()
149
149
  __napiInstance.exports['__napi_register__BindingOutputAsset_struct_65']?.()
150
- __napiInstance.exports['__napi_register__BindingOutputAsset_impl_71']?.()
150
+ __napiInstance.exports['__napi_register__BindingOutputAsset_impl_70']?.()
151
+ __napiInstance.exports['__napi_register__JsOutputAsset_struct_71']?.()
151
152
  __napiInstance.exports['__napi_register__BindingOutputChunk_struct_72']?.()
152
- __napiInstance.exports['__napi_register__BindingOutputChunk_impl_90']?.()
153
- __napiInstance.exports['__napi_register__BindingOutputs_struct_91']?.()
154
- __napiInstance.exports['__napi_register__BindingOutputs_impl_95']?.()
155
- __napiInstance.exports['__napi_register__FinalBindingOutputs_struct_96']?.()
156
- __napiInstance.exports['__napi_register__FinalBindingOutputs_impl_99']?.()
157
- __napiInstance.exports['__napi_register__PreRenderedChunk_struct_100']?.()
158
- __napiInstance.exports['__napi_register__RenderedChunk_struct_101']?.()
159
- __napiInstance.exports['__napi_register__BindingRenderedModule_struct_102']?.()
160
- __napiInstance.exports['__napi_register__AliasItem_struct_103']?.()
161
- __napiInstance.exports['__napi_register__ExtensionAliasItem_struct_104']?.()
162
- __napiInstance.exports['__napi_register__BindingSourcemap_struct_105']?.()
163
- __napiInstance.exports['__napi_register__BindingJsonSourcemap_struct_106']?.()
153
+ __napiInstance.exports['__napi_register__BindingOutputChunk_impl_87']?.()
154
+ __napiInstance.exports['__napi_register__JsOutputChunk_struct_88']?.()
155
+ __napiInstance.exports['__napi_register__BindingOutputs_struct_89']?.()
156
+ __napiInstance.exports['__napi_register__BindingOutputs_impl_92']?.()
157
+ __napiInstance.exports['__napi_register__JsChangedOutputs_struct_93']?.()
158
+ __napiInstance.exports['__napi_register__PreRenderedChunk_struct_94']?.()
159
+ __napiInstance.exports['__napi_register__RenderedChunk_struct_95']?.()
160
+ __napiInstance.exports['__napi_register__BindingRenderedModule_struct_96']?.()
161
+ __napiInstance.exports['__napi_register__AliasItem_struct_97']?.()
162
+ __napiInstance.exports['__napi_register__ExtensionAliasItem_struct_98']?.()
163
+ __napiInstance.exports['__napi_register__BindingSourcemap_struct_99']?.()
164
+ __napiInstance.exports['__napi_register__BindingJsonSourcemap_struct_100']?.()
164
165
  }
165
166
  module.exports.BindingLog = __napiModule.exports.BindingLog
166
167
  module.exports.BindingModuleInfo = __napiModule.exports.BindingModuleInfo
@@ -170,7 +171,6 @@ module.exports.BindingOutputs = __napiModule.exports.BindingOutputs
170
171
  module.exports.BindingPluginContext = __napiModule.exports.BindingPluginContext
171
172
  module.exports.BindingTransformPluginContext = __napiModule.exports.BindingTransformPluginContext
172
173
  module.exports.Bundler = __napiModule.exports.Bundler
173
- module.exports.FinalBindingOutputs = __napiModule.exports.FinalBindingOutputs
174
174
  module.exports.ParallelJsPluginRegistry = __napiModule.exports.ParallelJsPluginRegistry
175
175
  module.exports.BindingBuiltinPluginName = __napiModule.exports.BindingBuiltinPluginName
176
176
  module.exports.BindingHookSideEffects = __napiModule.exports.BindingHookSideEffects
@@ -19,75 +19,145 @@ function bindingAssetSource(source) {
19
19
  return {inner: source};
20
20
  }
21
21
 
22
+ //#endregion
23
+ //#region src/types/sourcemap.ts
24
+ function bindingifySourcemap$1(map) {
25
+ if (map == null) return;
26
+ return {inner: typeof map === "string" ? map : {
27
+ file: map.file ?? undefined,
28
+ mappings: map.mappings,
29
+ sourceRoot: map.sourceRoot,
30
+ sources: map.sources?.map((s) => s ?? undefined),
31
+ sourcesContent: map.sourcesContent?.map((s) => s ?? undefined),
32
+ names: map.names
33
+ }};
34
+ }
35
+
22
36
  //#endregion
23
37
  //#region src/utils/transform-to-rollup-output.ts
24
- function transformToRollupOutputChunk(chunk) {
25
- return {
38
+ function transformToRollupOutputChunk(bindingChunk, changed) {
39
+ const chunk = {
26
40
  type: "chunk",
27
41
  get code() {
28
- return chunk.code;
29
- },
30
- set code(code) {
31
- chunk.code = code;
42
+ return bindingChunk.code;
32
43
  },
33
- fileName: chunk.fileName,
34
- name: chunk.name,
44
+ fileName: bindingChunk.fileName,
45
+ name: bindingChunk.name,
35
46
  get modules() {
36
- return Object.fromEntries((Object.entries(chunk.modules)).map(([key, _]) => [key, {}]));
47
+ return Object.fromEntries((Object.entries(bindingChunk.modules)).map(([key, _]) => [key, {}]));
37
48
  },
38
49
  get imports() {
39
- return chunk.imports;
40
- },
41
- set imports(imports) {
42
- chunk.imports = imports;
50
+ return bindingChunk.imports;
43
51
  },
44
52
  get dynamicImports() {
45
- return chunk.dynamicImports;
53
+ return bindingChunk.dynamicImports;
46
54
  },
47
- exports: chunk.exports,
48
- isEntry: chunk.isEntry,
49
- facadeModuleId: chunk.facadeModuleId || null,
50
- isDynamicEntry: chunk.isDynamicEntry,
55
+ exports: bindingChunk.exports,
56
+ isEntry: bindingChunk.isEntry,
57
+ facadeModuleId: bindingChunk.facadeModuleId || null,
58
+ isDynamicEntry: bindingChunk.isDynamicEntry,
51
59
  get moduleIds() {
52
- return chunk.moduleIds;
60
+ return bindingChunk.moduleIds;
53
61
  },
54
62
  get map() {
55
- return chunk.map ? JSON.parse(chunk.map) : null;
56
- },
57
- set map(map) {
58
- chunk.map = JSON.stringify(map);
63
+ return bindingChunk.map ? JSON.parse(bindingChunk.map) : null;
59
64
  },
60
- sourcemapFileName: chunk.sourcemapFileName || null,
61
- preliminaryFileName: chunk.preliminaryFileName
65
+ sourcemapFileName: bindingChunk.sourcemapFileName || null,
66
+ preliminaryFileName: bindingChunk.preliminaryFileName
62
67
  };
68
+ const cache = {};
69
+ return new Proxy(chunk, {
70
+ get(target, p) {
71
+ if (p in cache) {
72
+ return cache[p];
73
+ }
74
+ return target[p];
75
+ },
76
+ set(target, p, newValue) {
77
+ cache[p] = newValue;
78
+ changed?.updated.add(bindingChunk.fileName);
79
+ return true;
80
+ }
81
+ });
63
82
  }
64
- function transformToRollupOutputAsset(asset) {
65
- return {
83
+ function transformToRollupOutputAsset(bindingAsset, changed) {
84
+ const asset = {
66
85
  type: "asset",
67
- fileName: asset.fileName,
68
- originalFileName: asset.originalFileName || null,
86
+ fileName: bindingAsset.fileName,
87
+ originalFileName: bindingAsset.originalFileName || null,
69
88
  get source() {
70
- return transformAssetSource(asset.source);
71
- },
72
- set source(source) {
73
- asset.source = bindingAssetSource(source);
89
+ return transformAssetSource(bindingAsset.source);
74
90
  },
75
- name: asset.name ?? undefined
91
+ name: bindingAsset.name ?? undefined
76
92
  };
93
+ const cache = {};
94
+ return new Proxy(asset, {
95
+ get(target, p) {
96
+ if (p in cache) {
97
+ return cache[p];
98
+ }
99
+ return target[p];
100
+ },
101
+ set(target, p, newValue) {
102
+ cache[p] = newValue;
103
+ changed?.updated.add(bindingAsset.fileName);
104
+ return true;
105
+ }
106
+ });
77
107
  }
78
- function transformToRollupOutput(output) {
108
+ function transformToRollupOutput(output, changed) {
79
109
  const { chunks: chunks, assets: assets } = output;
80
- return {output: [...chunks.map(transformToRollupOutputChunk), ...assets.map(transformToRollupOutputAsset),]};
110
+ return {output: [...chunks.map((chunk) => transformToRollupOutputChunk(chunk, changed)), ...assets.map((asset) => transformToRollupOutputAsset(asset, changed)),]};
81
111
  }
82
- function transformToOutputBundle(output) {
83
- const bundle = Object.fromEntries((transformToRollupOutput(output)).output.map((item) => [item.fileName, item]));
112
+ function transformToOutputBundle(output, changed) {
113
+ const bundle = Object.fromEntries((transformToRollupOutput(output, changed)).output.map((item) => [item.fileName, item,]));
84
114
  return new Proxy(bundle, {deleteProperty(target, property) {
85
115
  if (typeof property === "string") {
86
- output.delete(property);
116
+ changed.deleted.add(property);
87
117
  }
88
118
  return true;
89
119
  }});
90
120
  }
121
+ function collectChangedBundle(changed, bundle) {
122
+ const assets = [];
123
+ const chunks = [];
124
+ for (const key in bundle) {
125
+ if (changed.deleted.has(key) || !changed.updated.has(key)) {
126
+ continue;
127
+ }
128
+ const item = bundle[key];
129
+ if (item.type === "asset") {
130
+ assets.push({
131
+ filename: item.fileName,
132
+ originalFileName: item.originalFileName || undefined,
133
+ source: bindingAssetSource(item.source),
134
+ name: item.name
135
+ });
136
+ } else {
137
+ chunks.push({
138
+ code: item.code,
139
+ filename: item.fileName,
140
+ name: item.name,
141
+ isEntry: item.isEntry,
142
+ exports: item.exports,
143
+ modules: Object.fromEntries((Object.entries(item.modules)).map(([key$1, _]) => [key$1, {}])),
144
+ imports: item.imports,
145
+ dynamicImports: item.dynamicImports,
146
+ facadeModuleId: item.facadeModuleId || undefined,
147
+ isDynamicEntry: item.isDynamicEntry,
148
+ moduleIds: item.moduleIds,
149
+ map: bindingifySourcemap$1(item.map),
150
+ sourcemapFilename: item.sourcemapFileName || undefined,
151
+ preliminaryFilename: item.preliminaryFileName
152
+ });
153
+ }
154
+ }
155
+ return {
156
+ assets,
157
+ chunks,
158
+ deleted: Array.from(changed.deleted)
159
+ };
160
+ }
91
161
 
92
162
  //#endregion
93
163
  //#region src/binding.js
@@ -423,7 +493,6 @@ var require_binding = __commonJSMin((exports, module) => {
423
493
  module.exports.BindingPluginContext = nativeBinding.BindingPluginContext;
424
494
  module.exports.BindingTransformPluginContext = nativeBinding.BindingTransformPluginContext;
425
495
  module.exports.Bundler = nativeBinding.Bundler;
426
- module.exports.FinalBindingOutputs = nativeBinding.FinalBindingOutputs;
427
496
  module.exports.ParallelJsPluginRegistry = nativeBinding.ParallelJsPluginRegistry;
428
497
  module.exports.BindingBuiltinPluginName = nativeBinding.BindingBuiltinPluginName;
429
498
  module.exports.BindingHookSideEffects = nativeBinding.BindingHookSideEffects;
@@ -513,20 +582,6 @@ function transformModuleInfo(info, option) {
513
582
  };
514
583
  }
515
584
 
516
- //#endregion
517
- //#region src/types/sourcemap.ts
518
- function bindingifySourcemap$1(map) {
519
- if (map == null) return;
520
- return {inner: typeof map === "string" ? map : {
521
- file: map.file ?? undefined,
522
- mappings: map.mappings,
523
- sourceRoot: map.sourceRoot,
524
- sources: map.sources?.map((s) => s ?? undefined),
525
- sourcesContent: map.sourcesContent?.map((s) => s ?? undefined),
526
- names: map.names
527
- }};
528
- }
529
-
530
585
  //#endregion
531
586
  //#region src/log/logging.ts
532
587
  const LogLevelSchema = ((z.literal("info")).or(z.literal("debug"))).or(z.literal("warn"));
@@ -1322,7 +1377,13 @@ function bindingifyGenerateBundle(plugin, options, outputOptions, pluginContextD
1322
1377
  const { handler: handler, meta: meta } = normalizeHook(hook);
1323
1378
  return {
1324
1379
  plugin: async (ctx, bundle, isWrite) => {
1325
- await handler.call(new PluginContext(options, ctx, plugin, pluginContextData), outputOptions, transformToOutputBundle(bundle), isWrite);
1380
+ const changed = {
1381
+ updated: new Set(),
1382
+ deleted: new Set()
1383
+ };
1384
+ const output = transformToOutputBundle(bundle, changed);
1385
+ await handler.call(new PluginContext(options, ctx, plugin, pluginContextData), outputOptions, output, isWrite);
1386
+ return collectChangedBundle(changed, output);
1326
1387
  },
1327
1388
  meta: bindingifyPluginHookMeta(meta)
1328
1389
  };
@@ -1335,7 +1396,13 @@ function bindingifyWriteBundle(plugin, options, outputOptions, pluginContextData
1335
1396
  const { handler: handler, meta: meta } = normalizeHook(hook);
1336
1397
  return {
1337
1398
  plugin: async (ctx, bundle) => {
1338
- await handler.call(new PluginContext(options, ctx, plugin, pluginContextData), outputOptions, transformToOutputBundle(bundle));
1399
+ const changed = {
1400
+ updated: new Set(),
1401
+ deleted: new Set()
1402
+ };
1403
+ const output = transformToOutputBundle(bundle, changed);
1404
+ await handler.call(new PluginContext(options, ctx, plugin, pluginContextData), outputOptions, output);
1405
+ return collectChangedBundle(changed, output);
1339
1406
  },
1340
1407
  meta: bindingifyPluginHookMeta(meta)
1341
1408
  };
@@ -50,75 +50,145 @@ function bindingAssetSource(source) {
50
50
  return {inner: source};
51
51
  }
52
52
 
53
+ //#endregion
54
+ //#region src/types/sourcemap.ts
55
+ function bindingifySourcemap$1(map) {
56
+ if (map == null) return;
57
+ return {inner: typeof map === "string" ? map : {
58
+ file: map.file ?? undefined,
59
+ mappings: map.mappings,
60
+ sourceRoot: map.sourceRoot,
61
+ sources: map.sources?.map((s) => s ?? undefined),
62
+ sourcesContent: map.sourcesContent?.map((s) => s ?? undefined),
63
+ names: map.names
64
+ }};
65
+ }
66
+
53
67
  //#endregion
54
68
  //#region src/utils/transform-to-rollup-output.ts
55
- function transformToRollupOutputChunk(chunk) {
56
- return {
69
+ function transformToRollupOutputChunk(bindingChunk, changed) {
70
+ const chunk = {
57
71
  type: "chunk",
58
72
  get code() {
59
- return chunk.code;
60
- },
61
- set code(code) {
62
- chunk.code = code;
73
+ return bindingChunk.code;
63
74
  },
64
- fileName: chunk.fileName,
65
- name: chunk.name,
75
+ fileName: bindingChunk.fileName,
76
+ name: bindingChunk.name,
66
77
  get modules() {
67
- return Object.fromEntries((Object.entries(chunk.modules)).map(([key, _]) => [key, {}]));
78
+ return Object.fromEntries((Object.entries(bindingChunk.modules)).map(([key, _]) => [key, {}]));
68
79
  },
69
80
  get imports() {
70
- return chunk.imports;
71
- },
72
- set imports(imports) {
73
- chunk.imports = imports;
81
+ return bindingChunk.imports;
74
82
  },
75
83
  get dynamicImports() {
76
- return chunk.dynamicImports;
84
+ return bindingChunk.dynamicImports;
77
85
  },
78
- exports: chunk.exports,
79
- isEntry: chunk.isEntry,
80
- facadeModuleId: chunk.facadeModuleId || null,
81
- isDynamicEntry: chunk.isDynamicEntry,
86
+ exports: bindingChunk.exports,
87
+ isEntry: bindingChunk.isEntry,
88
+ facadeModuleId: bindingChunk.facadeModuleId || null,
89
+ isDynamicEntry: bindingChunk.isDynamicEntry,
82
90
  get moduleIds() {
83
- return chunk.moduleIds;
91
+ return bindingChunk.moduleIds;
84
92
  },
85
93
  get map() {
86
- return chunk.map ? JSON.parse(chunk.map) : null;
87
- },
88
- set map(map) {
89
- chunk.map = JSON.stringify(map);
94
+ return bindingChunk.map ? JSON.parse(bindingChunk.map) : null;
90
95
  },
91
- sourcemapFileName: chunk.sourcemapFileName || null,
92
- preliminaryFileName: chunk.preliminaryFileName
96
+ sourcemapFileName: bindingChunk.sourcemapFileName || null,
97
+ preliminaryFileName: bindingChunk.preliminaryFileName
93
98
  };
99
+ const cache = {};
100
+ return new Proxy(chunk, {
101
+ get(target, p) {
102
+ if (p in cache) {
103
+ return cache[p];
104
+ }
105
+ return target[p];
106
+ },
107
+ set(target, p, newValue) {
108
+ cache[p] = newValue;
109
+ changed?.updated.add(bindingChunk.fileName);
110
+ return true;
111
+ }
112
+ });
94
113
  }
95
- function transformToRollupOutputAsset(asset) {
96
- return {
114
+ function transformToRollupOutputAsset(bindingAsset, changed) {
115
+ const asset = {
97
116
  type: "asset",
98
- fileName: asset.fileName,
99
- originalFileName: asset.originalFileName || null,
117
+ fileName: bindingAsset.fileName,
118
+ originalFileName: bindingAsset.originalFileName || null,
100
119
  get source() {
101
- return transformAssetSource(asset.source);
102
- },
103
- set source(source) {
104
- asset.source = bindingAssetSource(source);
120
+ return transformAssetSource(bindingAsset.source);
105
121
  },
106
- name: asset.name ?? undefined
122
+ name: bindingAsset.name ?? undefined
107
123
  };
124
+ const cache = {};
125
+ return new Proxy(asset, {
126
+ get(target, p) {
127
+ if (p in cache) {
128
+ return cache[p];
129
+ }
130
+ return target[p];
131
+ },
132
+ set(target, p, newValue) {
133
+ cache[p] = newValue;
134
+ changed?.updated.add(bindingAsset.fileName);
135
+ return true;
136
+ }
137
+ });
108
138
  }
109
- function transformToRollupOutput(output) {
139
+ function transformToRollupOutput(output, changed) {
110
140
  const { chunks: chunks, assets: assets } = output;
111
- return {output: [...chunks.map(transformToRollupOutputChunk), ...assets.map(transformToRollupOutputAsset),]};
141
+ return {output: [...chunks.map((chunk) => transformToRollupOutputChunk(chunk, changed)), ...assets.map((asset) => transformToRollupOutputAsset(asset, changed)),]};
112
142
  }
113
- function transformToOutputBundle(output) {
114
- const bundle = Object.fromEntries((transformToRollupOutput(output)).output.map((item) => [item.fileName, item]));
143
+ function transformToOutputBundle(output, changed) {
144
+ const bundle = Object.fromEntries((transformToRollupOutput(output, changed)).output.map((item) => [item.fileName, item,]));
115
145
  return new Proxy(bundle, {deleteProperty(target, property) {
116
146
  if (typeof property === "string") {
117
- output.delete(property);
147
+ changed.deleted.add(property);
118
148
  }
119
149
  return true;
120
150
  }});
121
151
  }
152
+ function collectChangedBundle(changed, bundle) {
153
+ const assets = [];
154
+ const chunks = [];
155
+ for (const key in bundle) {
156
+ if (changed.deleted.has(key) || !changed.updated.has(key)) {
157
+ continue;
158
+ }
159
+ const item = bundle[key];
160
+ if (item.type === "asset") {
161
+ assets.push({
162
+ filename: item.fileName,
163
+ originalFileName: item.originalFileName || undefined,
164
+ source: bindingAssetSource(item.source),
165
+ name: item.name
166
+ });
167
+ } else {
168
+ chunks.push({
169
+ code: item.code,
170
+ filename: item.fileName,
171
+ name: item.name,
172
+ isEntry: item.isEntry,
173
+ exports: item.exports,
174
+ modules: Object.fromEntries((Object.entries(item.modules)).map(([key$1, _]) => [key$1, {}])),
175
+ imports: item.imports,
176
+ dynamicImports: item.dynamicImports,
177
+ facadeModuleId: item.facadeModuleId || undefined,
178
+ isDynamicEntry: item.isDynamicEntry,
179
+ moduleIds: item.moduleIds,
180
+ map: bindingifySourcemap$1(item.map),
181
+ sourcemapFilename: item.sourcemapFileName || undefined,
182
+ preliminaryFilename: item.preliminaryFileName
183
+ });
184
+ }
185
+ }
186
+ return {
187
+ assets,
188
+ chunks,
189
+ deleted: Array.from(changed.deleted)
190
+ };
191
+ }
122
192
 
123
193
  //#endregion
124
194
  //#region src/binding.js
@@ -454,7 +524,6 @@ var require_binding = __commonJSMin((exports, module) => {
454
524
  module.exports.BindingPluginContext = nativeBinding.BindingPluginContext;
455
525
  module.exports.BindingTransformPluginContext = nativeBinding.BindingTransformPluginContext;
456
526
  module.exports.Bundler = nativeBinding.Bundler;
457
- module.exports.FinalBindingOutputs = nativeBinding.FinalBindingOutputs;
458
527
  module.exports.ParallelJsPluginRegistry = nativeBinding.ParallelJsPluginRegistry;
459
528
  module.exports.BindingBuiltinPluginName = nativeBinding.BindingBuiltinPluginName;
460
529
  module.exports.BindingHookSideEffects = nativeBinding.BindingHookSideEffects;
@@ -544,20 +613,6 @@ function transformModuleInfo(info, option) {
544
613
  };
545
614
  }
546
615
 
547
- //#endregion
548
- //#region src/types/sourcemap.ts
549
- function bindingifySourcemap$1(map) {
550
- if (map == null) return;
551
- return {inner: typeof map === "string" ? map : {
552
- file: map.file ?? undefined,
553
- mappings: map.mappings,
554
- sourceRoot: map.sourceRoot,
555
- sources: map.sources?.map((s) => s ?? undefined),
556
- sourcesContent: map.sourcesContent?.map((s) => s ?? undefined),
557
- names: map.names
558
- }};
559
- }
560
-
561
616
  //#endregion
562
617
  //#region src/log/logging.ts
563
618
  const LogLevelSchema = ((z.literal("info")).or(z.literal("debug"))).or(z.literal("warn"));
@@ -1353,7 +1408,13 @@ function bindingifyGenerateBundle(plugin, options, outputOptions, pluginContextD
1353
1408
  const { handler: handler, meta: meta } = normalizeHook(hook);
1354
1409
  return {
1355
1410
  plugin: async (ctx, bundle, isWrite) => {
1356
- await handler.call(new PluginContext(options, ctx, plugin, pluginContextData), outputOptions, transformToOutputBundle(bundle), isWrite);
1411
+ const changed = {
1412
+ updated: new Set(),
1413
+ deleted: new Set()
1414
+ };
1415
+ const output = transformToOutputBundle(bundle, changed);
1416
+ await handler.call(new PluginContext(options, ctx, plugin, pluginContextData), outputOptions, output, isWrite);
1417
+ return collectChangedBundle(changed, output);
1357
1418
  },
1358
1419
  meta: bindingifyPluginHookMeta(meta)
1359
1420
  };
@@ -1366,7 +1427,13 @@ function bindingifyWriteBundle(plugin, options, outputOptions, pluginContextData
1366
1427
  const { handler: handler, meta: meta } = normalizeHook(hook);
1367
1428
  return {
1368
1429
  plugin: async (ctx, bundle) => {
1369
- await handler.call(new PluginContext(options, ctx, plugin, pluginContextData), outputOptions, transformToOutputBundle(bundle));
1430
+ const changed = {
1431
+ updated: new Set(),
1432
+ deleted: new Set()
1433
+ };
1434
+ const output = transformToOutputBundle(bundle, changed);
1435
+ await handler.call(new PluginContext(options, ctx, plugin, pluginContextData), outputOptions, output);
1436
+ return collectChangedBundle(changed, output);
1370
1437
  },
1371
1438
  meta: bindingifyPluginHookMeta(meta)
1372
1439
  };
@@ -20,7 +20,6 @@ export declare class BindingOutputAsset {
20
20
  get fileName(): string
21
21
  get originalFileName(): string | null
22
22
  get source(): BindingAssetSource
23
- set source(source: BindingAssetSource)
24
23
  get name(): string | null
25
24
  }
26
25
 
@@ -33,22 +32,17 @@ export declare class BindingOutputChunk {
33
32
  get fileName(): string
34
33
  get modules(): Record<string, BindingRenderedModule>
35
34
  get imports(): Array<string>
36
- set imports(imports: Array<string>)
37
35
  get dynamicImports(): Array<string>
38
36
  get code(): string
39
- set code(code: string)
40
37
  get map(): string | null
41
- set map(map: string)
42
38
  get sourcemapFileName(): string | null
43
39
  get preliminaryFileName(): string
44
40
  get name(): string
45
41
  }
46
42
 
47
- /** The `BindingOutputs` owner `Vec<Output>` the mutable reference, it avoid `Clone` at call `writeBundle/generateBundle` hook, and make it mutable. */
48
43
  export declare class BindingOutputs {
49
44
  get chunks(): Array<BindingOutputChunk>
50
45
  get assets(): Array<BindingOutputAsset>
51
- delete(fileName: string): void
52
46
  }
53
47
 
54
48
  export declare class BindingPluginContext {
@@ -65,21 +59,12 @@ export declare class BindingTransformPluginContext {
65
59
 
66
60
  export declare class Bundler {
67
61
  constructor(inputOptions: BindingInputOptions, outputOptions: BindingOutputOptions, parallelPluginsRegistry?: ParallelJsPluginRegistry | undefined | null)
68
- write(): Promise<FinalBindingOutputs>
69
- generate(): Promise<FinalBindingOutputs>
62
+ write(): Promise<BindingOutputs>
63
+ generate(): Promise<BindingOutputs>
70
64
  scan(): Promise<void>
71
65
  close(): Promise<void>
72
66
  }
73
67
 
74
- /**
75
- * The `FinalBindingOutputs` is used at `write()` or `generate()`, it is similar to `BindingOutputs`, if using `BindingOutputs` has unexpected behavior.
76
- * TODO find a way to export it gracefully.
77
- */
78
- export declare class FinalBindingOutputs {
79
- get chunks(): Array<BindingOutputChunk>
80
- get assets(): Array<BindingOutputAsset>
81
- }
82
-
83
68
  export declare class ParallelJsPluginRegistry {
84
69
  id: number
85
70
  workerCount: number
@@ -350,9 +335,9 @@ export interface BindingPluginOptions {
350
335
  renderStartMeta?: BindingPluginHookMeta
351
336
  renderError?: (ctx: BindingPluginContext, error: string) => void
352
337
  renderErrorMeta?: BindingPluginHookMeta
353
- generateBundle?: (ctx: BindingPluginContext, bundle: BindingOutputs, isWrite: boolean) => MaybePromise<VoidNullable>
338
+ generateBundle?: (ctx: BindingPluginContext, bundle: BindingOutputs, isWrite: boolean) => MaybePromise<VoidNullable<JsChangedOutputs>>
354
339
  generateBundleMeta?: BindingPluginHookMeta
355
- writeBundle?: (ctx: BindingPluginContext, bundle: BindingOutputs) => MaybePromise<VoidNullable>
340
+ writeBundle?: (ctx: BindingPluginContext, bundle: BindingOutputs) => MaybePromise<VoidNullable<JsChangedOutputs>>
356
341
  writeBundleMeta?: BindingPluginHookMeta
357
342
  closeBundle?: (ctx: BindingPluginContext) => MaybePromise<VoidNullable>
358
343
  closeBundleMeta?: BindingPluginHookMeta
@@ -472,6 +457,36 @@ export interface IsolatedDeclarationsResult {
472
457
  errors: Array<string>
473
458
  }
474
459
 
460
+ export interface JsChangedOutputs {
461
+ chunks: Array<JsOutputChunk>
462
+ assets: Array<JsOutputAsset>
463
+ deleted: Array<string>
464
+ }
465
+
466
+ export interface JsOutputAsset {
467
+ name?: string
468
+ originalFileName?: string
469
+ filename: string
470
+ source: BindingAssetSource
471
+ }
472
+
473
+ export interface JsOutputChunk {
474
+ name: string
475
+ isEntry: boolean
476
+ isDynamicEntry: boolean
477
+ facadeModuleId?: string
478
+ moduleIds: Array<string>
479
+ exports: Array<string>
480
+ filename: string
481
+ modules: Record<string, BindingRenderedModule>
482
+ imports: Array<string>
483
+ dynamicImports: Array<string>
484
+ code: string
485
+ map?: BindingSourcemap
486
+ sourcemapFilename?: string
487
+ preliminaryFilename: string
488
+ }
489
+
475
490
  /**
476
491
  * Configure how TSX and JSX are transformed.
477
492
  *
@@ -736,4 +751,3 @@ export interface TypeScriptOptions {
736
751
  */
737
752
  rewriteImportExtensions?: 'rewrite' | 'remove' | boolean
738
753
  }
739
-
@@ -1,5 +1,10 @@
1
1
  import type { RolldownOutput } from '../types/rolldown-output';
2
2
  import type { OutputBundle } from '../types/output-bundle';
3
- import type { BindingOutputs, FinalBindingOutputs } from '../binding';
4
- export declare function transformToRollupOutput(output: BindingOutputs | FinalBindingOutputs): RolldownOutput;
5
- export declare function transformToOutputBundle(output: BindingOutputs): OutputBundle;
3
+ import type { BindingOutputs, JsChangedOutputs } from '../binding';
4
+ export declare function transformToRollupOutput(output: BindingOutputs, changed?: ChangedOutputs): RolldownOutput;
5
+ export declare function transformToOutputBundle(output: BindingOutputs, changed: ChangedOutputs): OutputBundle;
6
+ export interface ChangedOutputs {
7
+ updated: Set<string>;
8
+ deleted: Set<string>;
9
+ }
10
+ export declare function collectChangedBundle(changed: ChangedOutputs, bundle: OutputBundle): JsChangedOutputs;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rolldown",
3
- "version": "0.13.2-snapshot-ea56d8d-20241010003429",
3
+ "version": "0.13.2-snapshot-e65437c-20241011073722",
4
4
  "description": "Fast JavaScript/TypeScript bundler in Rust with Rollup-compatible API.",
5
5
  "homepage": "https://rolldown.rs/",
6
6
  "repository": {
@@ -103,21 +103,21 @@
103
103
  "why-is-node-running": "^3.0.0",
104
104
  "zod-to-json-schema": "^3.23.2",
105
105
  "@rolldown/testing": "0.0.1",
106
- "rolldown": "0.13.2-snapshot-ea56d8d-20241010003429"
106
+ "rolldown": "0.13.2-snapshot-e65437c-20241011073722"
107
107
  },
108
108
  "optionalDependencies": {
109
- "@rolldown/binding-darwin-arm64": "0.13.2-snapshot-ea56d8d-20241010003429",
110
- "@rolldown/binding-darwin-x64": "0.13.2-snapshot-ea56d8d-20241010003429",
111
- "@rolldown/binding-freebsd-x64": "0.13.2-snapshot-ea56d8d-20241010003429",
112
- "@rolldown/binding-linux-arm-gnueabihf": "0.13.2-snapshot-ea56d8d-20241010003429",
113
- "@rolldown/binding-linux-arm64-musl": "0.13.2-snapshot-ea56d8d-20241010003429",
114
- "@rolldown/binding-linux-x64-gnu": "0.13.2-snapshot-ea56d8d-20241010003429",
115
- "@rolldown/binding-linux-arm64-gnu": "0.13.2-snapshot-ea56d8d-20241010003429",
116
- "@rolldown/binding-linux-x64-musl": "0.13.2-snapshot-ea56d8d-20241010003429",
117
- "@rolldown/binding-win32-arm64-msvc": "0.13.2-snapshot-ea56d8d-20241010003429",
118
- "@rolldown/binding-wasm32-wasi": "0.13.2-snapshot-ea56d8d-20241010003429",
119
- "@rolldown/binding-win32-ia32-msvc": "0.13.2-snapshot-ea56d8d-20241010003429",
120
- "@rolldown/binding-win32-x64-msvc": "0.13.2-snapshot-ea56d8d-20241010003429"
109
+ "@rolldown/binding-darwin-arm64": "0.13.2-snapshot-e65437c-20241011073722",
110
+ "@rolldown/binding-darwin-x64": "0.13.2-snapshot-e65437c-20241011073722",
111
+ "@rolldown/binding-freebsd-x64": "0.13.2-snapshot-e65437c-20241011073722",
112
+ "@rolldown/binding-linux-arm-gnueabihf": "0.13.2-snapshot-e65437c-20241011073722",
113
+ "@rolldown/binding-linux-arm64-gnu": "0.13.2-snapshot-e65437c-20241011073722",
114
+ "@rolldown/binding-linux-arm64-musl": "0.13.2-snapshot-e65437c-20241011073722",
115
+ "@rolldown/binding-linux-x64-gnu": "0.13.2-snapshot-e65437c-20241011073722",
116
+ "@rolldown/binding-wasm32-wasi": "0.13.2-snapshot-e65437c-20241011073722",
117
+ "@rolldown/binding-linux-x64-musl": "0.13.2-snapshot-e65437c-20241011073722",
118
+ "@rolldown/binding-win32-ia32-msvc": "0.13.2-snapshot-e65437c-20241011073722",
119
+ "@rolldown/binding-win32-x64-msvc": "0.13.2-snapshot-e65437c-20241011073722",
120
+ "@rolldown/binding-win32-arm64-msvc": "0.13.2-snapshot-e65437c-20241011073722"
121
121
  },
122
122
  "scripts": {
123
123
  "# Scrips for binding #": "_",