From 7d9485b6b2b3073bb5f55c606141b9a91046be81 Mon Sep 17 00:00:00 2001 From: Agnieszka Gawrys Date: Fri, 8 Sep 2023 13:03:44 -0700 Subject: [PATCH 01/20] add initial unstable MSB config and test cases, rename to unstable later --- .../bundlers/default/src/DefaultBundler.js | 157 +++++++++++++++++- packages/core/core/src/public/Bundle.js | 4 + .../core/src/public/MutableBundleGraph.js | 7 + .../core/integration-tests/test/bundler.js | 146 ++++++++++++++++ .../manual-bundle-duplication-option/a.js | 21 +++ .../manual-bundle-duplication-option/b.js | 6 + .../manual-bundle-duplication-option/bar.js | 4 + .../manual-bundle-duplication-option/foo.js | 3 + .../manual-bundle-duplication-option/index.js | 3 + .../package.json | 22 +++ .../yarn.lock | 0 .../integration/manual-bundle-parent/a.js | 19 +++ .../integration/manual-bundle-parent/b.js | 8 + .../integration/manual-bundle-parent/bar.js | 2 + .../integration/manual-bundle-parent/c.js | 5 + .../integration/manual-bundle-parent/foo.js | 3 + .../integration/manual-bundle-parent/index.js | 3 + .../manual-bundle-parent/package.json | 21 +++ .../manual-bundle-parent/yarn.lock | 0 .../test/integration/manual-bundle-split/a.js | 26 +++ .../test/integration/manual-bundle-split/b.js | 6 + .../integration/manual-bundle-split/bar.js | 4 + .../test/integration/manual-bundle-split/c.js | 6 + .../test/integration/manual-bundle-split/d.js | 6 + .../test/integration/manual-bundle-split/e.js | 6 + .../test/integration/manual-bundle-split/f.js | 6 + .../integration/manual-bundle-split/foo.js | 3 + .../test/integration/manual-bundle-split/g.js | 6 + .../integration/manual-bundle-split/index.js | 3 + .../manual-bundle-split/package.json | 22 +++ .../integration/manual-bundle-split/yarn.lock | 0 .../integration/manual-bundle-typeglob/a.css | 4 + .../integration/manual-bundle-typeglob/a.js | 19 +++ .../integration/manual-bundle-typeglob/foo.js | 4 + .../manual-bundle-typeglob/index.js | 3 + .../manual-bundle-typeglob/package.json | 11 ++ .../manual-bundle-typeglob/yarn.lock | 0 .../test/integration/manual-bundle/a.js | 19 +++ .../test/integration/manual-bundle/b.js | 6 + .../test/integration/manual-bundle/foo.js | 3 + .../test/integration/manual-bundle/index.js | 3 + .../integration/manual-bundle/package.json | 12 ++ .../test/integration/manual-bundle/yarn.lock | 0 43 files changed, 607 insertions(+), 5 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/a.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/b.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/bar.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/foo.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/index.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/package.json create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/yarn.lock create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/a.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/b.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/bar.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/c.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/foo.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/index.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/package.json create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/yarn.lock create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/a.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/b.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/bar.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/c.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/d.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/e.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/f.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/foo.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/g.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/index.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/package.json create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/yarn.lock create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.css create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/foo.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/index.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/package.json create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/yarn.lock create mode 100644 packages/core/integration-tests/test/integration/manual-bundle/a.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle/b.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle/foo.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle/index.js create mode 100644 packages/core/integration-tests/test/integration/manual-bundle/package.json create mode 100644 packages/core/integration-tests/test/integration/manual-bundle/yarn.lock diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index e95912d1654..f577ef36cde 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -19,18 +19,33 @@ import {ContentGraph, Graph} from '@parcel/graph'; import invariant from 'assert'; import {ALL_EDGE_TYPES} from '@parcel/graph'; import {Bundler} from '@parcel/plugin'; -import {setEqual, validateSchema, DefaultMap, BitSet} from '@parcel/utils'; +import { + setEqual, + validateSchema, + DefaultMap, + BitSet, + isGlobMatch, +} from '@parcel/utils'; import nullthrows from 'nullthrows'; +import path from 'path'; import {encodeJSONKeyComponent} from '@parcel/diagnostic'; +type ManualSharedBundlesType = Array<{| + name: string, + assets: Array, //this is an array of globs +|}>; + type BundlerConfig = {| http?: number, minBundles?: number, minBundleSize?: number, maxParallelRequests?: number, + manualSharedBundles: ManualSharedBundlesType, |}; type ResolvedBundlerConfig = {| + projectPath: string, + manualSharedBundles: ManualSharedBundlesType, minBundles: number, minBundleSize: number, maxParallelRequests: number, @@ -40,11 +55,13 @@ type ResolvedBundlerConfig = {| const HTTP_OPTIONS = { '1': { minBundles: 1, + manualSharedBundles: [], minBundleSize: 30000, maxParallelRequests: 6, }, '2': { minBundles: 1, + manualSharedBundles: [], minBundleSize: 20000, maxParallelRequests: 25, }, @@ -64,6 +81,7 @@ export type Bundle = {| target: Target, env: Environment, type: string, + manualSharedBundle: string, // for naming purposes |}; const dependencyPriorityEdges = { @@ -91,6 +109,7 @@ type IdealGraph = {| bundleGraph: Graph, bundleGroupBundleIds: Set, assetReference: DefaultMap>, + manualAssetToBundle: Map, |}; /** @@ -137,12 +156,14 @@ function decorateLegacyGraph( bundleGraph: idealBundleGraph, dependencyBundleGraph, bundleGroupBundleIds, + manualAssetToBundle, } = idealGraph; let entryBundleToBundleGroup: Map = new Map(); // Step Create Bundles: Create bundle groups, bundles, and shared bundles and add assets to them for (let [bundleNodeId, idealBundle] of idealBundleGraph.nodes) { if (idealBundle === 'root') continue; let entryAsset = idealBundle.mainEntryAsset; + let bundleGroups = []; let bundleGroup; let bundle; @@ -158,10 +179,15 @@ function decorateLegacyGraph( return dependency.value; }); for (let dependency of dependencies) { - bundleGroup = bundleGraph.createBundleGroup( - dependency, - idealBundle.target, - ); + if (bundleGraph.getResolvedAsset(dependency).id === entryAsset.id) { + bundleGroup = bundleGraph.createBundleGroup( + dependency, + idealBundle.target, + ); + bundleGroups.push(bundleGroup); + } else { + //Warning? + } } invariant(bundleGroup); entryBundleToBundleGroup.set(bundleNodeId, bundleGroup); @@ -172,6 +198,7 @@ function decorateLegacyGraph( needsStableName: idealBundle.needsStableName, bundleBehavior: idealBundle.bundleBehavior, target: idealBundle.target, + manualSharedBundle: idealBundle.manualSharedBundle, }), ); @@ -190,6 +217,7 @@ function decorateLegacyGraph( type: idealBundle.type, target: idealBundle.target, env: idealBundle.env, + manualSharedBundle: idealBundle.manualSharedBundle, }), ); } else if (idealBundle.uniqueKey != null) { @@ -201,6 +229,7 @@ function decorateLegacyGraph( type: idealBundle.type, target: idealBundle.target, env: idealBundle.env, + manualSharedBundle: idealBundle.manualSharedBundle, }), ); } else { @@ -211,6 +240,7 @@ function decorateLegacyGraph( needsStableName: idealBundle.needsStableName, bundleBehavior: idealBundle.bundleBehavior, target: idealBundle.target, + manualSharedBundle: idealBundle.manualSharedBundle, }), ); } @@ -240,6 +270,23 @@ function decorateLegacyGraph( } } } + // Unstable Manual Shared Bundles + // NOTE: This only works under the assumption that manual shared bundles would have + // always already been loaded before the bundle that requires internalization. + for (let manualSharedAsset of manualAssetToBundle.keys()) { + let incomingDeps = bundleGraph.getIncomingDependencies(manualSharedAsset); + for (let incomingDep of incomingDeps) { + if ( + incomingDep.priority === 'lazy' && + incomingDep.specifierType !== 'url' + ) { + let bundles = bundleGraph.getBundlesWithDependency(incomingDep); + for (let bundle of bundles) { + bundleGraph.internalizeAsyncDependency(bundle, incomingDep); + } + } + } + } // Step Add to BundleGroups: Add bundles to their bundle groups idealBundleGraph.traverse((nodeId, _, actions) => { @@ -368,6 +415,82 @@ function createIdealGraph( let assets = []; let typeChangeIds = new Set(); + function makeManualAssetToConfigLookup() { + if (config.manualSharedBundles.length == 0) { + return new Map(); + } + let parentsToConfig = new DefaultMap(() => []); + let activeToConfig = new DefaultMap(() => []); + for (let c of config.manualSharedBundles) { + if (c.parent) { + parentsToConfig.get(path.join(config.projectRoot, c.parent)).push(c); + } + if (c.active) { + for (let a of c.active) { + activeToConfig.get(path.join(config.projectRoot, a)).push(c); + } + } + } + let numParentsToFind = parentsToConfig.size; + let numActivesToFind = activeToConfig.size; + assetGraph.traverse((node, _, actions) => { + if ( + node.type === 'asset' && + (parentsToConfig.has(node.value.filePath) || + activeToConfig.has(node.value.filePath)) + ) { + for (let c of parentsToConfig.get(node.value.filePath)) { + c.parentAsset = node.value; + numParentsToFind--; + } + for (let c of activeToConfig.get(node.value.filePath)) { + if (!c.actives) { + c.actives = []; + } + c.actives.push(node.value); + numActivesToFind--; + } + if (numParentsToFind === 0 && numActivesToFind < 1) { + // If we've found all parents we can stop traversal + actions.stop(); + } + } + }); + let manualAssetToConfig = new Map(); + // Process in reverse order so earlier configs take precedence + for (let c of config.manualSharedBundles + .filter(c => !c.parent || c.parentAsset) + .reverse()) { + assetGraph.traverse((node, _, actions) => { + if ( + node.type === 'asset' && + (!Array.isArray(c.types) || c.types.includes(node.value.type)) && + isGlobMatch( + node.value.filePath.slice(config.projectRoot.length), + c.assets, + ) + ) { + manualAssetToConfig.set(node.value, c); + return; + } + if (node.type === 'dependency' && node.value.priority === 'lazy') { + // Don't walk past the bundle group assets + actions.skipChildren(); + } + }, c.parentAsset); + } + return manualAssetToConfig; + } + //Manual is a map of the user-given name to the bundle node Id that corresponds to ALL the assets that match any glob in that user-specified array + let manualSharedMap: Map = new Map(); + // May need a map to be able to look up NON- bundle root assets which need special case instructions + // Use this when placing assets into bundles, to avoid duplication + let manualAssetToBundle: Map = new Map(); + let manualAssetToConfig = makeManualAssetToConfigLookup(); + let manualBundleToInternalizedAsset: Map< + NodeId, + Array, + > = new DefaultMap(() => []); /** * Step Create Bundles: Traverse the assetGraph (aka MutableBundleGraph) and create bundles * for asset type changes, parallel, inline, and async or lazy dependencies, @@ -1258,6 +1381,7 @@ function createIdealGraph( dependencyBundleGraph, bundleGroupBundleIds, assetReference, + manualAssetToBundle, }; } @@ -1268,6 +1392,23 @@ const CONFIG_SCHEMA: SchemaEntity = { type: 'number', enum: Object.keys(HTTP_OPTIONS).map(k => Number(k)), }, + manualSharedBundles: { + type: 'array', + items: { + type: 'object', + properties: { + name: { + type: 'string', + }, + assets: { + type: 'array', + items: { + type: 'string', + }, + }, + }, + }, + }, minBundles: { type: 'number', }, @@ -1289,6 +1430,7 @@ function createBundle(opts: {| type?: string, needsStableName?: boolean, bundleBehavior?: ?BundleBehavior, + manualSharedBundle?: string, |}): Bundle { if (opts.asset == null) { return { @@ -1302,6 +1444,7 @@ function createBundle(opts: {| env: nullthrows(opts.env), needsStableName: Boolean(opts.needsStableName), bundleBehavior: opts.bundleBehavior, + manualSharedBundle: opts.manualSharedBundle, }; } @@ -1317,6 +1460,7 @@ function createBundle(opts: {| env: opts.env ?? asset.env, needsStableName: Boolean(opts.needsStableName), bundleBehavior: opts.bundleBehavior ?? asset.bundleBehavior, + manualSharedBundle: opts.manualSharedBundle, }; } @@ -1373,6 +1517,9 @@ async function loadBundlerConfig( let defaults = HTTP_OPTIONS[http]; return { + projectRoot: options.projectRoot, + manualSharedBundles: + conf.contents.manualSharedBundles ?? defaults.manualSharedBundles, minBundles: conf.contents.minBundles ?? defaults.minBundles, minBundleSize: conf.contents.minBundleSize ?? defaults.minBundleSize, maxParallelRequests: diff --git a/packages/core/core/src/public/Bundle.js b/packages/core/core/src/public/Bundle.js index fb95d1a5359..d1683dbfc73 100644 --- a/packages/core/core/src/public/Bundle.js +++ b/packages/core/core/src/public/Bundle.js @@ -129,6 +129,10 @@ export class Bundle implements IBundle { return this.#bundle.isSplittable; } + get manualSharedBundle() { + return this.#bundle.manualSharedBundle; + } + get target(): ITarget { return new Target(this.#bundle.target, this.#options); } diff --git a/packages/core/core/src/public/MutableBundleGraph.js b/packages/core/core/src/public/MutableBundleGraph.js index 7565db82c0a..7ca812647ec 100644 --- a/packages/core/core/src/public/MutableBundleGraph.js +++ b/packages/core/core/src/public/MutableBundleGraph.js @@ -76,6 +76,12 @@ export default class MutableBundleGraph ); } + getResolvedAsset(dependency) { + return this.#graph.getResolvedAsset( + dependencyToInternalDependency(dependency), + ); + } + createBundleGroup(dependency: IDependency, target: Target): IBundleGroup { let dependencyNode = this.#graph._graph.getNodeByContentKey(dependency.id); if (!dependencyNode) { @@ -232,6 +238,7 @@ export default class MutableBundleGraph name: null, displayName: null, publicId, + manualSharedBundle: opts.manualSharedBundle, }, }; diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index 16e706a009e..327215f50fc 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -391,4 +391,150 @@ describe('bundler', function () { }, ]); }); + + // The following tests exercise UNSTABLE Manual Shared bundle option, which allows users + // to specify globs of assets for shared bundles and name them + it('should support manual shared bundles via glob config option for different types', async function () { + let b = await bundle( + path.join(__dirname, 'integration/manual-bundle-typeglob/index.js'), + { + mode: 'production', + defaultTargetOptions: { + shouldScopeHoist: false, + }, + }, + ); + + assertBundles(b, [ + { + assets: ['foo.js'], + }, + { + assets: ['a.js'], + }, + { + assets: [ + 'bundle-manifest.js', + 'bundle-url.js', + 'cacheLoader.js', + 'css-loader.js', + 'esmodule-helpers.js', + 'index.js', + 'js-loader.js', + ], + }, + { + assets: ['a.css'], //our manual sharedbundle + }, + ]); + }); + it('should support manual shared bundles via glob config option for sync and async assets', async function () { + let b = await bundle( + path.join(__dirname, 'integration/manual-bundle/index.js'), + ); + assertBundles(b, [ + { + assets: ['foo.js', 'a.js', 'b.js'], + }, + { + assets: [ + 'bundle-url.js', + 'cacheLoader.js', + 'esmodule-helpers.js', + 'index.js', + 'js-loader.js', + ], + }, + ]); + }); + it('should support manual shared bundles via parent glob config option', async function () { + let b = await bundle( + path.join(__dirname, 'integration/manual-bundle-parent/index.js'), + ); + //assert that a,b,c are in one bundle, causeing foo and bar to overfetch, due to MSB config + assertBundles(b, [ + { + assets: ['foo.js'], + }, + { + assets: ['bar.js'], + }, + { + assets: ['c.js', 'a.js', 'b.js'], + }, + + { + assets: [ + 'bundle-url.js', + 'cacheLoader.js', + 'esmodule-helpers.js', + 'index.js', + 'js-loader.js', + ], + }, + ]); + }); + it('should support manual shared bundles for specific bundles, duplicated the assets for others', async function () { + // In this case we want to allow for manual shared bundles to only deduplicate for specific + let b = await bundle( + path.join( + __dirname, + 'integration/manual-bundle-duplication-option/index.js', + ), + ); + //assert that foo has a in bundlegroup + assertBundles(b, [ + { + assets: ['foo.js'], + }, + { + assets: ['a.js', 'b.js'], + }, + { + assets: ['bar.js', 'b.js'], // b is duplicated because 'bar' is not an 'Active' for this MSB + }, + { + assets: [ + 'bundle-url.js', + 'cacheLoader.js', + 'esmodule-helpers.js', + 'index.js', + 'js-loader.js', + ], + }, + ]); + }); + it('should support consistently splitting manual shared bundles', async function () { + // In this case we want to allow for manual shared bundles to only deduplicate for specific + let b = await bundle( + path.join(__dirname, 'integration/manual-bundle-split/index.js'), + ); + //assert that foo has a in bundlegroup + assertBundles(b, [ + { + assets: ['foo.js'], + }, + { + assets: ['d.js', 'e.js'], + }, + { + assets: ['f.js', 'c.js', 'b.js'], + }, + { + assets: ['g.js'], + }, + { + assets: ['bar.js'], // b is duplicated because 'bar' is not an 'Active' for this MSB + }, + { + assets: [ + 'bundle-url.js', + 'cacheLoader.js', + 'esmodule-helpers.js', + 'index.js', + 'js-loader.js', + ], + }, + ]); + }); }); diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/a.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/a.js new file mode 100644 index 00000000000..5b410b2f71c --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/a.js @@ -0,0 +1,21 @@ +import b from './b'; + +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/b.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/b.js new file mode 100644 index 00000000000..d9cf43b2cee --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/b.js @@ -0,0 +1,6 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'b'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/bar.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/bar.js new file mode 100644 index 00000000000..6b156cafe3e --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/bar.js @@ -0,0 +1,4 @@ + +import b from './b'; + +export default b; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/foo.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/foo.js new file mode 100644 index 00000000000..454dc70767c --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/foo.js @@ -0,0 +1,3 @@ +import a from './a'; + +export default a; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/index.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/index.js new file mode 100644 index 00000000000..9188d9282cb --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/index.js @@ -0,0 +1,3 @@ +import('./foo'); +import('./bar'); +export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/package.json b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/package.json new file mode 100644 index 00000000000..a8819bc6011 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/package.json @@ -0,0 +1,22 @@ +{ + "source": "./index.js", + "@parcel/bundler-default": { + "maxParallelRequests": 10, + "minBundleSize": 0, + "manualSharedBundles": [ + { + "name": "a", + "types": [ + "js", + "css" + ], + "parent": "a.js", + "assets": [ + "**" + ], + "active": ["foo.js"] + } + ] + } + } + \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/a.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/a.js new file mode 100644 index 00000000000..6da74812b41 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-parent/a.js @@ -0,0 +1,19 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/b.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/b.js new file mode 100644 index 00000000000..8280d11b78b --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-parent/b.js @@ -0,0 +1,8 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; +import a from './a'; +import c from './c'; + +export default 'b' + b + c; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/bar.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/bar.js new file mode 100644 index 00000000000..b7c74987b22 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-parent/bar.js @@ -0,0 +1,2 @@ +import b from './b'; +import c from './c'; diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/c.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/c.js new file mode 100644 index 00000000000..87d49e84f66 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-parent/c.js @@ -0,0 +1,5 @@ +let str = `suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'c'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/foo.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/foo.js new file mode 100644 index 00000000000..454dc70767c --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-parent/foo.js @@ -0,0 +1,3 @@ +import a from './a'; + +export default a; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/index.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/index.js new file mode 100644 index 00000000000..9188d9282cb --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-parent/index.js @@ -0,0 +1,3 @@ +import('./foo'); +import('./bar'); +export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/package.json b/packages/core/integration-tests/test/integration/manual-bundle-parent/package.json new file mode 100644 index 00000000000..220abdf1b3a --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-parent/package.json @@ -0,0 +1,21 @@ +{ + "source": "./index.js", + "@parcel/bundler-default": { + "maxParallelRequests": 10, + "minBundleSize": 0, + "manualSharedBundles": [ + { + "name": "b", + "types": [ + "js", + "css" + ], + "parent": "b.js", + "assets": [ + "**" + ] + } + ] + } + } + \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle-parent/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/a.js b/packages/core/integration-tests/test/integration/manual-bundle-split/a.js new file mode 100644 index 00000000000..a72c8e015f1 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/a.js @@ -0,0 +1,26 @@ +import b from './b'; +import c from './c'; +import d from './d'; +import e from './e'; +import f from './f'; +import g from './g'; + +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/b.js b/packages/core/integration-tests/test/integration/manual-bundle-split/b.js new file mode 100644 index 00000000000..d9cf43b2cee --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/b.js @@ -0,0 +1,6 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'b'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/bar.js b/packages/core/integration-tests/test/integration/manual-bundle-split/bar.js new file mode 100644 index 00000000000..6b156cafe3e --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/bar.js @@ -0,0 +1,4 @@ + +import b from './b'; + +export default b; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/c.js b/packages/core/integration-tests/test/integration/manual-bundle-split/c.js new file mode 100644 index 00000000000..582fac9af63 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/c.js @@ -0,0 +1,6 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'c'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/d.js b/packages/core/integration-tests/test/integration/manual-bundle-split/d.js new file mode 100644 index 00000000000..b6780483e62 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/d.js @@ -0,0 +1,6 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'd'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/e.js b/packages/core/integration-tests/test/integration/manual-bundle-split/e.js new file mode 100644 index 00000000000..0634ef61fb2 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/e.js @@ -0,0 +1,6 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'e'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/f.js b/packages/core/integration-tests/test/integration/manual-bundle-split/f.js new file mode 100644 index 00000000000..4a0626d2ebc --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/f.js @@ -0,0 +1,6 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'f'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/foo.js b/packages/core/integration-tests/test/integration/manual-bundle-split/foo.js new file mode 100644 index 00000000000..454dc70767c --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/foo.js @@ -0,0 +1,3 @@ +import a from './a'; + +export default a; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/g.js b/packages/core/integration-tests/test/integration/manual-bundle-split/g.js new file mode 100644 index 00000000000..0b9a055fd03 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/g.js @@ -0,0 +1,6 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'g'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/index.js b/packages/core/integration-tests/test/integration/manual-bundle-split/index.js new file mode 100644 index 00000000000..9188d9282cb --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/index.js @@ -0,0 +1,3 @@ +import('./foo'); +import('./bar'); +export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/package.json b/packages/core/integration-tests/test/integration/manual-bundle-split/package.json new file mode 100644 index 00000000000..6c467fa44f5 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/package.json @@ -0,0 +1,22 @@ +{ + "source": "./index.js", + "@parcel/bundler-default": { + "maxParallelRequests": 10, + "minBundleSize": 0, + "manualSharedBundles": [ + { + "name": "a", + "types": [ + "js", + "css" + ], + "parent": "a.js", + "assets": [ + "**" + ], + "split": 3 + } + ] + } + } + \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle-split/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.css b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.css new file mode 100644 index 00000000000..5f6f6b58e31 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.css @@ -0,0 +1,4 @@ +body { + background: red; + } + \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.js b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.js new file mode 100644 index 00000000000..6da74812b41 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.js @@ -0,0 +1,19 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/foo.js b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/foo.js new file mode 100644 index 00000000000..36515344205 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/foo.js @@ -0,0 +1,4 @@ +import a from './a.js'; +import style from './a.css'; + +export default a; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/index.js b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/index.js new file mode 100644 index 00000000000..93c4c3105c4 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/index.js @@ -0,0 +1,3 @@ +import('./foo'); + +export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/package.json b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/package.json new file mode 100644 index 00000000000..0e475a17f19 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/package.json @@ -0,0 +1,11 @@ +{ + "source": "./index.js", + "@parcel/bundler-default": { + "maxParallelRequests": 10, + "minBundleSize": 0, + "manualSharedBundles": [{ + "name": "a", + "assets": ["/a.*"] + }] + } + } \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/manual-bundle/a.js b/packages/core/integration-tests/test/integration/manual-bundle/a.js new file mode 100644 index 00000000000..6da74812b41 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle/a.js @@ -0,0 +1,19 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. +Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/b.js b/packages/core/integration-tests/test/integration/manual-bundle/b.js new file mode 100644 index 00000000000..d9cf43b2cee --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle/b.js @@ -0,0 +1,6 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'b'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/foo.js b/packages/core/integration-tests/test/integration/manual-bundle/foo.js new file mode 100644 index 00000000000..60f09aaf2bb --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle/foo.js @@ -0,0 +1,3 @@ +import a from './a'; + +export default a + import('./b'); \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/index.js b/packages/core/integration-tests/test/integration/manual-bundle/index.js new file mode 100644 index 00000000000..93c4c3105c4 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle/index.js @@ -0,0 +1,3 @@ +import('./foo'); + +export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/package.json b/packages/core/integration-tests/test/integration/manual-bundle/package.json new file mode 100644 index 00000000000..edfad4d7ef9 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle/package.json @@ -0,0 +1,12 @@ +{ + "source": "./index.js", + "@parcel/bundler-default": { + "maxParallelRequests": 10, + "minBundleSize": 0, + "manualSharedBundles": [{ + "name": "a", + "assets": ["/a.js", "/foo.js", "/b.js"] + }] + } + } + \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d From 2ab2b4abb53783cdc81bddee6c3d3d1f7c55427b Mon Sep 17 00:00:00 2001 From: Agnieszka Gawrys Date: Mon, 18 Sep 2023 10:30:07 -0400 Subject: [PATCH 02/20] add basic functionality and skip unsupported test cases for now --- .../bundlers/default/src/DefaultBundler.js | 201 +++++++++++++++--- .../core/integration-tests/test/bundler.js | 8 +- 2 files changed, 181 insertions(+), 28 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index f577ef36cde..1c3565f0b32 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -416,47 +416,32 @@ function createIdealGraph( let typeChangeIds = new Set(); function makeManualAssetToConfigLookup() { - if (config.manualSharedBundles.length == 0) { - return new Map(); - } let parentsToConfig = new DefaultMap(() => []); - let activeToConfig = new DefaultMap(() => []); + for (let c of config.manualSharedBundles) { if (c.parent) { parentsToConfig.get(path.join(config.projectRoot, c.parent)).push(c); } - if (c.active) { - for (let a of c.active) { - activeToConfig.get(path.join(config.projectRoot, a)).push(c); - } - } } let numParentsToFind = parentsToConfig.size; - let numActivesToFind = activeToConfig.size; + assetGraph.traverse((node, _, actions) => { - if ( - node.type === 'asset' && - (parentsToConfig.has(node.value.filePath) || - activeToConfig.has(node.value.filePath)) - ) { + if (node.type === 'asset' && parentsToConfig.has(node.value.filePath)) { for (let c of parentsToConfig.get(node.value.filePath)) { c.parentAsset = node.value; - numParentsToFind--; - } - for (let c of activeToConfig.get(node.value.filePath)) { - if (!c.actives) { - c.actives = []; - } - c.actives.push(node.value); - numActivesToFind--; } - if (numParentsToFind === 0 && numActivesToFind < 1) { + + numParentsToFind--; + + if (numParentsToFind === 0) { // If we've found all parents we can stop traversal actions.stop(); } } }); + let manualAssetToConfig = new Map(); + // Process in reverse order so earlier configs take precedence for (let c of config.manualSharedBundles .filter(c => !c.parent || c.parentAsset) @@ -473,14 +458,17 @@ function createIdealGraph( manualAssetToConfig.set(node.value, c); return; } + if (node.type === 'dependency' && node.value.priority === 'lazy') { // Don't walk past the bundle group assets actions.skipChildren(); } }, c.parentAsset); } + return manualAssetToConfig; } + //Manual is a map of the user-given name to the bundle node Id that corresponds to ALL the assets that match any glob in that user-specified array let manualSharedMap: Map = new Map(); // May need a map to be able to look up NON- bundle root assets which need special case instructions @@ -491,6 +479,7 @@ function createIdealGraph( NodeId, Array, > = new DefaultMap(() => []); + /** * Step Create Bundles: Traverse the assetGraph (aka MutableBundleGraph) and create bundles * for asset type changes, parallel, inline, and async or lazy dependencies, @@ -538,12 +527,29 @@ function createIdealGraph( } for (let childAsset of assets) { + // MSB Step 1: Match glob on filepath and type for any asset + let manualSharedBundleKey; + let manualSharedObject = manualAssetToConfig.get(childAsset); + + if (manualSharedObject) { + // MSB Step 2: Generate a key for which to look up this manual bundle with + manualSharedBundleKey = + manualSharedObject.name + ',' + childAsset.type; + } if ( dependency.priority === 'lazy' || childAsset.bundleBehavior === 'isolated' // An isolated Dependency, or Bundle must contain all assets it needs to load. ) { let bundleId = bundles.get(childAsset.id); let bundle; + + if ( + // MSB Step 3: If a bundle for these globs already exsits, use it + manualSharedBundleKey != null && + manualSharedMap.has(manualSharedBundleKey) + ) { + bundleId = nullthrows(manualSharedMap.get(manualSharedBundleKey)); + } if (bundleId == null) { let firstBundleGroup = nullthrows( bundleGraph.getNode(stack[0][1]), @@ -565,6 +571,18 @@ function createIdealGraph( bundleRoots.set(childAsset, [bundleId, bundleId]); bundleGroupBundleIds.add(bundleId); bundleGraph.addEdge(bundleGraphRootNodeId, bundleId); + if (manualSharedObject) { + // MSB Step 4: If this is the first instance of a match, set it appropriately + //If this was an existing glob we must add the asset + manualAssetToBundle.set(childAsset, bundleId); // Add asset to bundle + + invariant(bundle !== 'root' && bundle !== null); + bundle.size = childAsset.stats.size; + invariant(manualSharedBundleKey != null); + if (!manualSharedMap.has(manualSharedBundleKey)) { + manualSharedMap.set(manualSharedBundleKey, bundleId); + } + } } else { bundle = nullthrows(bundleGraph.getNode(bundleId)); invariant(bundle !== 'root'); @@ -577,6 +595,34 @@ function createIdealGraph( ) { bundle.bundleBehavior = dependency.bundleBehavior; } + if (manualSharedObject) { + // MSB Step 5: If a bundle for this asset already exists and we have a glob match + // simply add the asset if it doesn't already have it + //If this was an existing glob we must add the asset + manualAssetToBundle.set(childAsset, bundleId); // Add asset to bundle + + invariant(bundle !== 'root' && bundle !== null); + + if (!bundle.assets.has(childAsset)) { + bundle.assets.add(childAsset); + bundle.size += childAsset.stats.size; + } + + bundles.set(childAsset.id, bundleId); + bundleRoots.set(childAsset, [bundleId, bundleId]); + + if (!bundle.mainEntryAsset) { + bundle.mainEntryAsset = childAsset; + } else { + manualBundleToInternalizedAsset + .get(bundleId) + .push(childAsset); + } + invariant(manualSharedBundleKey != null); + if (!manualSharedMap.has(manualSharedBundleKey)) { + manualSharedMap.set(manualSharedBundleKey, bundleId); + } + } } dependencyBundleGraph.addEdge( @@ -635,6 +681,15 @@ function createIdealGraph( ) { bundleId = bundleGroupNodeId; } + if ( + // MSB Step 3 alt: If a bundle for these globs already exsits, use it + manualSharedBundleKey != null && + manualSharedMap.has(manualSharedBundleKey) + ) { + // If theres an existing bundle for this glob, add the asset + bundleId = nullthrows(manualSharedMap.get(manualSharedBundleKey)); + bundle = nullthrows(bundleGraph.getNode(bundleId)); + } if (bundleId == null) { bundle = createBundle({ // Bundles created from type changes shouldn't have an entry asset. @@ -658,6 +713,19 @@ function createIdealGraph( if (parentAsset.type !== childAsset.type) { typeChangeIds.add(bundleId); } + if (manualSharedObject) { + //If this was an existing glob we must add the asset + manualAssetToBundle.set(childAsset, bundleId); // Add asset to bundle + + invariant(bundle !== 'root' && bundle !== null); + bundle.assets.add(childAsset); + bundle.size += childAsset.stats.size; + bundles.set(childAsset.id, bundleId); // bundleRoots.set(childAsset, [bundleId, bundleId]); + invariant(manualSharedBundleKey != null); + if (!manualSharedMap.has(manualSharedBundleKey)) { + manualSharedMap.set(manualSharedBundleKey, bundleId); + } + } } else { bundle = bundleGraph.getNode(bundleId); invariant(bundle != null && bundle !== 'root'); @@ -671,6 +739,21 @@ function createIdealGraph( bundle.bundleBehavior = dependency.bundleBehavior; } } + //GLOB MATCHING - If the bundle did exist, added the new asset, if the bundle was jsut created, add the key to map + if (manualSharedObject) { + //If this was an existing glob we must add the asset + manualAssetToBundle.set(childAsset, bundleId); // Add asset to bundle + + invariant(bundle !== 'root' && bundle !== null); + bundle.assets.add(childAsset); + bundle.size += childAsset.stats.size; + bundles.set(childAsset.id, bundleId); + + invariant(manualSharedBundleKey != null); + if (!manualSharedMap.has(manualSharedBundleKey)) { + manualSharedMap.set(manualSharedBundleKey, bundleId); + } + } bundles.set(childAsset.id, bundleId); @@ -716,6 +799,18 @@ function createIdealGraph( let assetSet = BitSet.from(assets); + // Strip MSBs of entries + for (let nodeId of manualBundleToInternalizedAsset.keys()) { + let bundle = bundleGraph.getNode(nodeId); + if (!bundle.internalizedAssets) { + bundle.internalizedAssets = assetSet.cloneEmpty(); + } + for (let asset of manualBundleToInternalizedAsset.get(nodeId)) { + bundle.internalizedAssets.add(asset); + } + bundle.mainEntryAsset = null; + bundleGroupBundleIds.delete(nodeId); // manual bundles can now act as shared, non-bundle group, should they be non-bundleRoots as well? + } // Step Merge Type Change Bundles: Clean up type change bundles within the exact same bundlegroups for (let [nodeIdA, a] of bundleGraph.nodes) { //if bundle b bundlegroups ==== bundle a bundlegroups then combine type changes @@ -998,6 +1093,8 @@ function createIdealGraph( let reachableEntries = []; let reachableNonEntries = []; + let manualSharedObject = manualAssetToConfig.get(asset); + // Filter out entries, since they can't have shared bundles. // Neither can non-splittable, isolated, or needing of stable name bundles. // Reserve those filtered out bundles since we add the asset back into them. @@ -1020,6 +1117,62 @@ function createIdealGraph( // bundle does not contain the asset in its ancestry reachable = reachable.filter(b => !ancestorAssets.get(b)?.has(asset)); + // If we encounter a "manual" asset, draw an edge from reachable to its MSB + if (manualSharedObject && reachable.length >= 1) { + let bundle; + let bundleId; + let manualSharedBundleKey = manualSharedObject.name + ',' + asset.type; + let sourceBundles = reachable.map(a => nullthrows(bundles.get(a.id))); + let firstSourceBundle = nullthrows(bundleGraph.getNode(sourceBundles[0])); + invariant(firstSourceBundle !== 'root'); + + if (!manualSharedMap.has(manualSharedBundleKey)) { + //CreateBundle + bundle = createBundle({ + target: firstSourceBundle.target, + type: firstSourceBundle.type, + env: firstSourceBundle.env, + manualSharedBundle: manualSharedObject + ? manualSharedObject.name + : null, + }); + bundle.sourceBundles = new Set(sourceBundles); + bundle.assets.add(asset); + bundleId = bundleGraph.addNode(bundle); + manualSharedMap.set(manualSharedBundleKey, bundleId); + } else { + bundleId = nullthrows(manualSharedMap.get(manualSharedBundleKey)); + bundle = nullthrows(bundleGraph.getNode(bundleId)); + invariant( + bundle != null && bundle != 'root', + 'We tried to use the root incorrectly', + ); + + if (!bundle.assets.has(asset)) { + bundle.assets.add(asset); + bundle.size += asset.stats.size; + } + + for (let s of sourceBundles) { + if (s != bundleId) { + bundle.sourceBundles.add(s); + } + } + } + + for (let sourceBundleId of sourceBundles) { + if (bundleId !== sourceBundleId) { + bundleGraph.addEdge(sourceBundleId, bundleId); + } + } + + dependencyBundleGraph.addNodeByContentKeyIfNeeded(String(bundleId), { + value: bundle, + type: 'bundle', + }); + continue; + } + // Finally, filter out bundleRoots (bundles) from this assets // reachable if they are subgraphs, and reuse that subgraph bundle // by drawing an edge. Essentially, if two bundles within an asset's diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index 327215f50fc..e975ece7c66 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -394,7 +394,7 @@ describe('bundler', function () { // The following tests exercise UNSTABLE Manual Shared bundle option, which allows users // to specify globs of assets for shared bundles and name them - it('should support manual shared bundles via glob config option for different types', async function () { + it.skip('should support manual shared bundles via glob config option for different types', async function () { let b = await bundle( path.join(__dirname, 'integration/manual-bundle-typeglob/index.js'), { @@ -428,7 +428,7 @@ describe('bundler', function () { }, ]); }); - it('should support manual shared bundles via glob config option for sync and async assets', async function () { + it.skip('should support manual shared bundles via glob config option for sync and async assets', async function () { let b = await bundle( path.join(__dirname, 'integration/manual-bundle/index.js'), ); @@ -474,7 +474,7 @@ describe('bundler', function () { }, ]); }); - it('should support manual shared bundles for specific bundles, duplicated the assets for others', async function () { + it.skip('should support manual shared bundles for specific bundles, duplicated the assets for others', async function () { // In this case we want to allow for manual shared bundles to only deduplicate for specific let b = await bundle( path.join( @@ -504,7 +504,7 @@ describe('bundler', function () { }, ]); }); - it('should support consistently splitting manual shared bundles', async function () { + it.skip('should support consistently splitting manual shared bundles', async function () { // In this case we want to allow for manual shared bundles to only deduplicate for specific let b = await bundle( path.join(__dirname, 'integration/manual-bundle-split/index.js'), From d40c482eddae149bbd6eb106f5c9e7c4c5b0d7ec Mon Sep 17 00:00:00 2001 From: Agnieszka Gawrys Date: Mon, 18 Sep 2023 10:58:25 -0400 Subject: [PATCH 03/20] add it splitting for manual bundles and unskip test --- .../bundlers/default/src/DefaultBundler.js | 61 ++++++++++++++++++- .../core/integration-tests/test/bundler.js | 8 +-- .../test/integration/manual-bundle-split/a.js | 1 + .../test/integration/manual-bundle-split/h.js | 6 ++ 4 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/h.js diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 1c3565f0b32..1f52cccece7 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -1297,6 +1297,54 @@ function createIdealGraph( } } } + + let manualSharedBundleIds = new Set([...manualSharedMap.values()]); + // Step split manual shared bundles for those that have the "split" property set + let remainderMap = new DefaultMap(() => []); + for (let [manualName, id] of manualSharedMap) { + let manualBundle = bundleGraph.getNode(id); + invariant(manualBundle !== 'root' && manualBundle != null); + let firstSourceBundle = nullthrows( + bundleGraph.getNode([...manualBundle.sourceBundles][0]), + ); + invariant(firstSourceBundle !== 'root'); + let firstAsset = [...manualBundle.assets][0]; + let manualSharedObject = manualAssetToConfig.get(firstAsset); + let modNum = manualAssetToConfig.get(firstAsset).split; + if (modNum != null) { + for (let a of [...manualBundle.assets]) { + let numRep = getBigIntFromContentKey(a.id); + let r = Number(BigInt(numRep) % BigInt(modNum)); + + remainderMap.get(r).push(a); + } + + for (let i = 1; i < [...remainderMap.keys()].length; i++) { + let bundle = createBundle({ + target: firstSourceBundle.target, + type: firstSourceBundle.type, + env: firstSourceBundle.env, + manualSharedBundle: manualSharedObject.name, + }); + bundle.sourceBundles = manualBundle.sourceBundles; + bundle.internalizedAssets = manualBundle.internalizedAssets; + let bundleId = bundleGraph.addNode(bundle); + manualSharedBundleIds.add(bundleId); + for (let sourceBundleId of manualBundle.sourceBundles) { + if (bundleId !== sourceBundleId) { + bundleGraph.addEdge(sourceBundleId, bundleId); + } + } + for (let sp of remainderMap.get(i)) { + bundle.assets.add(sp); + bundle.size += sp.stats.size; + manualBundle.assets.delete(sp); + manualBundle.size -= sp.stats.size; + } + } + } + } + // Step Merge Share Bundles: Merge any shared bundles under the minimum bundle size back into // their source bundles, and remove the bundle. // We should include "bundle reuse" as shared bundles that may be removed but the bundle itself would have to be retained @@ -1305,7 +1353,8 @@ function createIdealGraph( if ( bundle.sourceBundles.size > 0 && bundle.mainEntryAsset == null && - bundle.size < config.minBundleSize + bundle.size < config.minBundleSize && + !manualSharedBundleIds.has(bundleNodeId) ) { removeBundle(bundleGraph, bundleNodeId, assetReference); } @@ -1334,7 +1383,10 @@ function createIdealGraph( // shared bundles must have source bundles, we could have a bundle // connected to another bundle that isnt a shared bundle, so check return ( - bundle !== 'root' && bundle.sourceBundles.size > 0 && bundleId != b + bundle !== 'root' && + bundle.sourceBundles.size > 0 && + bundleId != b && + !manualSharedBundleIds.has(b) ); }); @@ -1410,6 +1462,11 @@ function createIdealGraph( } } + function getBigIntFromContentKey(contentKey) { + let b = Buffer.alloc(64); + b.write(contentKey); + return b.readBigInt64BE(); + } // Fix asset order in source bundles as they are likely now incorrect after shared bundle deletion if (modifiedSourceBundles.size > 0) { let assetOrderMap = new Map(assets.map((a, index) => [a, index])); diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index e975ece7c66..ae55c4a4a74 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -504,7 +504,7 @@ describe('bundler', function () { }, ]); }); - it.skip('should support consistently splitting manual shared bundles', async function () { + it('should support consistently splitting manual shared bundles', async function () { // In this case we want to allow for manual shared bundles to only deduplicate for specific let b = await bundle( path.join(__dirname, 'integration/manual-bundle-split/index.js'), @@ -515,13 +515,13 @@ describe('bundler', function () { assets: ['foo.js'], }, { - assets: ['d.js', 'e.js'], + assets: ['a.js', 'e.js', 'b.js'], }, { - assets: ['f.js', 'c.js', 'b.js'], + assets: ['d.js', 'c.js', 'f.js', 'g.js'], }, { - assets: ['g.js'], + assets: ['h.js'], }, { assets: ['bar.js'], // b is duplicated because 'bar' is not an 'Active' for this MSB diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/a.js b/packages/core/integration-tests/test/integration/manual-bundle-split/a.js index a72c8e015f1..5971f973d05 100644 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/a.js +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/a.js @@ -4,6 +4,7 @@ import d from './d'; import e from './e'; import f from './f'; import g from './g'; +import h from './h'; let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/h.js b/packages/core/integration-tests/test/integration/manual-bundle-split/h.js new file mode 100644 index 00000000000..53ad2680773 --- /dev/null +++ b/packages/core/integration-tests/test/integration/manual-bundle-split/h.js @@ -0,0 +1,6 @@ +let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; +Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. +Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; + +export default 'h'; \ No newline at end of file From 78f5473f814a7b46967a5dc14563d38770ea75b9 Mon Sep 17 00:00:00 2001 From: Agnieszka Gawrys Date: Mon, 18 Sep 2023 15:23:04 -0400 Subject: [PATCH 04/20] invariants --- .../bundlers/default/src/DefaultBundler.js | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index ad55ac31926..91a242947cf 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -44,11 +44,11 @@ type BundlerConfig = {| |}; type ResolvedBundlerConfig = {| - projectPath: string, manualSharedBundles: ManualSharedBundlesType, minBundles: number, minBundleSize: number, maxParallelRequests: number, + projectRoot: string, |}; // Default options by http version. @@ -178,8 +178,15 @@ function decorateLegacyGraph( invariant(dependency.type === 'dependency'); return dependency.value; }); + invariant( + entryAsset != null, + 'Processing a bundleGroup with no entry asset', + ); for (let dependency of dependencies) { - if (bundleGraph.getResolvedAsset(dependency).id === entryAsset.id) { + if ( + nullthrows(bundleGraph.getResolvedAsset(dependency)).id === + entryAsset.id + ) { bundleGroup = bundleGraph.createBundleGroup( dependency, idealBundle.target, @@ -1093,7 +1100,6 @@ function createIdealGraph( let reachableEntries = []; let reachableNonEntries = []; - let manualSharedObject = manualAssetToConfig.get(asset); if (asset.meta.isConstantModule === true) { @@ -1324,6 +1330,7 @@ function createIdealGraph( invariant(firstSourceBundle !== 'root'); let firstAsset = [...manualBundle.assets][0]; let manualSharedObject = manualAssetToConfig.get(firstAsset); + invariant(manualSharedObject != null); let modNum = manualAssetToConfig.get(firstAsset).split; if (modNum != null) { for (let a of [...manualBundle.assets]) { @@ -1720,7 +1727,11 @@ async function loadBundlerConfig( }); if (!conf) { - return HTTP_OPTIONS['2']; + const modDefault = { + ...HTTP_OPTIONS['2'], + projectRoot: options.projectRoot, + }; + return modDefault; } invariant(conf?.contents != null); @@ -1741,13 +1752,13 @@ async function loadBundlerConfig( let defaults = HTTP_OPTIONS[http]; return { - projectRoot: options.projectRoot, manualSharedBundles: conf.contents.manualSharedBundles ?? defaults.manualSharedBundles, minBundles: conf.contents.minBundles ?? defaults.minBundles, minBundleSize: conf.contents.minBundleSize ?? defaults.minBundleSize, maxParallelRequests: conf.contents.maxParallelRequests ?? defaults.maxParallelRequests, + projectRoot: options.projectRoot, }; } From 4793cc140e9cdd2b3c4fcbdd5c9e8e8e39cc2e59 Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Wed, 27 Sep 2023 15:36:16 +1000 Subject: [PATCH 05/20] Add inlinbe constant support, fix types --- .../bundlers/default/src/DefaultBundler.js | 97 +++++++++++++------ packages/core/core/src/public/Bundle.js | 2 +- .../core/src/public/MutableBundleGraph.js | 16 ++- packages/core/core/src/types.js | 1 + packages/core/types/index.js | 4 + 5 files changed, 88 insertions(+), 32 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 1f6ee305dca..1d8a8d932e1 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -31,9 +31,14 @@ import nullthrows from 'nullthrows'; import path from 'path'; import {encodeJSONKeyComponent} from '@parcel/diagnostic'; -type ManualSharedBundlesType = Array<{| +type Glob = string; + +type ManualSharedBundles = Array<{| name: string, - assets: Array, // this is an array of globs + assets: Array, + types?: Array, + parent?: string, + split?: number, |}>; type BundlerConfig = {| @@ -41,17 +46,17 @@ type BundlerConfig = {| minBundles?: number, minBundleSize?: number, maxParallelRequests?: number, - manualSharedBundles: ManualSharedBundlesType, disableSharedBundles?: boolean, + manualSharedBundles?: ManualSharedBundles, |}; type ResolvedBundlerConfig = {| - manualSharedBundles: ManualSharedBundlesType, minBundles: number, minBundleSize: number, maxParallelRequests: number, projectRoot: string, disableSharedBundles: boolean, + manualSharedBundles: ManualSharedBundles, |}; // Default options by http version. @@ -86,7 +91,7 @@ export type Bundle = {| target: Target, env: Environment, type: string, - manualSharedBundle: string, // for naming purposes + manualSharedBundle: ?string, // for naming purposes |}; const dependencyPriorityEdges = { @@ -431,16 +436,17 @@ function createIdealGraph( let parentsToConfig = new DefaultMap(() => []); for (let c of config.manualSharedBundles) { - if (c.parent) { + if (c.parent != null) { parentsToConfig.get(path.join(config.projectRoot, c.parent)).push(c); } } let numParentsToFind = parentsToConfig.size; + let configToParentAsset = new Map(); assetGraph.traverse((node, _, actions) => { if (node.type === 'asset' && parentsToConfig.has(node.value.filePath)) { for (let c of parentsToConfig.get(node.value.filePath)) { - c.parentAsset = node.value; + configToParentAsset.set(c, node.value); } numParentsToFind--; @@ -453,11 +459,15 @@ function createIdealGraph( }); let manualAssetToConfig = new Map(); + let constantModuleToMSB = new DefaultMap(() => []); // Process in reverse order so earlier configs take precedence - for (let c of config.manualSharedBundles - .filter(c => !c.parent || c.parentAsset) - .reverse()) { + for (let c of config.manualSharedBundles.reverse()) { + invariant( + c.parent == null || configToParentAsset.has(c), + 'Invalid manual shared bundle. Could not find parent asset.', + ); + assetGraph.traverse((node, _, actions) => { if ( node.type === 'asset' && @@ -467,6 +477,11 @@ function createIdealGraph( c.assets, ) ) { + // We track all matching MSB's for constant modules as they are never duplicated + // and need to be assigned to all matching bundles + if (node.value.meta.isConstantModule === true) { + constantModuleToMSB.get(node.value).push(c); + } manualAssetToConfig.set(node.value, c); return; } @@ -475,10 +490,10 @@ function createIdealGraph( // Don't walk past the bundle group assets actions.skipChildren(); } - }, c.parentAsset); + }, configToParentAsset.get(c)); } - return manualAssetToConfig; + return {manualAssetToConfig, constantModuleToMSB}; } //Manual is a map of the user-given name to the bundle node Id that corresponds to ALL the assets that match any glob in that user-specified array @@ -486,7 +501,8 @@ function createIdealGraph( // May need a map to be able to look up NON- bundle root assets which need special case instructions // Use this when placing assets into bundles, to avoid duplication let manualAssetToBundle: Map = new Map(); - let manualAssetToConfig = makeManualAssetToConfigLookup(); + let {manualAssetToConfig, constantModuleToMSB} = + makeManualAssetToConfigLookup(); let manualBundleToInternalizedAsset: Map< NodeId, Array, @@ -626,9 +642,9 @@ function createIdealGraph( if (!bundle.mainEntryAsset) { bundle.mainEntryAsset = childAsset; } else { - manualBundleToInternalizedAsset - .get(bundleId) - .push(childAsset); + nullthrows( + manualBundleToInternalizedAsset.get(bundleId), + ).push(childAsset); } invariant(manualSharedBundleKey != null); if (!manualSharedMap.has(manualSharedBundleKey)) { @@ -812,17 +828,23 @@ function createIdealGraph( let assetSet = BitSet.from(assets); // Strip MSBs of entries - for (let nodeId of manualBundleToInternalizedAsset.keys()) { + for (let [ + nodeId, + internalizedAssets, + ] of manualBundleToInternalizedAsset.entries()) { let bundle = bundleGraph.getNode(nodeId); + invariant(bundle != null && bundle !== 'root'); + if (!bundle.internalizedAssets) { bundle.internalizedAssets = assetSet.cloneEmpty(); } - for (let asset of manualBundleToInternalizedAsset.get(nodeId)) { + for (let asset of internalizedAssets) { bundle.internalizedAssets.add(asset); } bundle.mainEntryAsset = null; bundleGroupBundleIds.delete(nodeId); // manual bundles can now act as shared, non-bundle group, should they be non-bundleRoots as well? } + // Step Merge Type Change Bundles: Clean up type change bundles within the exact same bundlegroups for (let [nodeIdA, a] of bundleGraph.nodes) { //if bundle b bundlegroups ==== bundle a bundlegroups then combine type changes @@ -1157,9 +1179,7 @@ function createIdealGraph( target: firstSourceBundle.target, type: firstSourceBundle.type, env: firstSourceBundle.env, - manualSharedBundle: manualSharedObject - ? manualSharedObject.name - : null, + manualSharedBundle: manualSharedObject?.name, }); bundle.sourceBundles = new Set(sourceBundles); bundle.assets.add(asset); @@ -1169,7 +1189,7 @@ function createIdealGraph( bundleId = nullthrows(manualSharedMap.get(manualSharedBundleKey)); bundle = nullthrows(bundleGraph.getNode(bundleId)); invariant( - bundle != null && bundle != 'root', + bundle != null && bundle !== 'root', 'We tried to use the root incorrectly', ); @@ -1345,11 +1365,12 @@ function createIdealGraph( let firstAsset = [...manualBundle.assets][0]; let manualSharedObject = manualAssetToConfig.get(firstAsset); invariant(manualSharedObject != null); - let modNum = manualAssetToConfig.get(firstAsset).split; + let modNum = manualAssetToConfig.get(firstAsset)?.split; if (modNum != null) { for (let a of [...manualBundle.assets]) { let numRep = getBigIntFromContentKey(a.id); - let r = Number(BigInt(numRep) % BigInt(modNum)); + // $FlowFixMe Flow doesn't know about BigInt + let r = Number(numRep % BigInt(modNum)); remainderMap.get(r).push(a); } @@ -1380,6 +1401,27 @@ function createIdealGraph( } } + // Step insert constant modules into manual shared bundles. + // We have to do this separately as they're the only case where a single asset can + // match multiple MSB's + for (let [asset, msbs] of constantModuleToMSB.entries()) { + for (let manualSharedObject of msbs) { + let bundleId = nullthrows( + manualSharedMap.get(manualSharedObject.name + ',js'), + ); + let bundle = nullthrows(bundleGraph.getNode(bundleId)); + invariant( + bundle != null && bundle !== 'root', + 'We tried to use the root incorrectly', + ); + + if (!bundle.assets.has(asset)) { + bundle.assets.add(asset); + bundle.size += asset.stats.size; + } + } + } + // Step Merge Share Bundles: Merge any shared bundles under the minimum bundle size back into // their source bundles, and remove the bundle. // We should include "bundle reuse" as shared bundles that may be removed but the bundle itself would have to be retained @@ -1502,6 +1544,7 @@ function createIdealGraph( function getBigIntFromContentKey(contentKey) { let b = Buffer.alloc(64); b.write(contentKey); + // $FlowFixMe Flow doesn't have BigInt types in this version return b.readBigInt64BE(); } // Fix asset order in source bundles as they are likely now incorrect after shared bundle deletion @@ -1680,7 +1723,7 @@ function createBundle(opts: {| type?: string, needsStableName?: boolean, bundleBehavior?: ?BundleBehavior, - manualSharedBundle?: string, + manualSharedBundle?: ?string, |}): Bundle { if (opts.asset == null) { return { @@ -1804,8 +1847,6 @@ async function loadBundlerConfig( let defaults = HTTP_OPTIONS[http]; return { - manualSharedBundles: - conf.contents.manualSharedBundles ?? defaults.manualSharedBundles, minBundles: conf.contents.minBundles ?? defaults.minBundles, minBundleSize: conf.contents.minBundleSize ?? defaults.minBundleSize, maxParallelRequests: @@ -1813,6 +1854,8 @@ async function loadBundlerConfig( projectRoot: options.projectRoot, disableSharedBundles: conf.contents.disableSharedBundles ?? defaults.disableSharedBundles, + manualSharedBundles: + conf.contents.manualSharedBundles ?? defaults.manualSharedBundles, }; } diff --git a/packages/core/core/src/public/Bundle.js b/packages/core/core/src/public/Bundle.js index d1683dbfc73..1b8665da260 100644 --- a/packages/core/core/src/public/Bundle.js +++ b/packages/core/core/src/public/Bundle.js @@ -129,7 +129,7 @@ export class Bundle implements IBundle { return this.#bundle.isSplittable; } - get manualSharedBundle() { + get manualSharedBundle(): ?string { return this.#bundle.manualSharedBundle; } diff --git a/packages/core/core/src/public/MutableBundleGraph.js b/packages/core/core/src/public/MutableBundleGraph.js index 459b6197419..074aa9d5f4f 100644 --- a/packages/core/core/src/public/MutableBundleGraph.js +++ b/packages/core/core/src/public/MutableBundleGraph.js @@ -9,7 +9,11 @@ import type { MutableBundleGraph as IMutableBundleGraph, Target, } from '@parcel/types'; -import type {ParcelOptions, BundleGroup as InternalBundleGroup} from '../types'; +import type { + ParcelOptions, + BundleGroup as InternalBundleGroup, + BundleNode, +} from '../types'; import invariant from 'assert'; import nullthrows from 'nullthrows'; @@ -76,10 +80,14 @@ export default class MutableBundleGraph ); } - getResolvedAsset(dependency) { - return this.#graph.getResolvedAsset( + getResolvedAsset(dependency: IDependency): ?IAsset { + let internalAsset = this.#graph.getResolvedAsset( dependencyToInternalDependency(dependency), ); + + if (internalAsset) { + return assetFromValue(internalAsset, this.#options); + } } createBundleGroup(dependency: IDependency, target: Target): IBundleGroup { @@ -210,7 +218,7 @@ export default class MutableBundleGraph isPlaceholder = entryAssetNode.requested === false; } - let bundleNode = { + let bundleNode: BundleNode = { type: 'bundle', id: bundleId, value: { diff --git a/packages/core/core/src/types.js b/packages/core/core/src/types.js index a9b2d3c56f3..d68eb410b95 100644 --- a/packages/core/core/src/types.js +++ b/packages/core/core/src/types.js @@ -518,6 +518,7 @@ export type Bundle = {| name: ?string, displayName: ?string, pipeline: ?string, + manualSharedBundle?: ?string, |}; export type BundleNode = {| diff --git a/packages/core/types/index.js b/packages/core/types/index.js index 31728405c28..9e246a20624 100644 --- a/packages/core/types/index.js +++ b/packages/core/types/index.js @@ -1230,6 +1230,8 @@ export type CreateBundleOpts = * - isolated: The bundle will be isolated from its parents. Shared assets will be duplicated. */ +bundleBehavior?: ?BundleBehavior, + /** Name of the manual shared bundle config that caused this bundle to be created */ + +manualSharedBundle?: ?string, |} // If an entryAsset is not provided, a bundle id, type, and environment must // be provided. @@ -1263,6 +1265,8 @@ export type CreateBundleOpts = +isSplittable?: ?boolean, /** The bundle's pipeline, to be used for optimization. Usually based on the pipeline of the entry asset. */ +pipeline?: ?string, + /** Name of the manual shared bundle config that caused this bundle to be created */ + +manualSharedBundle?: ?string, |}; /** From cfb8356ecc3b1d7ee2eaee28c07ec42af5a17489 Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Thu, 28 Sep 2023 11:42:29 +1000 Subject: [PATCH 06/20] Update tests --- .../bundlers/default/src/DefaultBundler.js | 88 ++-- .../core/integration-tests/test/bundler.js | 464 ++++++++++++------ .../manual-bundle-duplication-option/a.js | 21 - .../manual-bundle-duplication-option/b.js | 6 - .../manual-bundle-duplication-option/bar.js | 4 - .../manual-bundle-duplication-option/foo.js | 3 - .../manual-bundle-duplication-option/index.js | 3 - .../package.json | 22 - .../yarn.lock | 0 .../integration/manual-bundle-parent/a.js | 19 - .../integration/manual-bundle-parent/b.js | 8 - .../integration/manual-bundle-parent/bar.js | 2 - .../integration/manual-bundle-parent/c.js | 5 - .../integration/manual-bundle-parent/foo.js | 3 - .../integration/manual-bundle-parent/index.js | 3 - .../manual-bundle-parent/package.json | 21 - .../manual-bundle-parent/yarn.lock | 0 .../test/integration/manual-bundle-split/a.js | 27 - .../test/integration/manual-bundle-split/b.js | 6 - .../integration/manual-bundle-split/bar.js | 4 - .../test/integration/manual-bundle-split/c.js | 6 - .../test/integration/manual-bundle-split/d.js | 6 - .../test/integration/manual-bundle-split/e.js | 6 - .../test/integration/manual-bundle-split/f.js | 6 - .../integration/manual-bundle-split/foo.js | 3 - .../test/integration/manual-bundle-split/g.js | 6 - .../test/integration/manual-bundle-split/h.js | 6 - .../integration/manual-bundle-split/index.js | 3 - .../manual-bundle-split/package.json | 22 - .../integration/manual-bundle-split/yarn.lock | 0 .../integration/manual-bundle-typeglob/a.css | 4 - .../integration/manual-bundle-typeglob/a.js | 19 - .../integration/manual-bundle-typeglob/foo.js | 4 - .../manual-bundle-typeglob/index.js | 3 - .../manual-bundle-typeglob/package.json | 11 - .../manual-bundle-typeglob/yarn.lock | 0 .../test/integration/manual-bundle/a.js | 19 - .../test/integration/manual-bundle/b.js | 6 - .../test/integration/manual-bundle/foo.js | 3 - .../test/integration/manual-bundle/index.js | 3 - .../integration/manual-bundle/package.json | 12 - .../test/integration/manual-bundle/yarn.lock | 0 42 files changed, 374 insertions(+), 483 deletions(-) delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/a.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/b.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/bar.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/foo.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/index.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/package.json delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-duplication-option/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/a.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/b.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/bar.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/c.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/foo.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/index.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/package.json delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-parent/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/a.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/b.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/bar.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/c.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/d.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/e.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/f.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/foo.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/g.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/h.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/index.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/package.json delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-split/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.css delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/foo.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/index.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/package.json delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle-typeglob/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle/a.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle/b.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle/foo.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle/index.js delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle/package.json delete mode 100644 packages/core/integration-tests/test/integration/manual-bundle/yarn.lock diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 1d8a8d932e1..3b846b5b943 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -468,12 +468,15 @@ function createIdealGraph( 'Invalid manual shared bundle. Could not find parent asset.', ); + let parentAsset = configToParentAsset.get(c); + assetGraph.traverse((node, _, actions) => { if ( node.type === 'asset' && (!Array.isArray(c.types) || c.types.includes(node.value.type)) && isGlobMatch( - node.value.filePath.slice(config.projectRoot.length), + // +1 accounts for the leading slash + node.value.filePath.slice(config.projectRoot.length + 1), c.assets, ) ) { @@ -486,11 +489,15 @@ function createIdealGraph( return; } - if (node.type === 'dependency' && node.value.priority === 'lazy') { + if ( + node.type === 'dependency' && + node.value.priority === 'lazy' && + parentAsset + ) { // Don't walk past the bundle group assets actions.skipChildren(); } - }, configToParentAsset.get(c)); + }, parentAsset); } return {manualAssetToConfig, constantModuleToMSB}; @@ -1358,44 +1365,47 @@ function createIdealGraph( for (let [manualName, id] of manualSharedMap) { let manualBundle = bundleGraph.getNode(id); invariant(manualBundle !== 'root' && manualBundle != null); - let firstSourceBundle = nullthrows( - bundleGraph.getNode([...manualBundle.sourceBundles][0]), - ); - invariant(firstSourceBundle !== 'root'); - let firstAsset = [...manualBundle.assets][0]; - let manualSharedObject = manualAssetToConfig.get(firstAsset); - invariant(manualSharedObject != null); - let modNum = manualAssetToConfig.get(firstAsset)?.split; - if (modNum != null) { - for (let a of [...manualBundle.assets]) { - let numRep = getBigIntFromContentKey(a.id); - // $FlowFixMe Flow doesn't know about BigInt - let r = Number(numRep % BigInt(modNum)); - - remainderMap.get(r).push(a); - } - for (let i = 1; i < [...remainderMap.keys()].length; i++) { - let bundle = createBundle({ - target: firstSourceBundle.target, - type: firstSourceBundle.type, - env: firstSourceBundle.env, - manualSharedBundle: manualSharedObject.name, - }); - bundle.sourceBundles = manualBundle.sourceBundles; - bundle.internalizedAssets = manualBundle.internalizedAssets; - let bundleId = bundleGraph.addNode(bundle); - manualSharedBundleIds.add(bundleId); - for (let sourceBundleId of manualBundle.sourceBundles) { - if (bundleId !== sourceBundleId) { - bundleGraph.addEdge(sourceBundleId, bundleId); - } + if (manualBundle.sourceBundles.size > 0) { + let firstSourceBundle = nullthrows( + bundleGraph.getNode([...manualBundle.sourceBundles][0]), + ); + invariant(firstSourceBundle !== 'root'); + let firstAsset = [...manualBundle.assets][0]; + let manualSharedObject = manualAssetToConfig.get(firstAsset); + invariant(manualSharedObject != null); + let modNum = manualAssetToConfig.get(firstAsset)?.split; + if (modNum != null) { + for (let a of [...manualBundle.assets]) { + let numRep = getBigIntFromContentKey(a.id); + // $FlowFixMe Flow doesn't know about BigInt + let r = Number(numRep % BigInt(modNum)); + + remainderMap.get(r).push(a); } - for (let sp of remainderMap.get(i)) { - bundle.assets.add(sp); - bundle.size += sp.stats.size; - manualBundle.assets.delete(sp); - manualBundle.size -= sp.stats.size; + + for (let i = 1; i < [...remainderMap.keys()].length; i++) { + let bundle = createBundle({ + target: firstSourceBundle.target, + type: firstSourceBundle.type, + env: firstSourceBundle.env, + manualSharedBundle: manualSharedObject.name, + }); + bundle.sourceBundles = manualBundle.sourceBundles; + bundle.internalizedAssets = manualBundle.internalizedAssets; + let bundleId = bundleGraph.addNode(bundle); + manualSharedBundleIds.add(bundleId); + for (let sourceBundleId of manualBundle.sourceBundles) { + if (bundleId !== sourceBundleId) { + bundleGraph.addEdge(sourceBundleId, bundleId); + } + } + for (let sp of remainderMap.get(i)) { + bundle.assets.add(sp); + bundle.size += sp.stats.size; + manualBundle.assets.delete(sp); + manualBundle.size -= sp.stats.size; + } } } } diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index f2777462abb..66a571f6da9 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -1,7 +1,13 @@ import path from 'path'; import assert from 'assert'; import Logger from '@parcel/logger'; -import {bundle, assertBundles, findAsset} from '@parcel/test-utils'; +import { + bundle, + assertBundles, + findAsset, + overlayFS, + fsFixture, +} from '@parcel/test-utils'; describe('bundler', function () { it('should not create shared bundles when a bundle is being reused and disableSharedBundles is enabled', async function () { @@ -703,149 +709,329 @@ describe('bundler', function () { ]); }); - // The following tests exercise UNSTABLE Manual Shared bundle option, which allows users - // to specify globs of assets for shared bundles and name them - it.skip('should support manual shared bundles via glob config option for different types', async function () { - let b = await bundle( - path.join(__dirname, 'integration/manual-bundle-typeglob/index.js'), - { + describe.only('manual shared bundles', () => { + const dir = path.join(__dirname, 'manual-bundle'); + + beforeEach(() => { + overlayFS.mkdirp(dir); + }); + + afterEach(() => { + overlayFS.rimraf(dir); + }); + + it('should support manual shared bundles via glob config option for different types', async function () { + await fsFixture(overlayFS, dir)` + yarn.lock: + // Required for config loading + package.json: + { + "@parcel/bundler-default": { + "minBundleSize": 0, + "manualSharedBundles": [{ + "name": "vendor", + "assets": ["vendor*.*"] + }] + } + } + + index.html: + + + index.js: + import './vendor.css'; + import './vendor.js'; + import('./async'); + + async.js: + import './vendor-async.css'; + import './vendor-async.js'; + + vendor.js: + export default 'vendor.js'; + + vendor-async.js: + export default 'vendor-async.js'; + + vendor.css: + body { + background: blue; + } + + vendor-async.css: + body { + color: blue; + } + `; + + let b = await bundle(path.join(dir, 'index.html'), { mode: 'production', defaultTargetOptions: { shouldScopeHoist: false, + sourceMaps: false, }, - }, - ); + inputFS: overlayFS, + }); - assertBundles(b, [ - { - assets: ['foo.js'], - }, - { - assets: ['a.js'], - }, - { - assets: [ - 'bundle-manifest.js', - 'bundle-url.js', - 'cacheLoader.js', - 'css-loader.js', - 'esmodule-helpers.js', - 'index.js', - 'js-loader.js', - ], - }, - { - assets: ['a.css'], //our manual sharedbundle - }, - ]); - }); - it.skip('should support manual shared bundles via glob config option for sync and async assets', async function () { - let b = await bundle( - path.join(__dirname, 'integration/manual-bundle/index.js'), - ); - assertBundles(b, [ - { - assets: ['foo.js', 'a.js', 'b.js'], - }, - { - assets: [ - 'bundle-url.js', - 'cacheLoader.js', - 'esmodule-helpers.js', - 'index.js', - 'js-loader.js', - ], - }, - ]); - }); - it('should support manual shared bundles via parent glob config option', async function () { - let b = await bundle( - path.join(__dirname, 'integration/manual-bundle-parent/index.js'), - ); - //assert that a,b,c are in one bundle, causeing foo and bar to overfetch, due to MSB config - assertBundles(b, [ - { - assets: ['foo.js'], - }, - { - assets: ['bar.js'], - }, - { - assets: ['c.js', 'a.js', 'b.js'], - }, + assertBundles(b, [ + { + assets: ['index.html'], + }, + { + assets: [ + 'bundle-manifest.js', + 'bundle-url.js', + 'cacheLoader.js', + 'css-loader.js', + 'esmodule-helpers.js', + 'index.js', + 'js-loader.js', + ], + }, + { + assets: ['async.js'], + }, + { + // Vendor MSB for CSS + assets: ['vendor.css', 'vendor-async.css'], + }, + { + // Vendor MSB for JS + assets: ['vendor.js', 'vendor-async.js'], + }, + ]); + }); - { - assets: [ - 'bundle-url.js', - 'cacheLoader.js', - 'esmodule-helpers.js', - 'index.js', - 'js-loader.js', - ], - }, - ]); - }); - it.skip('should support manual shared bundles for specific bundles, duplicated the assets for others', async function () { - // In this case we want to allow for manual shared bundles to only deduplicate for specific - let b = await bundle( - path.join( - __dirname, - 'integration/manual-bundle-duplication-option/index.js', - ), - ); - //assert that foo has a in bundlegroup - assertBundles(b, [ - { - assets: ['foo.js'], - }, - { - assets: ['a.js', 'b.js'], - }, - { - assets: ['bar.js', 'b.js'], // b is duplicated because 'bar' is not an 'Active' for this MSB - }, - { - assets: [ - 'bundle-url.js', - 'cacheLoader.js', - 'esmodule-helpers.js', - 'index.js', - 'js-loader.js', - ], - }, - ]); - }); - it('should support consistently splitting manual shared bundles', async function () { - // In this case we want to allow for manual shared bundles to only deduplicate for specific - let b = await bundle( - path.join(__dirname, 'integration/manual-bundle-split/index.js'), - ); - //assert that foo has a in bundlegroup - assertBundles(b, [ - { - assets: ['foo.js'], - }, - { - assets: ['a.js', 'e.js', 'b.js'], - }, - { - assets: ['d.js', 'c.js', 'f.js', 'g.js'], - }, - { - assets: ['h.js'], - }, - { - assets: ['bar.js'], // b is duplicated because 'bar' is not an 'Active' for this MSB - }, - { - assets: [ - 'bundle-url.js', - 'cacheLoader.js', - 'esmodule-helpers.js', - 'index.js', - 'js-loader.js', - ], - }, - ]); + it('should support manual shared bundles via glob config option for configured types', async function () { + await fsFixture(overlayFS, dir)` + yarn.lock: + // Required for config loading + package.json: + { + "@parcel/bundler-default": { + "minBundleSize": 0, + "manualSharedBundles": [{ + "name": "vendor", + "assets": ["vendor*.*"], + "types": ["js"] + }] + } + } + + index.html: + + + index.js: + import './vendor.css'; + import './vendor.js'; + import('./async'); + + async.js: + import './vendor-async.css'; + import './vendor-async.js'; + + vendor.js: + export default 'vendor.js'; + + vendor-async.js: + export default 'vendor-async.js'; + + vendor.css: + body { + background: blue; + } + + vendor-async.css: + body { + color: blue; + } + `; + + let b = await bundle(path.join(dir, 'index.html'), { + mode: 'production', + defaultTargetOptions: { + shouldScopeHoist: false, + sourceMaps: false, + }, + inputFS: overlayFS, + }); + + assertBundles(b, [ + { + assets: ['index.html'], + }, + { + assets: [ + 'bundle-manifest.js', + 'bundle-url.js', + 'cacheLoader.js', + 'css-loader.js', + 'esmodule-helpers.js', + 'index.js', + 'js-loader.js', + ], + }, + { + assets: ['async.js'], + }, + { + assets: ['vendor.css'], + }, + { + assets: ['vendor-async.css'], + }, + { + // Vendor MSB for JS + assets: ['vendor.js', 'vendor-async.js'], + }, + ]); + }); + + it('should support manual shared bundles via parent config option', async function () { + await fsFixture(overlayFS, dir)` + yarn.lock: + // Required for config loading + package.json: + { + "@parcel/bundler-default": { + "minBundleSize": 0, + "manualSharedBundles": [{ + "name": "vendor", + "parent": "math/math.js", + "assets": ["math/!(divide).js"] + }] + } + } + + index.html: + + + index.js: + import {add, subtract, divide} from './math/math'; + sideEffectNoop(divide(subtract(add(1, 2), 3), 4)); + + math + math.js: + export * from './add'; + export * from './subtract'; + export * from './divide'; + + add.js: + export const add = (a, b) => a + b; + + subtract.js: + export const subtract = (a, b) => a - b; + + divide.js: + export const divide = (a, b) => a / b; + `; + + let b = await bundle(path.join(dir, 'index.html'), { + defaultTargetOptions: { + shouldScopeHoist: false, + sourceMaps: false, + }, + inputFS: overlayFS, + }); + //assert that a,b,c are in one bundle, causeing foo and bar to overfetch, due to MSB config + assertBundles(b, [ + { + assets: ['index.html'], + }, + { + assets: ['esmodule-helpers.js', 'index.js', 'divide.js'], + }, + { + // Manual shared bundle + assets: ['math.js', 'add.js', 'subtract.js'], + }, + ]); + }); + + it('should support consistently splitting manual shared bundles', async function () { + await fsFixture(overlayFS, dir)` + yarn.lock: + // Required for config loading + package.json: + { + "@parcel/bundler-default": { + "minBundleSize": 0, + "manualSharedBundles": [{ + "name": "vendor", + "parent": "vendor.js", + "assets": ["**/*"], + "split": 3 + }] + } + } + + index.html: + + + index.js: + import * as vendor from './vendor'; + sideEffectNoop(vendor); + + vendor.js: + export * from './a'; + export * from './b'; + export * from './c'; + export * from './d'; + export * from './e'; + export * from './f'; + export * from './g'; + export * from './h'; + export * from './i'; + export * from './j'; + + a.js: + export const a = 'a'; + b.js: + export const b = 'b'; + c.js: + export const c = 'c'; + d.js: + export const d = 'd'; + e.js: + export const e = 'e'; + f.js: + export const f = 'f'; + g.js: + export const g = 'g'; + h.js: + export const h = 'h'; + i.js: + export const i = 'i'; + j.js: + export const j = 'j'; + `; + + let b = await bundle(path.join(dir, 'index.html'), { + defaultTargetOptions: { + shouldScopeHoist: false, + shouldOptimize: false, + sourceMaps: false, + }, + inputFS: overlayFS, + }); + + assertBundles(b, [ + { + assets: ['index.html'], + }, + { + assets: ['a.js', 'i.js'], + }, + { + assets: ['vendor.js', 'b.js', 'j.js'], + }, + { + assets: ['c.js', 'd.js', 'e.js', 'f.js', 'g.js', 'h.js'], + }, + { + assets: ['esmodule-helpers.js', 'index.js'], + }, + ]); + }); }); }); diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/a.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/a.js deleted file mode 100644 index 5b410b2f71c..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/a.js +++ /dev/null @@ -1,21 +0,0 @@ -import b from './b'; - -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/b.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/b.js deleted file mode 100644 index d9cf43b2cee..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/b.js +++ /dev/null @@ -1,6 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'b'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/bar.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/bar.js deleted file mode 100644 index 6b156cafe3e..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/bar.js +++ /dev/null @@ -1,4 +0,0 @@ - -import b from './b'; - -export default b; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/foo.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/foo.js deleted file mode 100644 index 454dc70767c..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/foo.js +++ /dev/null @@ -1,3 +0,0 @@ -import a from './a'; - -export default a; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/index.js b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/index.js deleted file mode 100644 index 9188d9282cb..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import('./foo'); -import('./bar'); -export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/package.json b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/package.json deleted file mode 100644 index a8819bc6011..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "source": "./index.js", - "@parcel/bundler-default": { - "maxParallelRequests": 10, - "minBundleSize": 0, - "manualSharedBundles": [ - { - "name": "a", - "types": [ - "js", - "css" - ], - "parent": "a.js", - "assets": [ - "**" - ], - "active": ["foo.js"] - } - ] - } - } - \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle-duplication-option/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/a.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/a.js deleted file mode 100644 index 6da74812b41..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-parent/a.js +++ /dev/null @@ -1,19 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/b.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/b.js deleted file mode 100644 index 8280d11b78b..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-parent/b.js +++ /dev/null @@ -1,8 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; -import a from './a'; -import c from './c'; - -export default 'b' + b + c; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/bar.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/bar.js deleted file mode 100644 index b7c74987b22..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-parent/bar.js +++ /dev/null @@ -1,2 +0,0 @@ -import b from './b'; -import c from './c'; diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/c.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/c.js deleted file mode 100644 index 87d49e84f66..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-parent/c.js +++ /dev/null @@ -1,5 +0,0 @@ -let str = `suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'c'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/foo.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/foo.js deleted file mode 100644 index 454dc70767c..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-parent/foo.js +++ /dev/null @@ -1,3 +0,0 @@ -import a from './a'; - -export default a; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/index.js b/packages/core/integration-tests/test/integration/manual-bundle-parent/index.js deleted file mode 100644 index 9188d9282cb..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-parent/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import('./foo'); -import('./bar'); -export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/package.json b/packages/core/integration-tests/test/integration/manual-bundle-parent/package.json deleted file mode 100644 index 220abdf1b3a..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-parent/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "source": "./index.js", - "@parcel/bundler-default": { - "maxParallelRequests": 10, - "minBundleSize": 0, - "manualSharedBundles": [ - { - "name": "b", - "types": [ - "js", - "css" - ], - "parent": "b.js", - "assets": [ - "**" - ] - } - ] - } - } - \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-parent/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle-parent/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/a.js b/packages/core/integration-tests/test/integration/manual-bundle-split/a.js deleted file mode 100644 index 5971f973d05..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/a.js +++ /dev/null @@ -1,27 +0,0 @@ -import b from './b'; -import c from './c'; -import d from './d'; -import e from './e'; -import f from './f'; -import g from './g'; -import h from './h'; - -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/b.js b/packages/core/integration-tests/test/integration/manual-bundle-split/b.js deleted file mode 100644 index d9cf43b2cee..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/b.js +++ /dev/null @@ -1,6 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'b'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/bar.js b/packages/core/integration-tests/test/integration/manual-bundle-split/bar.js deleted file mode 100644 index 6b156cafe3e..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/bar.js +++ /dev/null @@ -1,4 +0,0 @@ - -import b from './b'; - -export default b; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/c.js b/packages/core/integration-tests/test/integration/manual-bundle-split/c.js deleted file mode 100644 index 582fac9af63..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/c.js +++ /dev/null @@ -1,6 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'c'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/d.js b/packages/core/integration-tests/test/integration/manual-bundle-split/d.js deleted file mode 100644 index b6780483e62..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/d.js +++ /dev/null @@ -1,6 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'd'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/e.js b/packages/core/integration-tests/test/integration/manual-bundle-split/e.js deleted file mode 100644 index 0634ef61fb2..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/e.js +++ /dev/null @@ -1,6 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'e'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/f.js b/packages/core/integration-tests/test/integration/manual-bundle-split/f.js deleted file mode 100644 index 4a0626d2ebc..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/f.js +++ /dev/null @@ -1,6 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'f'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/foo.js b/packages/core/integration-tests/test/integration/manual-bundle-split/foo.js deleted file mode 100644 index 454dc70767c..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/foo.js +++ /dev/null @@ -1,3 +0,0 @@ -import a from './a'; - -export default a; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/g.js b/packages/core/integration-tests/test/integration/manual-bundle-split/g.js deleted file mode 100644 index 0b9a055fd03..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/g.js +++ /dev/null @@ -1,6 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'g'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/h.js b/packages/core/integration-tests/test/integration/manual-bundle-split/h.js deleted file mode 100644 index 53ad2680773..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/h.js +++ /dev/null @@ -1,6 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'h'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/index.js b/packages/core/integration-tests/test/integration/manual-bundle-split/index.js deleted file mode 100644 index 9188d9282cb..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import('./foo'); -import('./bar'); -export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/package.json b/packages/core/integration-tests/test/integration/manual-bundle-split/package.json deleted file mode 100644 index 6c467fa44f5..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-split/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "source": "./index.js", - "@parcel/bundler-default": { - "maxParallelRequests": 10, - "minBundleSize": 0, - "manualSharedBundles": [ - { - "name": "a", - "types": [ - "js", - "css" - ], - "parent": "a.js", - "assets": [ - "**" - ], - "split": 3 - } - ] - } - } - \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-split/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle-split/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.css b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.css deleted file mode 100644 index 5f6f6b58e31..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.css +++ /dev/null @@ -1,4 +0,0 @@ -body { - background: red; - } - \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.js b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.js deleted file mode 100644 index 6da74812b41..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/a.js +++ /dev/null @@ -1,19 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/foo.js b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/foo.js deleted file mode 100644 index 36515344205..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/foo.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a.js'; -import style from './a.css'; - -export default a; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/index.js b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/index.js deleted file mode 100644 index 93c4c3105c4..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import('./foo'); - -export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/package.json b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/package.json deleted file mode 100644 index 0e475a17f19..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "source": "./index.js", - "@parcel/bundler-default": { - "maxParallelRequests": 10, - "minBundleSize": 0, - "manualSharedBundles": [{ - "name": "a", - "assets": ["/a.*"] - }] - } - } \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle-typeglob/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle-typeglob/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/manual-bundle/a.js b/packages/core/integration-tests/test/integration/manual-bundle/a.js deleted file mode 100644 index 6da74812b41..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle/a.js +++ /dev/null @@ -1,19 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habLorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellentesque pharetra mauris luctus felis cursus, id tempor sem viverra. Aenean fringilla, felis ut feugiat pretium, sapien lectus ornare enim, vel tempus mi tortor vitae lectus. Sed egestas mollis massa in dignissim. Sed placerat tellus id ligula molestie, id tincidunt sem rutrum. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam est purus, maximus ut mi id, pharetra dictum lacus. Praesent ullamcorper libero metus, id ornare ex posuere ac. Ut tempor varius molestie. Sed a turpis lobortis, pretium leo ut, tempus turpis. Curabitur blandit ligula in mi pretium, sed varius libero tempus. Nunc pellentesque odio metus, vitae commodo neque eleifend ac. -Cras et est suscipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'a'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/b.js b/packages/core/integration-tests/test/integration/manual-bundle/b.js deleted file mode 100644 index d9cf43b2cee..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle/b.js +++ /dev/null @@ -1,6 +0,0 @@ -let str = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras euismod massa sit amet tellus porta consectetur. Etiam aliquam pellentesque lorem id semper. Vestibulum ut rhoncus lacus, a blandit risus. Sed eget volutpat risus, eu molestie mi. Curabitur felis lacus, hendrerit id sollicitudin nec, sollicitudin in quam. Nunc pellentesque elit ac sapien tempor feugiat. Nunc ex urna, commodo in viverra a, tempus quis purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; -Pellencipit, suscipit dolor nec, blandit leo. Donec purus neque, rhoncus ac ullamcorper eget, placerat vel magna. Donec eu augue turpis. Fusce mattis nulla ante. Proin sit amet sem maximus, pharetra tortor et, sollicitudin eros. Curabitur elementum dolor ac metus vulputate ornare. Ut arcu libero, lobortis ac urna ut, ornare laoreet tortor. Vivamus sollicitudin suscipit efficitur. Ut nec nisi sed metus blandit bibendum. Nullam dictum accumsan sem, ac aliquam purus vestibulum sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et ligula eget magna tempus interdum. Aliquam malesuada tempus imperdiet. Proin et elementum tellus, non aliquam magna. Sed id felis ut arcu aliquam aliquam eu nec nisi. -Donec dictum consequat quam nec malesuada. Nunc mattis iaculis vestibulum. Vestibulum erat lacus, mollis et tincidunt sit amet, tristique vitae massa. Phasellus ac vulputate dolor. Pellentesque ac auctor metus, nec faucibus erat. Donec tortor neque, convallis non felis vel, posuere ornare nunc. Fusce magna risus, interdum at pretium vel, finibus ut dolor. Vivamus congue ipsum non cursus tristique. Suspendisse in nulla accumsan, volutpat turpis eu, gravida sapien. Nam commodo velit vel tellus ultricies, ut consectetur neque molestie. Praesent tincidunt, libero ac elementum luctus, ex nisi volutpat leo, a hendrerit lacus leo eget tortor. Suspendisse viverra ante sit amet accumsan facilisis. Pellentesque velit nisl, luctus bibendum vulputate eget, dapibus at elit. Nam ac molestie turpis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus, magna non viverra rutrum, magna metus blandit tortor, sed elementum tellus lectus at velit. -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi sollicitudin scelerisque sagittis. Cras mattis dictum sollicitudin. Donec tincidunt ullamcorper elit, non dignissim nulla ornare ac. Nulla at interdum nisl. Cras eget tincidunt neque. Etiam lobortis sem iaculis, accumsan augue vel, condimentum sem. Mauris porta congue nulla, id congue eros. Nullam nec arcu in ante elementum blandit sit amet ac nibh. Fusce eget risus tincidunt, viverra neque quis, pellentesque est. Sed et nisi nec massa consequat commodo pretium nec risus. Maecenas vestibulum diam ex, sit amet maximus lacus luctus scelerisque. Mauris eget ante sollicitudin, commodo purus eu, molestie tellus. Aliquam finibus eros nisi, eu cursus sapien pellentesque in. Cras eget justo tincidunt, congue lorem eu, dignissim metus.`; - -export default 'b'; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/foo.js b/packages/core/integration-tests/test/integration/manual-bundle/foo.js deleted file mode 100644 index 60f09aaf2bb..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle/foo.js +++ /dev/null @@ -1,3 +0,0 @@ -import a from './a'; - -export default a + import('./b'); \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/index.js b/packages/core/integration-tests/test/integration/manual-bundle/index.js deleted file mode 100644 index 93c4c3105c4..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import('./foo'); - -export default 1; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/package.json b/packages/core/integration-tests/test/integration/manual-bundle/package.json deleted file mode 100644 index edfad4d7ef9..00000000000 --- a/packages/core/integration-tests/test/integration/manual-bundle/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "source": "./index.js", - "@parcel/bundler-default": { - "maxParallelRequests": 10, - "minBundleSize": 0, - "manualSharedBundles": [{ - "name": "a", - "assets": ["/a.js", "/foo.js", "/b.js"] - }] - } - } - \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/manual-bundle/yarn.lock b/packages/core/integration-tests/test/integration/manual-bundle/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 From 537e7ab4f2f775500b77599f4e7ee66e0e70c4ac Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Thu, 28 Sep 2023 11:42:50 +1000 Subject: [PATCH 07/20] Remove .only --- packages/core/integration-tests/test/bundler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index 66a571f6da9..3563891efac 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -709,7 +709,7 @@ describe('bundler', function () { ]); }); - describe.only('manual shared bundles', () => { + describe('manual shared bundles', () => { const dir = path.join(__dirname, 'manual-bundle'); beforeEach(() => { From 9b22f78e3447fe91d655113e3b7c8c2d32cab8b1 Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Thu, 28 Sep 2023 13:45:41 +1000 Subject: [PATCH 08/20] Add mode specific config to the bundler --- .../bundlers/default/src/DefaultBundler.js | 70 +++- .../core/integration-tests/test/bundler.js | 343 ++++++++++++++++-- .../disable-shared-bundle-single-source/a.js | 3 - .../disable-shared-bundle-single-source/b.js | 1 - .../bar.js | 4 - .../foo.js | 4 - .../index.js | 4 - .../package.json | 8 - .../yarn.lock | 0 .../disable-shared-bundles-false/a.js | 1 - .../disable-shared-bundles-false/b.js | 1 - .../disable-shared-bundles-false/bar.js | 4 - .../disable-shared-bundles-false/foo.js | 4 - .../disable-shared-bundles-false/index.js | 4 - .../disable-shared-bundles-false/package.json | 8 - .../disable-shared-bundles-false/yarn.lock | 0 .../a.js | 1 - .../b.js | 1 - .../bar.js | 4 - .../foo.js | 4 - .../index.js | 4 - .../package.json | 6 - .../yarn.lock | 0 .../a.js | 1 - .../b.js | 1 - .../bar.js | 4 - .../foo.js | 4 - .../index.js | 4 - .../package.json | 8 - .../yarn.lock | 0 .../a.js | 1 - .../b.js | 1 - .../bar.js | 4 - .../foo.js | 4 - .../index.js | 4 - .../package.json | 6 - .../yarn.lock | 0 .../disable-shared-bundles-true-parallel/a.js | 1 - .../disable-shared-bundles-true-parallel/b.js | 1 - .../bar.js | 4 - .../foo.js | 4 - .../index.js | 4 - .../package.json | 6 - .../yarn.lock | 0 .../test/integration/inlined-assests/buzz.js | 1 - .../inlined-assests/inline-module.js | 3 - .../integration/inlined-assests/local.html | 8 - .../integration/inlined-assests/package.json | 7 - .../integration/inlined-assests/yarn.lock | 0 49 files changed, 370 insertions(+), 190 deletions(-) delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/a.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/b.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/bar.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/foo.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/index.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/package.json delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-false/a.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-false/b.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-false/bar.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-false/foo.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-false/index.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-false/package.json delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-false/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/a.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/b.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/bar.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/foo.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/index.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/package.json delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/a.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/b.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/bar.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/foo.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/index.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/package.json delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/a.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/b.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/bar.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/foo.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/index.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/package.json delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/a.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/b.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/bar.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/foo.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/index.js delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/package.json delete mode 100644 packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/yarn.lock delete mode 100644 packages/core/integration-tests/test/integration/inlined-assests/buzz.js delete mode 100644 packages/core/integration-tests/test/integration/inlined-assests/inline-module.js delete mode 100644 packages/core/integration-tests/test/integration/inlined-assests/local.html delete mode 100644 packages/core/integration-tests/test/integration/inlined-assests/package.json delete mode 100644 packages/core/integration-tests/test/integration/inlined-assests/yarn.lock diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 3b846b5b943..7f9dbcdce0f 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -11,6 +11,7 @@ import type { MutableBundleGraph, PluginOptions, Target, + BuildMode, } from '@parcel/types'; import type {NodeId} from '@parcel/graph'; import type {SchemaEntity} from '@parcel/utils'; @@ -41,7 +42,7 @@ type ManualSharedBundles = Array<{| split?: number, |}>; -type BundlerConfig = {| +type BaseBundlerConfig = {| http?: number, minBundles?: number, minBundleSize?: number, @@ -50,6 +51,10 @@ type BundlerConfig = {| manualSharedBundles?: ManualSharedBundles, |}; +type BundlerConfig = {| + [mode: BuildMode]: BaseBundlerConfig, +|} & BaseBundlerConfig; + type ResolvedBundlerConfig = {| minBundles: number, minBundleSize: number, @@ -1790,6 +1795,34 @@ function removeBundle( bundleGraph.removeNode(bundleId); } +function resolveEnvironmentConfig( + config: BundlerConfig, + mode: BuildMode, +): BaseBundlerConfig { + // $FlowFixMe Not sure how to convince flow here... + let knownKeys: Array<$Keys> = Object.keys( + nullthrows(CONFIG_SCHEMA.properties), + ); + let resolvedConfig = {}; + + for (const knownKey of knownKeys) { + if (knownKey in config) { + resolvedConfig[knownKey] = config[knownKey]; + } + } + + if (config[mode] != null) { + for (const knownKey of knownKeys) { + if (knownKey in config[mode]) { + resolvedConfig[knownKey] = config[mode][knownKey]; + } + } + } + + // $FlowFixMe Not sure how to convince flow here... + return resolvedConfig; +} + async function loadBundlerConfig( config: Config, options: PluginOptions, @@ -1808,43 +1841,42 @@ async function loadBundlerConfig( invariant(conf?.contents != null); + let envConfig = resolveEnvironmentConfig(conf.contents, options.mode); + // minBundles will be ignored if shared bundles are disabled - if ( - conf.contents.minBundles != null && - conf.contents.disableSharedBundles === true - ) { + if (envConfig.minBundles != null && envConfig.disableSharedBundles === true) { logger.warn({ origin: '@parcel/bundler-default', - message: `The value of "${conf.contents.minBundles}" set for minBundles will not be used as shared bundles have been disabled`, + message: `The value of "${envConfig.minBundles}" set for minBundles will not be used as shared bundles have been disabled`, }); } // minBundleSize will be ignored if shared bundles are disabled if ( - conf.contents.minBundleSize != null && - conf.contents.disableSharedBundles === true + envConfig.minBundleSize != null && + envConfig.disableSharedBundles === true ) { logger.warn({ origin: '@parcel/bundler-default', - message: `The value of "${conf.contents.minBundleSize}" set for minBundleSize will not be used as shared bundles have been disabled`, + message: `The value of "${envConfig.minBundleSize}" set for minBundleSize will not be used as shared bundles have been disabled`, }); } // maxParallelRequests will be ignored if shared bundles are disabled if ( - conf.contents.maxParallelRequests != null && - conf.contents.disableSharedBundles === true + envConfig.maxParallelRequests != null && + envConfig.disableSharedBundles === true ) { logger.warn({ origin: '@parcel/bundler-default', - message: `The value of "${conf.contents.maxParallelRequests}" set for maxParallelRequests will not be used as shared bundles have been disabled`, + message: `The value of "${envConfig.maxParallelRequests}" set for maxParallelRequests will not be used as shared bundles have been disabled`, }); } validateSchema.diagnostic( CONFIG_SCHEMA, { - data: conf?.contents, + data: envConfig, source: await options.inputFS.readFile(conf.filePath, 'utf8'), filePath: conf.filePath, prependKey: `/${encodeJSONKeyComponent('@parcel/bundler-default')}`, @@ -1853,19 +1885,19 @@ async function loadBundlerConfig( 'Invalid config for @parcel/bundler-default', ); - let http = conf.contents.http ?? 2; + let http = envConfig.http ?? 2; let defaults = HTTP_OPTIONS[http]; return { - minBundles: conf.contents.minBundles ?? defaults.minBundles, - minBundleSize: conf.contents.minBundleSize ?? defaults.minBundleSize, + minBundles: envConfig.minBundles ?? defaults.minBundles, + minBundleSize: envConfig.minBundleSize ?? defaults.minBundleSize, maxParallelRequests: - conf.contents.maxParallelRequests ?? defaults.maxParallelRequests, + envConfig.maxParallelRequests ?? defaults.maxParallelRequests, projectRoot: options.projectRoot, disableSharedBundles: - conf.contents.disableSharedBundles ?? defaults.disableSharedBundles, + envConfig.disableSharedBundles ?? defaults.disableSharedBundles, manualSharedBundles: - conf.contents.manualSharedBundles ?? defaults.manualSharedBundles, + envConfig.manualSharedBundles ?? defaults.manualSharedBundles, }; } diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index 3563891efac..040eb28e151 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -9,18 +9,52 @@ import { fsFixture, } from '@parcel/test-utils'; -describe('bundler', function () { +describe.only('bundler', function () { it('should not create shared bundles when a bundle is being reused and disableSharedBundles is enabled', async function () { + await fsFixture(overlayFS, __dirname)` + disable-shared-bundle-single-source + a.js: + import foo from './foo'; + + export default 5; + b.js: + export default 4; + bar.js: + import a from './a'; + import b from './b'; + + export default 3; + foo.js: + import a from './a'; + import b from './b'; + + export default 2; + index.js: + import('./foo'); + import('./bar'); + + export default 1; + + package.json: + { + "@parcel/bundler-default": { + "minBundles": 0, + "minBundleSize": 200, + "maxParallelRequests": 100, + "disableSharedBundles": true + } + } + + yarn.lock:`; + let b = await bundle( - path.join( - __dirname, - 'integration/disable-shared-bundle-single-source/index.js', - ), + path.join(__dirname, 'disable-shared-bundle-single-source/index.js'), { mode: 'production', defaultTargetOptions: { shouldScopeHoist: false, }, + inputFS: overlayFS, }, ); @@ -46,20 +80,50 @@ describe('bundler', function () { }); it('should not create shared bundles and should warn when disableSharedBundles is set to true with maxParallelRequests set', async function () { + await fsFixture(overlayFS, __dirname)` + disable-shared-bundles-true-parallel + a.js: + export default 5; + b.js: + export default 4; + bar.js: + import a from './a'; + import b from './b'; + + export default 3; + foo.js: + import a from './a'; + import b from './b'; + + export default 2; + index.js: + import('./foo'); + import('./bar'); + + export default 1; + + package.json: + { + "@parcel/bundler-default": { + "maxParallelRequests": 100, + "disableSharedBundles": true + } + } + + yarn.lock:`; + let messages = []; let loggerDisposable = Logger.onLog(message => { messages.push(message); }); let b = await bundle( - path.join( - __dirname, - 'integration/disable-shared-bundles-true-parallel/index.js', - ), + path.join(__dirname, 'disable-shared-bundles-true-parallel/index.js'), { mode: 'production', defaultTargetOptions: { shouldScopeHoist: false, }, + inputFS: overlayFS, }, ); loggerDisposable.dispose(); @@ -99,6 +163,38 @@ describe('bundler', function () { }); it('should not create shared bundles and should warn when disableSharedBundles is set to true with minBundleSize set', async function () { + await fsFixture(overlayFS, __dirname)` + disable-shared-bundles-true-min-bundleSize + a.js: + export default 5; + b.js: + export default 4; + bar.js: + import a from './a'; + import b from './b'; + + export default 3; + foo.js: + import a from './a'; + import b from './b'; + + export default 2; + index.js: + import('./foo'); + import('./bar'); + + export default 1; + + package.json: + { + "@parcel/bundler-default": { + "minBundleSize": 200, + "disableSharedBundles": true + } + } + + yarn.lock:`; + let messages = []; let loggerDisposable = Logger.onLog(message => { messages.push(message); @@ -106,13 +202,14 @@ describe('bundler', function () { let b = await bundle( path.join( __dirname, - 'integration/disable-shared-bundles-true-min-bundleSize/index.js', + 'disable-shared-bundles-true-min-bundleSize/index.js', ), { mode: 'production', defaultTargetOptions: { shouldScopeHoist: false, }, + inputFS: overlayFS, }, ); loggerDisposable.dispose(); @@ -152,20 +249,50 @@ describe('bundler', function () { }); it('should not create shared bundles and should warn when disableSharedBundles is set to true with minBundles set', async function () { + await fsFixture(overlayFS, __dirname)` + disable-shared-bundles-true-min-bundles + a.js: + export default 5; + b.js: + export default 4; + bar.js: + import a from './a'; + import b from './b'; + + export default 3; + foo.js: + import a from './a'; + import b from './b'; + + export default 2; + index.js: + import('./foo'); + import('./bar'); + + export default 1; + + package.json: + { + "@parcel/bundler-default": { + "minBundles": 0, + "disableSharedBundles": true + } + } + + yarn.lock:`; + let messages = []; let loggerDisposable = Logger.onLog(message => { messages.push(message); }); let b = await bundle( - path.join( - __dirname, - 'integration/disable-shared-bundles-true-min-bundles/index.js', - ), + path.join(__dirname, 'disable-shared-bundles-true-min-bundles/index.js'), { mode: 'production', defaultTargetOptions: { shouldScopeHoist: false, }, + inputFS: overlayFS, }, ); loggerDisposable.dispose(); @@ -205,6 +332,40 @@ describe('bundler', function () { }); it('should not create shared bundles and should warn when disableSharedBundles is set to true with minBundles, minBundleSize and maxParallelRequests set', async function () { + await fsFixture(overlayFS, __dirname)` + disable-shared-bundles-true-min-bundles-parallel + a.js: + export default 5; + b.js: + export default 4; + bar.js: + import a from './a'; + import b from './b'; + + export default 3; + foo.js: + import a from './a'; + import b from './b'; + + export default 2; + index.js: + import('./foo'); + import('./bar'); + + export default 1; + + package.json: + { + "@parcel/bundler-default": { + "minBundles": 0, + "minBundleSize": 200, + "maxParallelRequests": 100, + "disableSharedBundles": true + } + } + + yarn.lock:`; + let messages = []; let loggerDisposable = Logger.onLog(message => { messages.push(message); @@ -212,13 +373,14 @@ describe('bundler', function () { let b = await bundle( path.join( __dirname, - 'integration/disable-shared-bundles-true-min-bundles-parallel/index.js', + 'disable-shared-bundles-true-min-bundles-parallel/index.js', ), { mode: 'production', defaultTargetOptions: { shouldScopeHoist: false, }, + inputFS: overlayFS, }, ); loggerDisposable.dispose(); @@ -280,17 +442,52 @@ describe('bundler', function () { }); it('should create shared bundles and should not throw a warning when disableSharedBundles is set to false', async function () { + await fsFixture(overlayFS, __dirname)` + disable-shared-bundles-false + a.js: + export default 5; + b.js: + export default 4; + bar.js: + import a from './a'; + import b from './b'; + + export default 3; + foo.js: + import a from './a'; + import b from './b'; + + export default 2; + index.js: + import('./foo'); + import('./bar'); + + export default 1; + + package.json: + { + "@parcel/bundler-default": { + "minBundles": 0, + "minBundleSize": 200, + "maxParallelRequests": 100, + "disableSharedBundles": false + } + } + + yarn.lock:`; + let messages = []; let loggerDisposable = Logger.onLog(message => { messages.push(message); }); let b = await bundle( - path.join(__dirname, 'integration/disable-shared-bundles-false/index.js'), + path.join(__dirname, 'disable-shared-bundles-false/index.js'), { mode: 'production', defaultTargetOptions: { shouldScopeHoist: false, }, + inputFS: overlayFS, }, ); loggerDisposable.dispose(); @@ -321,16 +518,43 @@ describe('bundler', function () { }); it('should not count inline assests towards parallel request limit', async function () { + await fsFixture(overlayFS, __dirname)` + inlined-assests + buzz.js: + export default 7; + inline-module.js: + import('./buzz'); + + export default 10; + local.html: + + + + + + + + package.json: + { + "@parcel/bundler-default": { + "minBundles": 1, + "minBundleSize": 200, + "maxParallelRequests": 2 + } + } + + yarn.lock:`; + // Shared bundle should not be removed in this case - let b = await bundle( - path.join(__dirname, 'integration/inlined-assests/local.html'), - { - mode: 'production', - defaultTargetOptions: { - shouldScopeHoist: false, - }, + let b = await bundle(path.join(__dirname, 'inlined-assests/local.html'), { + mode: 'production', + defaultTargetOptions: { + shouldScopeHoist: false, }, - ); + inputFS: overlayFS, + }); assertBundles(b, [ { @@ -709,6 +933,77 @@ describe('bundler', function () { ]); }); + it('should respect mode specific config', async function () { + await fsFixture(overlayFS, __dirname)` + mode-specific-bundler-config + a.js: + import foo from './foo'; + + export default 5; + b.js: + export default 4; + bar.js: + import a from './a'; + import b from './b'; + + export default 3; + foo.js: + import a from './a'; + import b from './b'; + + export default 2; + index.js: + import('./foo'); + import('./bar'); + + export default 1; + + package.json: + { + "@parcel/bundler-default": { + "minBundles": 0, + "minBundleSize": 200, + "production": { + "maxParallelRequests": 100, + "disableSharedBundles": true + } + } + } + + yarn.lock:`; + + let b = await bundle( + path.join(__dirname, 'mode-specific-bundler-config/index.js'), + { + mode: 'production', + defaultTargetOptions: { + shouldScopeHoist: false, + }, + inputFS: overlayFS, + }, + ); + + assertBundles(b, [ + { + name: 'index.js', + assets: [ + 'index.js', + 'bundle-url.js', + 'cacheLoader.js', + 'esmodule-helpers.js', + 'js-loader.js', + 'bundle-manifest.js', + ], + }, + { + assets: ['foo.js', 'a.js', 'b.js'], + }, + { + assets: ['a.js', 'b.js', 'foo.js', 'bar.js'], + }, + ]); + }); + describe('manual shared bundles', () => { const dir = path.join(__dirname, 'manual-bundle'); diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/a.js b/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/a.js deleted file mode 100644 index c53064a98bf..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/a.js +++ /dev/null @@ -1,3 +0,0 @@ -import foo from './foo'; - -export default 5; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/b.js b/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/b.js deleted file mode 100644 index 04514102e60..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/b.js +++ /dev/null @@ -1 +0,0 @@ -export default 4; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/bar.js b/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/bar.js deleted file mode 100644 index f08fcacacf1..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/bar.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 3; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/foo.js b/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/foo.js deleted file mode 100644 index 288a2e69559..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/foo.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 2; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/index.js b/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/index.js deleted file mode 100644 index 1059a9a2bf6..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import('./foo'); -import('./bar'); - -export default 1; diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/package.json b/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/package.json deleted file mode 100644 index 078980a0a9f..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@parcel/bundler-default": { - "minBundles": 0, - "minBundleSize": 200, - "maxParallelRequests": 100, - "disableSharedBundles": true - } -} diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/yarn.lock b/packages/core/integration-tests/test/integration/disable-shared-bundle-single-source/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/a.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-false/a.js deleted file mode 100644 index 8d144a54b3e..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/a.js +++ /dev/null @@ -1 +0,0 @@ -export default 5; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/b.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-false/b.js deleted file mode 100644 index 04514102e60..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/b.js +++ /dev/null @@ -1 +0,0 @@ -export default 4; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/bar.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-false/bar.js deleted file mode 100644 index f08fcacacf1..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/bar.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 3; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/foo.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-false/foo.js deleted file mode 100644 index 288a2e69559..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/foo.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 2; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/index.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-false/index.js deleted file mode 100644 index 1059a9a2bf6..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import('./foo'); -import('./bar'); - -export default 1; diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/package.json b/packages/core/integration-tests/test/integration/disable-shared-bundles-false/package.json deleted file mode 100644 index 777d3fbf681..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@parcel/bundler-default": { - "minBundles": 0, - "minBundleSize": 200, - "maxParallelRequests": 100, - "disableSharedBundles": false - } -} diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-false/yarn.lock b/packages/core/integration-tests/test/integration/disable-shared-bundles-false/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/a.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/a.js deleted file mode 100644 index 8d144a54b3e..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/a.js +++ /dev/null @@ -1 +0,0 @@ -export default 5; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/b.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/b.js deleted file mode 100644 index 04514102e60..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/b.js +++ /dev/null @@ -1 +0,0 @@ -export default 4; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/bar.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/bar.js deleted file mode 100644 index f08fcacacf1..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/bar.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 3; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/foo.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/foo.js deleted file mode 100644 index 288a2e69559..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/foo.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 2; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/index.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/index.js deleted file mode 100644 index 1059a9a2bf6..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import('./foo'); -import('./bar'); - -export default 1; diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/package.json b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/package.json deleted file mode 100644 index b5915811843..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "@parcel/bundler-default": { - "minBundleSize": 200, - "disableSharedBundles": true - } -} diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/yarn.lock b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundleSize/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/a.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/a.js deleted file mode 100644 index 8d144a54b3e..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/a.js +++ /dev/null @@ -1 +0,0 @@ -export default 5; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/b.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/b.js deleted file mode 100644 index 04514102e60..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/b.js +++ /dev/null @@ -1 +0,0 @@ -export default 4; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/bar.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/bar.js deleted file mode 100644 index f08fcacacf1..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/bar.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 3; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/foo.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/foo.js deleted file mode 100644 index 288a2e69559..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/foo.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 2; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/index.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/index.js deleted file mode 100644 index 1059a9a2bf6..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import('./foo'); -import('./bar'); - -export default 1; diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/package.json b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/package.json deleted file mode 100644 index 078980a0a9f..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@parcel/bundler-default": { - "minBundles": 0, - "minBundleSize": 200, - "maxParallelRequests": 100, - "disableSharedBundles": true - } -} diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/yarn.lock b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles-parallel/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/a.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/a.js deleted file mode 100644 index 8d144a54b3e..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/a.js +++ /dev/null @@ -1 +0,0 @@ -export default 5; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/b.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/b.js deleted file mode 100644 index 04514102e60..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/b.js +++ /dev/null @@ -1 +0,0 @@ -export default 4; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/bar.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/bar.js deleted file mode 100644 index f08fcacacf1..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/bar.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 3; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/foo.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/foo.js deleted file mode 100644 index 288a2e69559..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/foo.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 2; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/index.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/index.js deleted file mode 100644 index 1059a9a2bf6..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import('./foo'); -import('./bar'); - -export default 1; diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/package.json b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/package.json deleted file mode 100644 index 585c70677ae..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "@parcel/bundler-default": { - "minBundles": 0, - "disableSharedBundles": true - } -} diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/yarn.lock b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-min-bundles/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/a.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/a.js deleted file mode 100644 index 8d144a54b3e..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/a.js +++ /dev/null @@ -1 +0,0 @@ -export default 5; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/b.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/b.js deleted file mode 100644 index 04514102e60..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/b.js +++ /dev/null @@ -1 +0,0 @@ -export default 4; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/bar.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/bar.js deleted file mode 100644 index f08fcacacf1..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/bar.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 3; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/foo.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/foo.js deleted file mode 100644 index 288a2e69559..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/foo.js +++ /dev/null @@ -1,4 +0,0 @@ -import a from './a'; -import b from './b'; - -export default 2; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/index.js b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/index.js deleted file mode 100644 index 1059a9a2bf6..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import('./foo'); -import('./bar'); - -export default 1; diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/package.json b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/package.json deleted file mode 100644 index 1ddb759de0f..00000000000 --- a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "@parcel/bundler-default": { - "maxParallelRequests": 100, - "disableSharedBundles": true - } -} diff --git a/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/yarn.lock b/packages/core/integration-tests/test/integration/disable-shared-bundles-true-parallel/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/core/integration-tests/test/integration/inlined-assests/buzz.js b/packages/core/integration-tests/test/integration/inlined-assests/buzz.js deleted file mode 100644 index 6be7d8e2100..00000000000 --- a/packages/core/integration-tests/test/integration/inlined-assests/buzz.js +++ /dev/null @@ -1 +0,0 @@ -export default 7; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/inlined-assests/inline-module.js b/packages/core/integration-tests/test/integration/inlined-assests/inline-module.js deleted file mode 100644 index 6bfb7fe7f23..00000000000 --- a/packages/core/integration-tests/test/integration/inlined-assests/inline-module.js +++ /dev/null @@ -1,3 +0,0 @@ -import('./buzz'); - -export default 10; \ No newline at end of file diff --git a/packages/core/integration-tests/test/integration/inlined-assests/local.html b/packages/core/integration-tests/test/integration/inlined-assests/local.html deleted file mode 100644 index 222116f3ec3..00000000000 --- a/packages/core/integration-tests/test/integration/inlined-assests/local.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/packages/core/integration-tests/test/integration/inlined-assests/package.json b/packages/core/integration-tests/test/integration/inlined-assests/package.json deleted file mode 100644 index 07afabac875..00000000000 --- a/packages/core/integration-tests/test/integration/inlined-assests/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "@parcel/bundler-default": { - "minBundles": 1, - "minBundleSize": 200, - "maxParallelRequests": 2 - } -} diff --git a/packages/core/integration-tests/test/integration/inlined-assests/yarn.lock b/packages/core/integration-tests/test/integration/inlined-assests/yarn.lock deleted file mode 100644 index e69de29bb2d..00000000000 From 997f5073b8ef3d9c516fb30c13260dc9b22ae8e4 Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Thu, 28 Sep 2023 14:10:17 +1000 Subject: [PATCH 09/20] Update to unstable_manualSharedBundles --- .../bundlers/default/src/DefaultBundler.js | 55 ++++++++++++------- .../core/integration-tests/test/bundler.js | 10 ++-- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 7f9dbcdce0f..4fa252531e8 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -48,7 +48,7 @@ type BaseBundlerConfig = {| minBundleSize?: number, maxParallelRequests?: number, disableSharedBundles?: boolean, - manualSharedBundles?: ManualSharedBundles, + unstable_manualSharedBundles?: ManualSharedBundles, |}; type BundlerConfig = {| @@ -1697,7 +1697,7 @@ const CONFIG_SCHEMA: SchemaEntity = { type: 'number', enum: Object.keys(HTTP_OPTIONS).map(k => Number(k)), }, - manualSharedBundles: { + unstable_manualSharedBundles: { type: 'array', items: { type: 'object', @@ -1711,7 +1711,21 @@ const CONFIG_SCHEMA: SchemaEntity = { type: 'string', }, }, + types: { + type: 'array', + items: { + type: 'string', + }, + }, + parent: { + type: 'string', + }, + split: { + type: 'number', + }, }, + required: ['name', 'assets'], + additionalProperties: false, }, }, minBundles: { @@ -1795,7 +1809,7 @@ function removeBundle( bundleGraph.removeNode(bundleId); } -function resolveEnvironmentConfig( +function resolveModeConfig( config: BundlerConfig, mode: BuildMode, ): BaseBundlerConfig { @@ -1841,42 +1855,45 @@ async function loadBundlerConfig( invariant(conf?.contents != null); - let envConfig = resolveEnvironmentConfig(conf.contents, options.mode); + let modeConfig = resolveModeConfig(conf.contents, options.mode); // minBundles will be ignored if shared bundles are disabled - if (envConfig.minBundles != null && envConfig.disableSharedBundles === true) { + if ( + modeConfig.minBundles != null && + modeConfig.disableSharedBundles === true + ) { logger.warn({ origin: '@parcel/bundler-default', - message: `The value of "${envConfig.minBundles}" set for minBundles will not be used as shared bundles have been disabled`, + message: `The value of "${modeConfig.minBundles}" set for minBundles will not be used as shared bundles have been disabled`, }); } // minBundleSize will be ignored if shared bundles are disabled if ( - envConfig.minBundleSize != null && - envConfig.disableSharedBundles === true + modeConfig.minBundleSize != null && + modeConfig.disableSharedBundles === true ) { logger.warn({ origin: '@parcel/bundler-default', - message: `The value of "${envConfig.minBundleSize}" set for minBundleSize will not be used as shared bundles have been disabled`, + message: `The value of "${modeConfig.minBundleSize}" set for minBundleSize will not be used as shared bundles have been disabled`, }); } // maxParallelRequests will be ignored if shared bundles are disabled if ( - envConfig.maxParallelRequests != null && - envConfig.disableSharedBundles === true + modeConfig.maxParallelRequests != null && + modeConfig.disableSharedBundles === true ) { logger.warn({ origin: '@parcel/bundler-default', - message: `The value of "${envConfig.maxParallelRequests}" set for maxParallelRequests will not be used as shared bundles have been disabled`, + message: `The value of "${modeConfig.maxParallelRequests}" set for maxParallelRequests will not be used as shared bundles have been disabled`, }); } validateSchema.diagnostic( CONFIG_SCHEMA, { - data: envConfig, + data: modeConfig, source: await options.inputFS.readFile(conf.filePath, 'utf8'), filePath: conf.filePath, prependKey: `/${encodeJSONKeyComponent('@parcel/bundler-default')}`, @@ -1885,19 +1902,19 @@ async function loadBundlerConfig( 'Invalid config for @parcel/bundler-default', ); - let http = envConfig.http ?? 2; + let http = modeConfig.http ?? 2; let defaults = HTTP_OPTIONS[http]; return { - minBundles: envConfig.minBundles ?? defaults.minBundles, - minBundleSize: envConfig.minBundleSize ?? defaults.minBundleSize, + minBundles: modeConfig.minBundles ?? defaults.minBundles, + minBundleSize: modeConfig.minBundleSize ?? defaults.minBundleSize, maxParallelRequests: - envConfig.maxParallelRequests ?? defaults.maxParallelRequests, + modeConfig.maxParallelRequests ?? defaults.maxParallelRequests, projectRoot: options.projectRoot, disableSharedBundles: - envConfig.disableSharedBundles ?? defaults.disableSharedBundles, + modeConfig.disableSharedBundles ?? defaults.disableSharedBundles, manualSharedBundles: - envConfig.manualSharedBundles ?? defaults.manualSharedBundles, + modeConfig.unstable_manualSharedBundles ?? defaults.manualSharedBundles, }; } diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index 040eb28e151..9028fd37364 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -9,7 +9,7 @@ import { fsFixture, } from '@parcel/test-utils'; -describe.only('bundler', function () { +describe('bundler', function () { it('should not create shared bundles when a bundle is being reused and disableSharedBundles is enabled', async function () { await fsFixture(overlayFS, __dirname)` disable-shared-bundle-single-source @@ -1023,7 +1023,7 @@ describe.only('bundler', function () { { "@parcel/bundler-default": { "minBundleSize": 0, - "manualSharedBundles": [{ + "unstable_manualSharedBundles": [{ "name": "vendor", "assets": ["vendor*.*"] }] @@ -1105,7 +1105,7 @@ describe.only('bundler', function () { { "@parcel/bundler-default": { "minBundleSize": 0, - "manualSharedBundles": [{ + "unstable_manualSharedBundles": [{ "name": "vendor", "assets": ["vendor*.*"], "types": ["js"] @@ -1190,7 +1190,7 @@ describe.only('bundler', function () { { "@parcel/bundler-default": { "minBundleSize": 0, - "manualSharedBundles": [{ + "unstable_manualSharedBundles": [{ "name": "vendor", "parent": "math/math.js", "assets": ["math/!(divide).js"] @@ -1251,7 +1251,7 @@ describe.only('bundler', function () { { "@parcel/bundler-default": { "minBundleSize": 0, - "manualSharedBundles": [{ + "unstable_manualSharedBundles": [{ "name": "vendor", "parent": "vendor.js", "assets": ["**/*"], From 4eee0770c990dd6bbb789ee70fbd325105038324 Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Thu, 28 Sep 2023 15:14:01 +1000 Subject: [PATCH 10/20] Fix config diagnostics --- .../bundlers/default/src/DefaultBundler.js | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 4fa252531e8..9d9838cd6ab 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -1813,28 +1813,24 @@ function resolveModeConfig( config: BundlerConfig, mode: BuildMode, ): BaseBundlerConfig { - // $FlowFixMe Not sure how to convince flow here... - let knownKeys: Array<$Keys> = Object.keys( - nullthrows(CONFIG_SCHEMA.properties), - ); - let resolvedConfig = {}; - - for (const knownKey of knownKeys) { - if (knownKey in config) { - resolvedConfig[knownKey] = config[knownKey]; - } - } + let generalConfig = {}; + let modeConfig = {}; - if (config[mode] != null) { - for (const knownKey of knownKeys) { - if (knownKey in config[mode]) { - resolvedConfig[knownKey] = config[mode][knownKey]; + for (const key of Object.keys(config)) { + if (key === 'development' || key === 'production') { + if (key === mode) { + modeConfig = config[key]; } + } else { + generalConfig[key] = config[key]; } } // $FlowFixMe Not sure how to convince flow here... - return resolvedConfig; + return { + ...generalConfig, + ...modeConfig, + }; } async function loadBundlerConfig( From b9f299e183a8b6a385f91940a751bdb98599b71e Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Thu, 28 Sep 2023 15:53:37 +1000 Subject: [PATCH 11/20] Pre-compile globs for perf --- .../bundlers/default/src/DefaultBundler.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 9d9838cd6ab..00dad546022 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -25,7 +25,7 @@ import { validateSchema, DefaultMap, BitSet, - isGlobMatch, + globToRegex, } from '@parcel/utils'; import logger from '@parcel/logger'; import nullthrows from 'nullthrows'; @@ -474,17 +474,21 @@ function createIdealGraph( ); let parentAsset = configToParentAsset.get(c); + let assetRegexes = c.assets.map(glob => globToRegex(glob)); assetGraph.traverse((node, _, actions) => { if ( node.type === 'asset' && - (!Array.isArray(c.types) || c.types.includes(node.value.type)) && - isGlobMatch( - // +1 accounts for the leading slash - node.value.filePath.slice(config.projectRoot.length + 1), - c.assets, - ) + (!Array.isArray(c.types) || c.types.includes(node.value.type)) ) { + // +1 accounts for leading slash + let projectRelativePath = node.value.filePath.slice( + config.projectRoot.length + 1, + ); + if (!assetRegexes.some(regex => regex.test(projectRelativePath))) { + return; + } + // We track all matching MSB's for constant modules as they are never duplicated // and need to be assigned to all matching bundles if (node.value.meta.isConstantModule === true) { From 1a5d1fb79af6c052eadf4f22bf6db519896d32e6 Mon Sep 17 00:00:00 2001 From: Agnieszka Gawrys Date: Thu, 28 Sep 2023 14:35:50 -0700 Subject: [PATCH 12/20] invariant that msbs cannot be bundlegroups --- .../bundlers/default/src/DefaultBundler.js | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 00dad546022..7650a9ab514 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -183,6 +183,10 @@ function decorateLegacyGraph( let bundle; if (bundleGroupBundleIds.has(bundleNodeId)) { + invariant( + idealBundle.manualSharedBundle == null, + 'Unstable Manual Shared Bundle feature is processing a manualSharedBundle as a BundleGroup', + ); let dependencies = dependencyBundleGraph .getNodeIdsConnectedTo( dependencyBundleGraph.getNodeIdByContentKey(String(bundleNodeId)), @@ -198,18 +202,11 @@ function decorateLegacyGraph( 'Processing a bundleGroup with no entry asset', ); for (let dependency of dependencies) { - if ( - nullthrows(bundleGraph.getResolvedAsset(dependency)).id === - entryAsset.id - ) { - bundleGroup = bundleGraph.createBundleGroup( - dependency, - idealBundle.target, - ); - bundleGroups.push(bundleGroup); - } else { - //Warning? - } + bundleGroup = bundleGraph.createBundleGroup( + dependency, + idealBundle.target, + ); + bundleGroups.push(bundleGroup); } invariant(bundleGroup); entryBundleToBundleGroup.set(bundleNodeId, bundleGroup); From 4a2621c953bb958f3b8cc4f0b47b140e48ce022b Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Mon, 2 Oct 2023 13:59:40 +1100 Subject: [PATCH 13/20] Clean up --- .../bundlers/default/src/DefaultBundler.js | 50 +++++++++---------- .../core/src/public/MutableBundleGraph.js | 10 ---- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 47a254b5bf2..6fe5046d3e3 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -627,7 +627,7 @@ function createIdealGraph( if (manualSharedObject) { // MSB Step 5: If a bundle for this asset already exists and we have a glob match // simply add the asset if it doesn't already have it - //If this was an existing glob we must add the asset + // If this was an existing glob we must add the asset manualAssetToBundle.set(childAsset, bundleId); // Add asset to bundle invariant(bundle !== 'root' && bundle !== null); @@ -773,9 +773,9 @@ function createIdealGraph( bundle.bundleBehavior = dependency.bundleBehavior; } } - //GLOB MATCHING - If the bundle did exist, added the new asset, if the bundle was jsut created, add the key to map + // GLOB MATCHING - If the bundle did exist, added the new asset, if the bundle was jsut created, add the key to map if (manualSharedObject) { - //If this was an existing glob we must add the asset + // If this was an existing glob we must add the asset manualAssetToBundle.set(childAsset, bundleId); // Add asset to bundle invariant(bundle !== 'root' && bundle !== null); @@ -947,30 +947,28 @@ function createIdealGraph( dependency.priority !== 'sync' && dependencyBundleGraph.hasContentKey(dependency.id) ) { - if (dependency.priority !== 'sync') { - let assets = assetGraph.getDependencyAssets(dependency); - if (assets.length === 0) { - return; - } - invariant(assets.length === 1); - let bundleRoot = assets[0]; - let bundle = nullthrows( - bundleGraph.getNode(nullthrows(bundles.get(bundleRoot.id))), + let assets = assetGraph.getDependencyAssets(dependency); + if (assets.length === 0) { + return; + } + invariant(assets.length === 1); + let bundleRoot = assets[0]; + let bundle = nullthrows( + bundleGraph.getNode(nullthrows(bundles.get(bundleRoot.id))), + ); + if ( + bundle !== 'root' && + bundle.bundleBehavior == null && + !bundle.env.isIsolated() && + bundle.env.context === root.env.context + ) { + bundleRootGraph.addEdge( + bundleRootId, + nullthrows(assetToBundleRootNodeId.get(bundleRoot)), + dependency.priority === 'parallel' + ? bundleRootEdgeTypes.parallel + : bundleRootEdgeTypes.lazy, ); - if ( - bundle !== 'root' && - bundle.bundleBehavior == null && - !bundle.env.isIsolated() && - bundle.env.context === root.env.context - ) { - bundleRootGraph.addEdge( - bundleRootId, - nullthrows(assetToBundleRootNodeId.get(bundleRoot)), - dependency.priority === 'parallel' - ? bundleRootEdgeTypes.parallel - : bundleRootEdgeTypes.lazy, - ); - } } } diff --git a/packages/core/core/src/public/MutableBundleGraph.js b/packages/core/core/src/public/MutableBundleGraph.js index 074aa9d5f4f..7144aad779c 100644 --- a/packages/core/core/src/public/MutableBundleGraph.js +++ b/packages/core/core/src/public/MutableBundleGraph.js @@ -80,16 +80,6 @@ export default class MutableBundleGraph ); } - getResolvedAsset(dependency: IDependency): ?IAsset { - let internalAsset = this.#graph.getResolvedAsset( - dependencyToInternalDependency(dependency), - ); - - if (internalAsset) { - return assetFromValue(internalAsset, this.#options); - } - } - createBundleGroup(dependency: IDependency, target: Target): IBundleGroup { let dependencyNode = this.#graph._graph.getNodeByContentKey(dependency.id); if (!dependencyNode) { From f0ebfc1d78ccdb6d08b5ee1f6d9e41747a0399bb Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Mon, 2 Oct 2023 14:28:50 +1100 Subject: [PATCH 14/20] Add empty test --- packages/core/graph/test/BitSet.test.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/core/graph/test/BitSet.test.js b/packages/core/graph/test/BitSet.test.js index 26134710a93..47d77875fee 100644 --- a/packages/core/graph/test/BitSet.test.js +++ b/packages/core/graph/test/BitSet.test.js @@ -55,6 +55,18 @@ describe('BitSet', () => { assertValues(set1, [1, 5]); }); + it('empty should check if there are no values set', () => { + let set1 = new BitSet(5); + + assert(set1.empty()); + + set1.add(3); + assert(!set1.empty()); + + set1.delete(3); + assert(set1.empty()); + }); + it('should intersect with another BitSet', () => { let set1 = new BitSet(5); set1.add(1); From f4703be638a68b10c8681e27b0dec16e06fea734 Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Mon, 2 Oct 2023 15:40:40 +1100 Subject: [PATCH 15/20] Fix bundler tests --- packages/bundlers/default/src/DefaultBundler.js | 12 +++++++----- packages/core/integration-tests/test/bundler.js | 3 ++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 6fe5046d3e3..69c0467bd54 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -1184,6 +1184,8 @@ function createIdealGraph( } }); + reachable.bits.set(reachableNonEntries.bits); + // If we encounter a "manual" asset, draw an edge from reachable to its MSB if (manualSharedObject && !reachable.empty()) { let bundle; @@ -1194,11 +1196,12 @@ function createIdealGraph( sourceBundles.push(nullthrows(bundleRoots.get(assets[id]))[0]); }); - let firstSourceBundle = nullthrows(bundleGraph.getNode(sourceBundles[0])); - invariant(firstSourceBundle !== 'root'); - if (!manualSharedMap.has(manualSharedBundleKey)) { - //CreateBundle + let firstSourceBundle = nullthrows( + bundleGraph.getNode(sourceBundles[0]), + ); + invariant(firstSourceBundle !== 'root'); + bundle = createBundle({ target: firstSourceBundle.target, type: firstSourceBundle.type, @@ -1250,7 +1253,6 @@ function createIdealGraph( // a bundle represents the exact set of assets a set of bundles would share // if a bundle b is a subgraph of another bundle f, reuse it, drawing an edge between the two - reachable.bits.set(reachableNonEntries.bits); if (config.disableSharedBundles === false) { reachableNonEntries.forEach(candidateId => { let candidateSourceBundleRoot = assets[candidateId]; diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index d685525fda4..a3f9e16c493 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -9,7 +9,7 @@ import { fsFixture, } from '@parcel/test-utils'; -describe.only('bundler', function () { +describe('bundler', function () { it('should not create shared bundles when a bundle is being reused and disableSharedBundles is enabled', async function () { await fsFixture(overlayFS, __dirname)` disable-shared-bundle-single-source @@ -1064,6 +1064,7 @@ describe.only('bundler', function () { defaultTargetOptions: { shouldScopeHoist: false, sourceMaps: false, + shouldOptimize: false, }, inputFS: overlayFS, }); From e0994be55b032196b92c8d3691ecefc91e53ecae Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Mon, 2 Oct 2023 16:19:26 +1100 Subject: [PATCH 16/20] Early exit manual shared config when not required --- packages/bundlers/default/src/DefaultBundler.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 69c0467bd54..2d91714ac7d 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -424,6 +424,13 @@ function createIdealGraph( let typeChangeIds = new Set(); function makeManualAssetToConfigLookup() { + let manualAssetToConfig = new Map(); + let constantModuleToMSB = new DefaultMap(() => []); + + if (config.manualSharedBundles.length === 0) { + return {manualAssetToConfig, constantModuleToMSB}; + } + let parentsToConfig = new DefaultMap(() => []); for (let c of config.manualSharedBundles) { @@ -449,9 +456,6 @@ function createIdealGraph( } }); - let manualAssetToConfig = new Map(); - let constantModuleToMSB = new DefaultMap(() => []); - // Process in reverse order so earlier configs take precedence for (let c of config.manualSharedBundles.reverse()) { invariant( From 16cdb990980dfee99ea05f2b90e6a47d5c899173 Mon Sep 17 00:00:00 2001 From: Agnieszka Gawrys Date: Mon, 2 Oct 2023 18:03:07 -0700 Subject: [PATCH 17/20] added test for internalized asset in msb and constants module inside and out of msb --- .../bundlers/default/src/DefaultBundler.js | 25 ++-- .../core/integration-tests/test/bundler.js | 137 ++++++++++++++++++ 2 files changed, 152 insertions(+), 10 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 2d91714ac7d..1c417c2f111 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -615,6 +615,9 @@ function createIdealGraph( if (!manualSharedMap.has(manualSharedBundleKey)) { manualSharedMap.set(manualSharedBundleKey, bundleId); } + nullthrows( + manualBundleToInternalizedAsset.get(bundleId), + ).push(nullthrows(assetToIndex.get(childAsset))); } } else { bundle = nullthrows(bundleGraph.getNode(bundleId)); @@ -644,13 +647,10 @@ function createIdealGraph( bundles.set(childAsset.id, bundleId); bundleRoots.set(childAsset, [bundleId, bundleId]); - if (!bundle.mainEntryAsset) { - bundle.mainEntryAsset = childAsset; - } else { - nullthrows( - manualBundleToInternalizedAsset.get(bundleId), - ).push(nullthrows(assetToIndex.get(childAsset))); - } + nullthrows( + manualBundleToInternalizedAsset.get(bundleId), + ).push(nullthrows(assetToIndex.get(childAsset))); + invariant(manualSharedBundleKey != null); if (!manualSharedMap.has(manualSharedBundleKey)) { manualSharedMap.set(manualSharedBundleKey, bundleId); @@ -1100,6 +1100,12 @@ function createIdealGraph( for (let [id, bundleRootId] of bundleRootGraph.nodes.entries()) { if (bundleRootId == null || id === rootNodeId) continue; let bundleRoot = assets[bundleRootId]; + + if (manualAssetToConfig.has(bundleRoot)) { + // We internalize for MSBs later, we should never delete MSBs + continue; + } + let parentRoots = bundleRootGraph.getNodeIdsConnectedTo(id, ALL_EDGE_TYPES); let canDelete = getBundleFromBundleRoot(bundleRoot).bundleBehavior !== 'isolated'; @@ -1437,9 +1443,8 @@ function createIdealGraph( // match multiple MSB's for (let [asset, msbs] of constantModuleToMSB.entries()) { for (let manualSharedObject of msbs) { - let bundleId = nullthrows( - manualSharedMap.get(manualSharedObject.name + ',js'), - ); + let bundleId = manualSharedMap.get(manualSharedObject.name + ',js'); + if (bundleId == null) continue; let bundle = nullthrows(bundleGraph.getNode(bundleId)); invariant( bundle != null && bundle !== 'root', diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index a3f9e16c493..7d61529399f 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -7,6 +7,7 @@ import { findAsset, overlayFS, fsFixture, + run, } from '@parcel/test-utils'; describe('bundler', function () { @@ -1244,6 +1245,142 @@ describe('bundler', function () { ]); }); + it('should support manual shared bundles with constants module', async function () { + await fsFixture(overlayFS, dir)` + yarn.lock: + // Required for config loading + package.json: + { + "@parcel/transformer-js" : { + "unstable_inlineConstants": true + }, + "@parcel/bundler-default": { + "minBundleSize": 0, + "unstable_manualSharedBundles": [{ + "name": "vendor", + "assets": ["vendor*.*"], + "types": ["js"] + }] + }, + "sideEffects": ["index.js"] + } + + vendor-constants.js: + export const a = 'hello'; + + index.html: + + + index.js: + import {a} from './vendor-constants.js'; + import('./async').then((res) => sideEffectNoop(res)); + sideEffectNoop(a); + + async.js: + import v from './vendor-async.js'; + export default 'async' + v; + + vendor-async.js: + import {a} from './vendor-constants.js'; + export default 'vendor-async.js' + a; + `; + + let b = await bundle(path.join(dir, 'index.html'), { + mode: 'production', + defaultTargetOptions: { + shouldScopeHoist: true, + sourceMaps: false, + shouldOptimize: false, + }, + inputFS: overlayFS, + }); + + assertBundles(b, [ + { + assets: ['index.html'], + }, + { + assets: [ + 'bundle-manifest.js', + 'esm-js-loader.js', + 'index.js', + 'vendor-constants.js', + ], + }, + { + assets: ['async.js', 'vendor-constants.js'], + }, + { + // Vendor MSB for JS + assets: ['vendor-async.js', 'vendor-constants.js'], + }, + ]); + }); + + it('should support manual shared bundles with internalized assets', async function () { + await fsFixture(overlayFS, dir)` + yarn.lock: + // Required for config loading + package.json: + { + "@parcel/transformer-js" : { + "unstable_inlineConstants": true + }, + "@parcel/bundler-default": { + "minBundleSize": 0, + "unstable_manualSharedBundles": [{ + "name": "vendor", + "parent": "manual.js", + "assets": ["**/*"], + "types": ["js"] + }] + } + } + + index.html: + + + index.js: + import a from './manual.js'; + + manual.js: + import v from './vendor-async.js'; + import n from './vendor'; + export default 'async' + v; + + vendor.js: + export const n = () => import('./vendor-async'); + + vendor-async.js: + export default 'vendor-async.js'; + `; + + let b = await bundle(path.join(dir, 'index.html'), { + mode: 'production', + defaultTargetOptions: { + shouldScopeHoist: false, + sourceMaps: false, + shouldOptimize: false, + }, + inputFS: overlayFS, + }); + + assertBundles(b, [ + { + assets: ['index.html'], + }, + { + assets: ['esmodule-helpers.js', 'index.js'], + }, + { + // Vendor MSB for JS + assets: ['manual.js', 'vendor.js', 'vendor-async.js'], + }, + ]); + + await run(b); + }); + it('should support consistently splitting manual shared bundles', async function () { await fsFixture(overlayFS, dir)` yarn.lock: From 9ef3d809daa46dbff29c4df9a01ad365a67286d8 Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Tue, 3 Oct 2023 16:44:23 +1100 Subject: [PATCH 18/20] Fix asset references --- packages/bundlers/default/src/DefaultBundler.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 1c417c2f111..9bf9f47a095 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -511,7 +511,7 @@ function createIdealGraph( makeManualAssetToConfigLookup(); let manualBundleToInternalizedAsset: Map< NodeId, - Array, + Array, > = new DefaultMap(() => []); /** @@ -617,7 +617,7 @@ function createIdealGraph( } nullthrows( manualBundleToInternalizedAsset.get(bundleId), - ).push(nullthrows(assetToIndex.get(childAsset))); + ).push(childAsset); } } else { bundle = nullthrows(bundleGraph.getNode(bundleId)); @@ -649,7 +649,7 @@ function createIdealGraph( nullthrows( manualBundleToInternalizedAsset.get(bundleId), - ).push(nullthrows(assetToIndex.get(childAsset))); + ).push(childAsset); invariant(manualSharedBundleKey != null); if (!manualSharedMap.has(manualSharedBundleKey)) { @@ -849,8 +849,8 @@ function createIdealGraph( if (!bundle.internalizedAssets) { bundle.internalizedAssets = new BitSet(assets.length); } - for (let assetIndex of internalizedAssets) { - bundle.internalizedAssets.add(assetIndex); + for (let asset of internalizedAssets) { + bundle.internalizedAssets.add(nullthrows(assetToIndex.get(asset))); } bundle.mainEntryAsset = null; bundleGroupBundleIds.delete(nodeId); // manual bundles can now act as shared, non-bundle group, should they be non-bundleRoots as well? From 32ee1cb78780b7c3da5f05048b09965017fdc8cc Mon Sep 17 00:00:00 2001 From: Agnieszka Gawrys Date: Tue, 3 Oct 2023 13:30:08 -0700 Subject: [PATCH 19/20] add name prop to manual bundles --- packages/bundlers/default/src/DefaultBundler.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index 9bf9f47a095..82dccc5f75c 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -618,6 +618,7 @@ function createIdealGraph( nullthrows( manualBundleToInternalizedAsset.get(bundleId), ).push(childAsset); + bundle.manualSharedBundle = manualSharedObject.name; } } else { bundle = nullthrows(bundleGraph.getNode(bundleId)); @@ -655,6 +656,7 @@ function createIdealGraph( if (!manualSharedMap.has(manualSharedBundleKey)) { manualSharedMap.set(manualSharedBundleKey, bundleId); } + bundle.manualSharedBundle = manualSharedObject.name; } } @@ -763,6 +765,7 @@ function createIdealGraph( if (!manualSharedMap.has(manualSharedBundleKey)) { manualSharedMap.set(manualSharedBundleKey, bundleId); } + bundle.manualSharedBundle = manualSharedObject.name; } } else { bundle = bundleGraph.getNode(bundleId); @@ -791,6 +794,7 @@ function createIdealGraph( if (!manualSharedMap.has(manualSharedBundleKey)) { manualSharedMap.set(manualSharedBundleKey, bundleId); } + bundle.manualSharedBundle = manualSharedObject.name; } bundles.set(childAsset.id, bundleId); From d05c975944b91b1a4eff26bf6370052d133c88b2 Mon Sep 17 00:00:00 2001 From: mattcompiles Date: Wed, 4 Oct 2023 11:00:38 +1100 Subject: [PATCH 20/20] Add isBundleSplittable MSB test case --- .../core/integration-tests/test/bundler.js | 194 +++++++++++++----- 1 file changed, 137 insertions(+), 57 deletions(-) diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index 7d61529399f..e73d6956a83 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -16,26 +16,26 @@ describe('bundler', function () { disable-shared-bundle-single-source a.js: import foo from './foo'; - + export default 5; b.js: export default 4; bar.js: import a from './a'; import b from './b'; - + export default 3; foo.js: import a from './a'; import b from './b'; - + export default 2; index.js: import('./foo'); import('./bar'); - + export default 1; - + package.json: { "@parcel/bundler-default": { @@ -45,7 +45,7 @@ describe('bundler', function () { "disableSharedBundles": true } } - + yarn.lock:`; let b = await bundle( @@ -90,19 +90,19 @@ describe('bundler', function () { bar.js: import a from './a'; import b from './b'; - + export default 3; foo.js: import a from './a'; import b from './b'; - + export default 2; index.js: import('./foo'); import('./bar'); - + export default 1; - + package.json: { "@parcel/bundler-default": { @@ -110,7 +110,7 @@ describe('bundler', function () { "disableSharedBundles": true } } - + yarn.lock:`; let messages = []; @@ -173,19 +173,19 @@ describe('bundler', function () { bar.js: import a from './a'; import b from './b'; - + export default 3; foo.js: import a from './a'; import b from './b'; - + export default 2; index.js: import('./foo'); import('./bar'); - + export default 1; - + package.json: { "@parcel/bundler-default": { @@ -193,7 +193,7 @@ describe('bundler', function () { "disableSharedBundles": true } } - + yarn.lock:`; let messages = []; @@ -259,19 +259,19 @@ describe('bundler', function () { bar.js: import a from './a'; import b from './b'; - + export default 3; foo.js: import a from './a'; import b from './b'; - + export default 2; index.js: import('./foo'); import('./bar'); - + export default 1; - + package.json: { "@parcel/bundler-default": { @@ -279,7 +279,7 @@ describe('bundler', function () { "disableSharedBundles": true } } - + yarn.lock:`; let messages = []; @@ -342,19 +342,19 @@ describe('bundler', function () { bar.js: import a from './a'; import b from './b'; - + export default 3; foo.js: import a from './a'; import b from './b'; - + export default 2; index.js: import('./foo'); import('./bar'); - + export default 1; - + package.json: { "@parcel/bundler-default": { @@ -364,7 +364,7 @@ describe('bundler', function () { "disableSharedBundles": true } } - + yarn.lock:`; let messages = []; @@ -452,19 +452,19 @@ describe('bundler', function () { bar.js: import a from './a'; import b from './b'; - + export default 3; foo.js: import a from './a'; import b from './b'; - + export default 2; index.js: import('./foo'); import('./bar'); - + export default 1; - + package.json: { "@parcel/bundler-default": { @@ -474,7 +474,7 @@ describe('bundler', function () { "disableSharedBundles": false } } - + yarn.lock:`; let messages = []; @@ -525,7 +525,7 @@ describe('bundler', function () { export default 7; inline-module.js: import('./buzz'); - + export default 10; local.html: @@ -536,7 +536,7 @@ describe('bundler', function () { - + package.json: { "@parcel/bundler-default": { @@ -545,7 +545,7 @@ describe('bundler', function () { "maxParallelRequests": 2 } } - + yarn.lock:`; // Shared bundle should not be removed in this case @@ -939,26 +939,26 @@ describe('bundler', function () { mode-specific-bundler-config a.js: import foo from './foo'; - + export default 5; b.js: export default 4; bar.js: import a from './a'; import b from './b'; - + export default 3; foo.js: import a from './a'; import b from './b'; - + export default 2; index.js: import('./foo'); import('./bar'); - + export default 1; - + package.json: { "@parcel/bundler-default": { @@ -970,7 +970,7 @@ describe('bundler', function () { } } } - + yarn.lock:`; let b = await bundle( @@ -1030,7 +1030,7 @@ describe('bundler', function () { }] } } - + index.html: @@ -1045,7 +1045,7 @@ describe('bundler', function () { vendor.js: export default 'vendor.js'; - + vendor-async.js: export default 'vendor-async.js'; @@ -1053,7 +1053,7 @@ describe('bundler', function () { body { background: blue; } - + vendor-async.css: body { color: blue; @@ -1099,6 +1099,86 @@ describe('bundler', function () { ]); }); + it('should respect Asset.isBundleSplittable', async function () { + await fsFixture(overlayFS, dir)` + yarn.lock: + // Required for config loading + package.json: + { + "@parcel/bundler-default": { + "unstable_manualSharedBundles": [{ + "name": "manual-inline", + "assets": ["shared.js"] + }] + } + } + + .parcelrc: + { + "extends": "@parcel/config-default", + "transformers": { + "*.js": ["./transformer.js", "..."], + } + } + + transformer.js: + import { Transformer } from '@parcel/plugin'; + + export default new Transformer({ + transform({asset}) { + if (asset.filePath.endsWith('.html')) { + asset.isBundleSplittable = false; + } + + return [asset]; + } + }); + + index.html: + + + + index.js: + import shared from './shared.js'; + sideEffectNoop(shared); + + shared.js: + export default 'shared'; + `; + + let b = await bundle(path.join(dir, 'index.html'), { + mode: 'production', + defaultTargetOptions: { + shouldScopeHoist: false, + sourceMaps: false, + shouldOptimize: false, + }, + inputFS: overlayFS, + }); + + assertBundles(b, [ + { + assets: ['index.html'], + }, + { + // Inline script bundle + assets: ['index.html', 'esmodule-helpers.js', 'shared.js'], + }, + { + assets: ['esmodule-helpers.js', 'index.js'], + }, + { + // MSB for JS + assets: ['shared.js'], + }, + ]); + + run(b); + }); + it('should support manual shared bundles via glob config option for configured types', async function () { await fsFixture(overlayFS, dir)` yarn.lock: @@ -1114,7 +1194,7 @@ describe('bundler', function () { }] } } - + index.html: @@ -1129,7 +1209,7 @@ describe('bundler', function () { vendor.js: export default 'vendor.js'; - + vendor-async.js: export default 'vendor-async.js'; @@ -1137,7 +1217,7 @@ describe('bundler', function () { body { background: blue; } - + vendor-async.css: body { color: blue; @@ -1210,8 +1290,8 @@ describe('bundler', function () { math math.js: export * from './add'; - export * from './subtract'; - export * from './divide'; + export * from './subtract'; + export * from './divide'; add.js: export const add = (a, b) => a + b; @@ -1264,8 +1344,8 @@ describe('bundler', function () { }, "sideEffects": ["index.js"] } - - vendor-constants.js: + + vendor-constants.js: export const a = 'hello'; index.html: @@ -1279,7 +1359,7 @@ describe('bundler', function () { async.js: import v from './vendor-async.js'; export default 'async' + v; - + vendor-async.js: import {a} from './vendor-constants.js'; export default 'vendor-async.js' + a; @@ -1336,7 +1416,7 @@ describe('bundler', function () { }] } } - + index.html: @@ -1347,10 +1427,10 @@ describe('bundler', function () { import v from './vendor-async.js'; import n from './vendor'; export default 'async' + v; - + vendor.js: export const n = () => import('./vendor-async'); - + vendor-async.js: export default 'vendor-async.js'; `; @@ -1407,15 +1487,15 @@ describe('bundler', function () { vendor.js: export * from './a'; - export * from './b'; + export * from './b'; export * from './c'; - export * from './d'; + export * from './d'; export * from './e'; export * from './f'; export * from './g'; export * from './h'; export * from './i'; - export * from './j'; + export * from './j'; a.js: export const a = 'a';