rollup 3.19.1 → 3.20.1

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/bin/rollup CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  /*
4
4
  @license
5
- Rollup.js v3.19.1
6
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
5
+ Rollup.js v3.20.1
6
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
7
7
 
8
8
  https://github.com/rollup/rollup
9
9
 
package/dist/es/rollup.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -16,7 +16,7 @@ import { lstat, realpath, readdir, readFile, mkdir, writeFile } from 'node:fs/pr
16
16
  import { EventEmitter } from 'node:events';
17
17
  import * as tty from 'tty';
18
18
 
19
- var version$1 = "3.19.1";
19
+ var version$1 = "3.20.1";
20
20
 
21
21
  const comma = ','.charCodeAt(0);
22
22
  const semicolon = ';'.charCodeAt(0);
@@ -15278,7 +15278,7 @@ class Chunk {
15278
15278
  const chunkModules = new Set(orderedModules);
15279
15279
  for (const module of orderedModules) {
15280
15280
  chunkByModule.set(module, this);
15281
- if (module.namespace.included) {
15281
+ if (module.namespace.included && !outputOptions.preserveModules) {
15282
15282
  includedNamespaces.add(module);
15283
15283
  }
15284
15284
  if (this.isEmpty && module.isIncluded()) {
@@ -15291,7 +15291,7 @@ class Chunk {
15291
15291
  if (!chunkModules.has(importer)) {
15292
15292
  this.dynamicEntryModules.push(module);
15293
15293
  // Modules with synthetic exports need an artificial namespace for dynamic imports
15294
- if (module.info.syntheticNamedExports && !outputOptions.preserveModules) {
15294
+ if (module.info.syntheticNamedExports) {
15295
15295
  includedNamespaces.add(module);
15296
15296
  this.exports.add(module.namespace);
15297
15297
  }
@@ -15407,12 +15407,11 @@ class Chunk {
15407
15407
  requiredFacades.push({});
15408
15408
  }
15409
15409
  if (!this.facadeModule) {
15410
- const needsStrictFacade = module.preserveSignature === 'strict' ||
15411
- (module.preserveSignature === 'exports-only' &&
15412
- module.getExportNamesByVariable().size > 0);
15413
- if (!needsStrictFacade ||
15414
- this.outputOptions.preserveModules ||
15415
- this.canModuleBeFacade(module, exposedVariables)) {
15410
+ const needsStrictFacade = !this.outputOptions.preserveModules &&
15411
+ (module.preserveSignature === 'strict' ||
15412
+ (module.preserveSignature === 'exports-only' &&
15413
+ module.getExportNamesByVariable().size > 0));
15414
+ if (!needsStrictFacade || this.canModuleBeFacade(module, exposedVariables)) {
15416
15415
  this.facadeModule = module;
15417
15416
  this.facadeChunkByModule.set(module, this);
15418
15417
  if (module.preserveSignature) {
@@ -16000,7 +15999,7 @@ class Chunk {
16000
15999
  // This method changes properties on the AST before rendering and must not be async
16001
16000
  renderModules(fileName) {
16002
16001
  const { accessedGlobalsByScope, dependencies, exportNamesByVariable, includedNamespaces, inputOptions: { onwarn }, isEmpty, orderedModules, outputOptions, pluginDriver, renderedModules, snippets } = this;
16003
- const { compact, dynamicImportFunction, format, freeze, namespaceToStringTag, preserveModules } = outputOptions;
16002
+ const { compact, dynamicImportFunction, format, freeze, namespaceToStringTag } = outputOptions;
16004
16003
  const { _, cnst, n } = snippets;
16005
16004
  this.setDynamicImportResolutions(fileName);
16006
16005
  this.setImportMetaResolutions(fileName);
@@ -16039,7 +16038,7 @@ class Chunk {
16039
16038
  usedModules.push(module);
16040
16039
  }
16041
16040
  const namespace = module.namespace;
16042
- if (includedNamespaces.has(module) && !preserveModules) {
16041
+ if (includedNamespaces.has(module)) {
16043
16042
  const rendered = namespace.renderBlock(renderOptions);
16044
16043
  if (namespace.renderFirst())
16045
16044
  hoistedSource += n + rendered;
@@ -16148,12 +16147,12 @@ class Chunk {
16148
16147
  deconflictChunk(this.orderedModules, this.getDependenciesToBeDeconflicted(format !== 'es' && format !== 'system', format === 'amd' || format === 'umd' || format === 'iife', interop), this.imports, usedNames, format, interop, preserveModules, externalLiveBindings, this.chunkByModule, this.externalChunkByModule, syntheticExports, this.exportNamesByVariable, this.accessedGlobalsByScope, this.includedNamespaces);
16149
16148
  }
16150
16149
  setImportMetaResolutions(fileName) {
16151
- const { accessedGlobalsByScope, includedNamespaces, orderedModules, outputOptions: { format, preserveModules } } = this;
16150
+ const { accessedGlobalsByScope, includedNamespaces, orderedModules, outputOptions: { format } } = this;
16152
16151
  for (const module of orderedModules) {
16153
16152
  for (const importMeta of module.importMetas) {
16154
16153
  importMeta.setResolution(format, accessedGlobalsByScope, fileName);
16155
16154
  }
16156
- if (includedNamespaces.has(module) && !preserveModules) {
16155
+ if (includedNamespaces.has(module)) {
16157
16156
  module.namespace.prepare(accessedGlobalsByScope);
16158
16157
  }
16159
16158
  }
@@ -23982,12 +23981,12 @@ class FileEmitter {
23982
23981
  }
23983
23982
  const source = getValidSource(requestedSource, consumedFile, referenceId);
23984
23983
  if (this.output) {
23985
- this.finalizeAsset(consumedFile, source, referenceId, this.output);
23984
+ this.finalizeAdditionalAsset(consumedFile, source, this.output);
23986
23985
  }
23987
23986
  else {
23988
23987
  consumedFile.source = source;
23989
23988
  for (const emitter of this.outputFileEmitters) {
23990
- emitter.finalizeAsset(consumedFile, source, referenceId, emitter.output);
23989
+ emitter.finalizeAdditionalAsset(consumedFile, source, emitter.output);
23991
23990
  }
23992
23991
  }
23993
23992
  };
@@ -24005,11 +24004,21 @@ class FileEmitter {
24005
24004
  reserveFileNameInBundle(emittedFile.fileName, output, this.options.onwarn);
24006
24005
  }
24007
24006
  }
24008
- for (const [referenceId, consumedFile] of this.filesByReferenceId) {
24007
+ const consumedAssetsByHash = new Map();
24008
+ for (const consumedFile of this.filesByReferenceId.values()) {
24009
24009
  if (consumedFile.type === 'asset' && consumedFile.source !== undefined) {
24010
- this.finalizeAsset(consumedFile, consumedFile.source, referenceId, output);
24010
+ if (consumedFile.fileName) {
24011
+ this.finalizeAdditionalAsset(consumedFile, consumedFile.source, output);
24012
+ }
24013
+ else {
24014
+ const sourceHash = getSourceHash(consumedFile.source);
24015
+ getOrCreate(consumedAssetsByHash, sourceHash, () => []).push(consumedFile);
24016
+ }
24011
24017
  }
24012
24018
  }
24019
+ for (const [sourceHash, consumedFiles] of consumedAssetsByHash) {
24020
+ this.finalizeAssetsWithSameSource(consumedFiles, sourceHash, output);
24021
+ }
24013
24022
  };
24014
24023
  this.filesByReferenceId = baseFileEmitter
24015
24024
  ? new Map(baseFileEmitter.filesByReferenceId)
@@ -24025,6 +24034,7 @@ class FileEmitter {
24025
24034
  referenceId = createHash().update(referenceId).digest('hex').slice(0, 8);
24026
24035
  } while (this.filesByReferenceId.has(referenceId) ||
24027
24036
  this.outputFileEmitters.some(({ filesByReferenceId }) => filesByReferenceId.has(referenceId)));
24037
+ file.referenceId = referenceId;
24028
24038
  this.filesByReferenceId.set(referenceId, file);
24029
24039
  for (const { filesByReferenceId } of this.outputFileEmitters) {
24030
24040
  filesByReferenceId.set(referenceId, file);
@@ -24039,27 +24049,28 @@ class FileEmitter {
24039
24049
  fileName: emittedAsset.fileName,
24040
24050
  name: emittedAsset.name,
24041
24051
  needsCodeReference: !!emittedAsset.needsCodeReference,
24052
+ referenceId: '',
24042
24053
  source,
24043
24054
  type: 'asset'
24044
24055
  };
24045
24056
  const referenceId = this.assignReferenceId(consumedAsset, emittedAsset.fileName || emittedAsset.name || String(this.nextIdBase++));
24046
24057
  if (this.output) {
24047
- this.emitAssetWithReferenceId(consumedAsset, referenceId, this.output);
24058
+ this.emitAssetWithReferenceId(consumedAsset, this.output);
24048
24059
  }
24049
24060
  else {
24050
24061
  for (const fileEmitter of this.outputFileEmitters) {
24051
- fileEmitter.emitAssetWithReferenceId(consumedAsset, referenceId, fileEmitter.output);
24062
+ fileEmitter.emitAssetWithReferenceId(consumedAsset, fileEmitter.output);
24052
24063
  }
24053
24064
  }
24054
24065
  return referenceId;
24055
24066
  }
24056
- emitAssetWithReferenceId(consumedAsset, referenceId, output) {
24067
+ emitAssetWithReferenceId(consumedAsset, output) {
24057
24068
  const { fileName, source } = consumedAsset;
24058
24069
  if (fileName) {
24059
24070
  reserveFileNameInBundle(fileName, output, this.options.onwarn);
24060
24071
  }
24061
24072
  if (source !== undefined) {
24062
- this.finalizeAsset(consumedAsset, source, referenceId, output);
24073
+ this.finalizeAdditionalAsset(consumedAsset, source, output);
24063
24074
  }
24064
24075
  }
24065
24076
  emitChunk(emittedChunk) {
@@ -24073,6 +24084,7 @@ class FileEmitter {
24073
24084
  fileName: emittedChunk.fileName,
24074
24085
  module: null,
24075
24086
  name: emittedChunk.name || emittedChunk.id,
24087
+ referenceId: '',
24076
24088
  type: 'chunk'
24077
24089
  };
24078
24090
  this.graph.moduleLoader
@@ -24084,8 +24096,8 @@ class FileEmitter {
24084
24096
  });
24085
24097
  return this.assignReferenceId(consumedChunk, emittedChunk.id);
24086
24098
  }
24087
- finalizeAsset(consumedFile, source, referenceId, { bundle, fileNamesBySource, outputOptions }) {
24088
- let fileName = consumedFile.fileName;
24099
+ finalizeAdditionalAsset(consumedFile, source, { bundle, fileNamesBySource, outputOptions }) {
24100
+ let { fileName, needsCodeReference, referenceId } = consumedFile;
24089
24101
  // Deduplicate assets if an explicit fileName is not provided
24090
24102
  if (!fileName) {
24091
24103
  const sourceHash = getSourceHash(source);
@@ -24098,11 +24110,45 @@ class FileEmitter {
24098
24110
  // We must not modify the original assets to avoid interaction between outputs
24099
24111
  const assetWithFileName = { ...consumedFile, fileName, source };
24100
24112
  this.filesByReferenceId.set(referenceId, assetWithFileName);
24113
+ const existingAsset = bundle[fileName];
24114
+ if (existingAsset?.type === 'asset') {
24115
+ existingAsset.needsCodeReference && (existingAsset.needsCodeReference = needsCodeReference);
24116
+ }
24117
+ else {
24118
+ bundle[fileName] = {
24119
+ fileName,
24120
+ name: consumedFile.name,
24121
+ needsCodeReference,
24122
+ source,
24123
+ type: 'asset'
24124
+ };
24125
+ }
24126
+ }
24127
+ finalizeAssetsWithSameSource(consumedFiles, sourceHash, { bundle, fileNamesBySource, outputOptions }) {
24128
+ let fileName = '';
24129
+ let usedConsumedFile;
24130
+ let needsCodeReference = true;
24131
+ for (const consumedFile of consumedFiles) {
24132
+ needsCodeReference && (needsCodeReference = consumedFile.needsCodeReference);
24133
+ const assetFileName = generateAssetFileName(consumedFile.name, consumedFile.source, sourceHash, outputOptions, bundle);
24134
+ if (!fileName ||
24135
+ assetFileName.length < fileName.length ||
24136
+ (assetFileName.length === fileName.length && assetFileName < fileName)) {
24137
+ fileName = assetFileName;
24138
+ usedConsumedFile = consumedFile;
24139
+ }
24140
+ }
24141
+ fileNamesBySource.set(sourceHash, fileName);
24142
+ for (const consumedFile of consumedFiles) {
24143
+ // We must not modify the original assets to avoid interaction between outputs
24144
+ const assetWithFileName = { ...consumedFile, fileName };
24145
+ this.filesByReferenceId.set(consumedFile.referenceId, assetWithFileName);
24146
+ }
24101
24147
  bundle[fileName] = {
24102
24148
  fileName,
24103
- name: consumedFile.name,
24104
- needsCodeReference: consumedFile.needsCodeReference,
24105
- source,
24149
+ name: usedConsumedFile.name,
24150
+ needsCodeReference,
24151
+ source: usedConsumedFile.source,
24106
24152
  type: 'asset'
24107
24153
  };
24108
24154
  }
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
package/dist/rollup.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -31,7 +31,7 @@ function _interopNamespaceDefault(e) {
31
31
 
32
32
  const tty__namespace = /*#__PURE__*/_interopNamespaceDefault(tty);
33
33
 
34
- var version$1 = "3.19.1";
34
+ var version$1 = "3.20.1";
35
35
 
36
36
  function ensureArray$1(items) {
37
37
  if (Array.isArray(items)) {
@@ -15776,7 +15776,7 @@ class Chunk {
15776
15776
  const chunkModules = new Set(orderedModules);
15777
15777
  for (const module of orderedModules) {
15778
15778
  chunkByModule.set(module, this);
15779
- if (module.namespace.included) {
15779
+ if (module.namespace.included && !outputOptions.preserveModules) {
15780
15780
  includedNamespaces.add(module);
15781
15781
  }
15782
15782
  if (this.isEmpty && module.isIncluded()) {
@@ -15789,7 +15789,7 @@ class Chunk {
15789
15789
  if (!chunkModules.has(importer)) {
15790
15790
  this.dynamicEntryModules.push(module);
15791
15791
  // Modules with synthetic exports need an artificial namespace for dynamic imports
15792
- if (module.info.syntheticNamedExports && !outputOptions.preserveModules) {
15792
+ if (module.info.syntheticNamedExports) {
15793
15793
  includedNamespaces.add(module);
15794
15794
  this.exports.add(module.namespace);
15795
15795
  }
@@ -15905,12 +15905,11 @@ class Chunk {
15905
15905
  requiredFacades.push({});
15906
15906
  }
15907
15907
  if (!this.facadeModule) {
15908
- const needsStrictFacade = module.preserveSignature === 'strict' ||
15909
- (module.preserveSignature === 'exports-only' &&
15910
- module.getExportNamesByVariable().size > 0);
15911
- if (!needsStrictFacade ||
15912
- this.outputOptions.preserveModules ||
15913
- this.canModuleBeFacade(module, exposedVariables)) {
15908
+ const needsStrictFacade = !this.outputOptions.preserveModules &&
15909
+ (module.preserveSignature === 'strict' ||
15910
+ (module.preserveSignature === 'exports-only' &&
15911
+ module.getExportNamesByVariable().size > 0));
15912
+ if (!needsStrictFacade || this.canModuleBeFacade(module, exposedVariables)) {
15914
15913
  this.facadeModule = module;
15915
15914
  this.facadeChunkByModule.set(module, this);
15916
15915
  if (module.preserveSignature) {
@@ -16498,7 +16497,7 @@ class Chunk {
16498
16497
  // This method changes properties on the AST before rendering and must not be async
16499
16498
  renderModules(fileName) {
16500
16499
  const { accessedGlobalsByScope, dependencies, exportNamesByVariable, includedNamespaces, inputOptions: { onwarn }, isEmpty, orderedModules, outputOptions, pluginDriver, renderedModules, snippets } = this;
16501
- const { compact, dynamicImportFunction, format, freeze, namespaceToStringTag, preserveModules } = outputOptions;
16500
+ const { compact, dynamicImportFunction, format, freeze, namespaceToStringTag } = outputOptions;
16502
16501
  const { _, cnst, n } = snippets;
16503
16502
  this.setDynamicImportResolutions(fileName);
16504
16503
  this.setImportMetaResolutions(fileName);
@@ -16537,7 +16536,7 @@ class Chunk {
16537
16536
  usedModules.push(module);
16538
16537
  }
16539
16538
  const namespace = module.namespace;
16540
- if (includedNamespaces.has(module) && !preserveModules) {
16539
+ if (includedNamespaces.has(module)) {
16541
16540
  const rendered = namespace.renderBlock(renderOptions);
16542
16541
  if (namespace.renderFirst())
16543
16542
  hoistedSource += n + rendered;
@@ -16646,12 +16645,12 @@ class Chunk {
16646
16645
  deconflictChunk(this.orderedModules, this.getDependenciesToBeDeconflicted(format !== 'es' && format !== 'system', format === 'amd' || format === 'umd' || format === 'iife', interop), this.imports, usedNames, format, interop, preserveModules, externalLiveBindings, this.chunkByModule, this.externalChunkByModule, syntheticExports, this.exportNamesByVariable, this.accessedGlobalsByScope, this.includedNamespaces);
16647
16646
  }
16648
16647
  setImportMetaResolutions(fileName) {
16649
- const { accessedGlobalsByScope, includedNamespaces, orderedModules, outputOptions: { format, preserveModules } } = this;
16648
+ const { accessedGlobalsByScope, includedNamespaces, orderedModules, outputOptions: { format } } = this;
16650
16649
  for (const module of orderedModules) {
16651
16650
  for (const importMeta of module.importMetas) {
16652
16651
  importMeta.setResolution(format, accessedGlobalsByScope, fileName);
16653
16652
  }
16654
- if (includedNamespaces.has(module) && !preserveModules) {
16653
+ if (includedNamespaces.has(module)) {
16655
16654
  module.namespace.prepare(accessedGlobalsByScope);
16656
16655
  }
16657
16656
  }
@@ -24480,12 +24479,12 @@ class FileEmitter {
24480
24479
  }
24481
24480
  const source = getValidSource(requestedSource, consumedFile, referenceId);
24482
24481
  if (this.output) {
24483
- this.finalizeAsset(consumedFile, source, referenceId, this.output);
24482
+ this.finalizeAdditionalAsset(consumedFile, source, this.output);
24484
24483
  }
24485
24484
  else {
24486
24485
  consumedFile.source = source;
24487
24486
  for (const emitter of this.outputFileEmitters) {
24488
- emitter.finalizeAsset(consumedFile, source, referenceId, emitter.output);
24487
+ emitter.finalizeAdditionalAsset(consumedFile, source, emitter.output);
24489
24488
  }
24490
24489
  }
24491
24490
  };
@@ -24503,11 +24502,21 @@ class FileEmitter {
24503
24502
  reserveFileNameInBundle(emittedFile.fileName, output, this.options.onwarn);
24504
24503
  }
24505
24504
  }
24506
- for (const [referenceId, consumedFile] of this.filesByReferenceId) {
24505
+ const consumedAssetsByHash = new Map();
24506
+ for (const consumedFile of this.filesByReferenceId.values()) {
24507
24507
  if (consumedFile.type === 'asset' && consumedFile.source !== undefined) {
24508
- this.finalizeAsset(consumedFile, consumedFile.source, referenceId, output);
24508
+ if (consumedFile.fileName) {
24509
+ this.finalizeAdditionalAsset(consumedFile, consumedFile.source, output);
24510
+ }
24511
+ else {
24512
+ const sourceHash = getSourceHash(consumedFile.source);
24513
+ getOrCreate(consumedAssetsByHash, sourceHash, () => []).push(consumedFile);
24514
+ }
24509
24515
  }
24510
24516
  }
24517
+ for (const [sourceHash, consumedFiles] of consumedAssetsByHash) {
24518
+ this.finalizeAssetsWithSameSource(consumedFiles, sourceHash, output);
24519
+ }
24511
24520
  };
24512
24521
  this.filesByReferenceId = baseFileEmitter
24513
24522
  ? new Map(baseFileEmitter.filesByReferenceId)
@@ -24523,6 +24532,7 @@ class FileEmitter {
24523
24532
  referenceId = createHash().update(referenceId).digest('hex').slice(0, 8);
24524
24533
  } while (this.filesByReferenceId.has(referenceId) ||
24525
24534
  this.outputFileEmitters.some(({ filesByReferenceId }) => filesByReferenceId.has(referenceId)));
24535
+ file.referenceId = referenceId;
24526
24536
  this.filesByReferenceId.set(referenceId, file);
24527
24537
  for (const { filesByReferenceId } of this.outputFileEmitters) {
24528
24538
  filesByReferenceId.set(referenceId, file);
@@ -24537,27 +24547,28 @@ class FileEmitter {
24537
24547
  fileName: emittedAsset.fileName,
24538
24548
  name: emittedAsset.name,
24539
24549
  needsCodeReference: !!emittedAsset.needsCodeReference,
24550
+ referenceId: '',
24540
24551
  source,
24541
24552
  type: 'asset'
24542
24553
  };
24543
24554
  const referenceId = this.assignReferenceId(consumedAsset, emittedAsset.fileName || emittedAsset.name || String(this.nextIdBase++));
24544
24555
  if (this.output) {
24545
- this.emitAssetWithReferenceId(consumedAsset, referenceId, this.output);
24556
+ this.emitAssetWithReferenceId(consumedAsset, this.output);
24546
24557
  }
24547
24558
  else {
24548
24559
  for (const fileEmitter of this.outputFileEmitters) {
24549
- fileEmitter.emitAssetWithReferenceId(consumedAsset, referenceId, fileEmitter.output);
24560
+ fileEmitter.emitAssetWithReferenceId(consumedAsset, fileEmitter.output);
24550
24561
  }
24551
24562
  }
24552
24563
  return referenceId;
24553
24564
  }
24554
- emitAssetWithReferenceId(consumedAsset, referenceId, output) {
24565
+ emitAssetWithReferenceId(consumedAsset, output) {
24555
24566
  const { fileName, source } = consumedAsset;
24556
24567
  if (fileName) {
24557
24568
  reserveFileNameInBundle(fileName, output, this.options.onwarn);
24558
24569
  }
24559
24570
  if (source !== undefined) {
24560
- this.finalizeAsset(consumedAsset, source, referenceId, output);
24571
+ this.finalizeAdditionalAsset(consumedAsset, source, output);
24561
24572
  }
24562
24573
  }
24563
24574
  emitChunk(emittedChunk) {
@@ -24571,6 +24582,7 @@ class FileEmitter {
24571
24582
  fileName: emittedChunk.fileName,
24572
24583
  module: null,
24573
24584
  name: emittedChunk.name || emittedChunk.id,
24585
+ referenceId: '',
24574
24586
  type: 'chunk'
24575
24587
  };
24576
24588
  this.graph.moduleLoader
@@ -24582,8 +24594,8 @@ class FileEmitter {
24582
24594
  });
24583
24595
  return this.assignReferenceId(consumedChunk, emittedChunk.id);
24584
24596
  }
24585
- finalizeAsset(consumedFile, source, referenceId, { bundle, fileNamesBySource, outputOptions }) {
24586
- let fileName = consumedFile.fileName;
24597
+ finalizeAdditionalAsset(consumedFile, source, { bundle, fileNamesBySource, outputOptions }) {
24598
+ let { fileName, needsCodeReference, referenceId } = consumedFile;
24587
24599
  // Deduplicate assets if an explicit fileName is not provided
24588
24600
  if (!fileName) {
24589
24601
  const sourceHash = getSourceHash(source);
@@ -24596,11 +24608,45 @@ class FileEmitter {
24596
24608
  // We must not modify the original assets to avoid interaction between outputs
24597
24609
  const assetWithFileName = { ...consumedFile, fileName, source };
24598
24610
  this.filesByReferenceId.set(referenceId, assetWithFileName);
24611
+ const existingAsset = bundle[fileName];
24612
+ if (existingAsset?.type === 'asset') {
24613
+ existingAsset.needsCodeReference && (existingAsset.needsCodeReference = needsCodeReference);
24614
+ }
24615
+ else {
24616
+ bundle[fileName] = {
24617
+ fileName,
24618
+ name: consumedFile.name,
24619
+ needsCodeReference,
24620
+ source,
24621
+ type: 'asset'
24622
+ };
24623
+ }
24624
+ }
24625
+ finalizeAssetsWithSameSource(consumedFiles, sourceHash, { bundle, fileNamesBySource, outputOptions }) {
24626
+ let fileName = '';
24627
+ let usedConsumedFile;
24628
+ let needsCodeReference = true;
24629
+ for (const consumedFile of consumedFiles) {
24630
+ needsCodeReference && (needsCodeReference = consumedFile.needsCodeReference);
24631
+ const assetFileName = generateAssetFileName(consumedFile.name, consumedFile.source, sourceHash, outputOptions, bundle);
24632
+ if (!fileName ||
24633
+ assetFileName.length < fileName.length ||
24634
+ (assetFileName.length === fileName.length && assetFileName < fileName)) {
24635
+ fileName = assetFileName;
24636
+ usedConsumedFile = consumedFile;
24637
+ }
24638
+ }
24639
+ fileNamesBySource.set(sourceHash, fileName);
24640
+ for (const consumedFile of consumedFiles) {
24641
+ // We must not modify the original assets to avoid interaction between outputs
24642
+ const assetWithFileName = { ...consumedFile, fileName };
24643
+ this.filesByReferenceId.set(consumedFile.referenceId, assetWithFileName);
24644
+ }
24599
24645
  bundle[fileName] = {
24600
24646
  fileName,
24601
- name: consumedFile.name,
24602
- needsCodeReference: consumedFile.needsCodeReference,
24603
- source,
24647
+ name: usedConsumedFile.name,
24648
+ needsCodeReference,
24649
+ source: usedConsumedFile.source,
24604
24650
  type: 'asset'
24605
24651
  };
24606
24652
  }
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  @license
3
- Rollup.js v3.19.1
4
- Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
3
+ Rollup.js v3.20.1
4
+ Thu, 23 Mar 2023 08:52:57 GMT - commit 75c5113e24f5857abf845776423f55f70b8d1c13
5
5
 
6
6
  https://github.com/rollup/rollup
7
7
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rollup",
3
- "version": "3.19.1",
3
+ "version": "3.20.1",
4
4
  "description": "Next-generation ES module bundler",
5
5
  "main": "dist/rollup.js",
6
6
  "module": "dist/es/rollup.js",