@parcel/core
Version:
184 lines (183 loc) • 10.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _assert() {
const data = _interopRequireDefault(require("assert"));
_assert = function () {
return data;
};
return data;
}
function _nullthrows() {
const data = _interopRequireDefault(require("nullthrows"));
_nullthrows = function () {
return data;
};
return data;
}
function _rust() {
const data = require("@parcel/rust");
_rust = function () {
return data;
};
return data;
}
var _BundleGraph = _interopRequireDefault(require("./BundleGraph"));
var _BundleGraph2 = _interopRequireWildcard(require("../BundleGraph"));
var _Bundle = require("./Bundle");
var _Asset = require("./Asset");
var _utils = require("../utils");
var _Dependency = _interopRequireWildcard(require("./Dependency"));
var _Environment = require("./Environment");
var _Target = require("./Target");
var _constants = require("../constants");
var _projectPath = require("../projectPath");
var _types = require("../types");
var _BundleGroup = _interopRequireWildcard(require("./BundleGroup"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
class MutableBundleGraph extends _BundleGraph.default {
#graph /*: InternalBundleGraph */;
#options /*: ParcelOptions */;
#bundlePublicIds /*: Set<string> */ = new Set();
constructor(graph, options) {
super(graph, _Bundle.Bundle.get.bind(_Bundle.Bundle), options);
this.#graph = graph;
this.#options = options;
}
addAssetToBundle(asset, bundle) {
this.#graph.addAssetToBundle((0, _Asset.assetToAssetValue)(asset), (0, _Bundle.bundleToInternalBundle)(bundle));
}
addAssetGraphToBundle(asset, bundle, shouldSkipDependency) {
this.#graph.addAssetGraphToBundle((0, _Asset.assetToAssetValue)(asset), (0, _Bundle.bundleToInternalBundle)(bundle), shouldSkipDependency ? d => shouldSkipDependency(new _Dependency.default(d, this.#options)) : undefined);
}
addEntryToBundle(asset, bundle, shouldSkipDependency) {
this.#graph.addEntryToBundle((0, _Asset.assetToAssetValue)(asset), (0, _Bundle.bundleToInternalBundle)(bundle), shouldSkipDependency ? d => shouldSkipDependency(new _Dependency.default(d, this.#options)) : undefined);
}
createBundleGroup(dependency, target) {
let dependencyNode = this.#graph._graph.getNodeByContentKey(dependency.id);
if (!dependencyNode) {
throw new Error('Dependency not found');
}
(0, _assert().default)(dependencyNode.type === 'dependency');
let resolved = this.#graph.getResolvedAsset((0, _Dependency.dependencyToInternalDependency)(dependency));
if (!resolved) {
throw new Error('Dependency did not resolve to an asset ' + dependency.id);
}
let bundleGroup = {
target: (0, _Target.targetToInternalTarget)(target),
entryAssetId: resolved.id
};
let bundleGroupKey = (0, _utils.getBundleGroupId)(bundleGroup);
let bundleGroupNodeId = this.#graph._graph.hasContentKey(bundleGroupKey) ? this.#graph._graph.getNodeIdByContentKey(bundleGroupKey) : this.#graph._graph.addNodeByContentKey(bundleGroupKey, {
id: bundleGroupKey,
type: 'bundle_group',
value: bundleGroup
});
let dependencyNodeId = this.#graph._graph.getNodeIdByContentKey(dependencyNode.id);
let resolvedNodeId = this.#graph._graph.getNodeIdByContentKey(resolved.id);
let assetNodes = this.#graph._graph.getNodeIdsConnectedFrom(dependencyNodeId);
this.#graph._graph.addEdge(dependencyNodeId, bundleGroupNodeId);
this.#graph._graph.replaceNodeIdsConnectedTo(bundleGroupNodeId, assetNodes);
this.#graph._graph.addEdge(dependencyNodeId, resolvedNodeId, _BundleGraph2.bundleGraphEdgeTypes.references);
if (
// This check is needed for multiple targets, when we go over the same nodes twice
this.#graph._graph.hasEdge(dependencyNodeId, resolvedNodeId, _BundleGraph2.bundleGraphEdgeTypes.null)) {
//nullEdgeType
this.#graph._graph.removeEdge(dependencyNodeId, resolvedNodeId);
}
if (dependency.isEntry) {
this.#graph._graph.addEdge((0, _nullthrows().default)(this.#graph._graph.rootNodeId), bundleGroupNodeId, _BundleGraph2.bundleGraphEdgeTypes.bundle);
} else {
let inboundBundleNodeIds = this.#graph._graph.getNodeIdsConnectedTo(dependencyNodeId, _BundleGraph2.bundleGraphEdgeTypes.contains);
for (let inboundBundleNodeId of inboundBundleNodeIds) {
var _this$graph$_graph$ge;
(0, _assert().default)(((_this$graph$_graph$ge = this.#graph._graph.getNode(inboundBundleNodeId)) === null || _this$graph$_graph$ge === void 0 ? void 0 : _this$graph$_graph$ge.type) === 'bundle');
this.#graph._graph.addEdge(inboundBundleNodeId, bundleGroupNodeId, _BundleGraph2.bundleGraphEdgeTypes.bundle);
}
}
return new _BundleGroup.default(bundleGroup, this.#options);
}
removeBundleGroup(bundleGroup) {
this.#graph.removeBundleGroup((0, _BundleGroup.bundleGroupToInternalBundleGroup)(bundleGroup));
}
internalizeAsyncDependency(bundle, dependency) {
this.#graph.internalizeAsyncDependency((0, _Bundle.bundleToInternalBundle)(bundle), (0, _Dependency.dependencyToInternalDependency)(dependency));
}
createBundle(opts) {
let entryAsset = opts.entryAsset ? (0, _Asset.assetToAssetValue)(opts.entryAsset) : null;
let target = (0, _Target.targetToInternalTarget)(opts.target);
let bundleId = (0, _rust().hashString)('bundle:' + (opts.entryAsset ? opts.entryAsset.id : opts.uniqueKey) + (0, _projectPath.fromProjectPathRelative)(target.distDir) + (opts.bundleBehavior ?? ''));
let existing = this.#graph._graph.getNodeByContentKey(bundleId);
if (existing != null) {
(0, _assert().default)(existing.type === 'bundle');
return _Bundle.Bundle.get(existing.value, this.#graph, this.#options);
}
let publicId = (0, _utils.getPublicId)(bundleId, existing => this.#bundlePublicIds.has(existing));
this.#bundlePublicIds.add(publicId);
let isPlaceholder = false;
if (entryAsset) {
let entryAssetNode = this.#graph._graph.getNodeByContentKey(entryAsset.id);
(0, _assert().default)((entryAssetNode === null || entryAssetNode === void 0 ? void 0 : entryAssetNode.type) === 'asset', 'Entry asset does not exist');
isPlaceholder = entryAssetNode.requested === false;
}
let bundleNode = {
type: 'bundle',
id: bundleId,
value: {
id: bundleId,
hashReference: this.#options.shouldContentHash ? _constants.HASH_REF_PREFIX + bundleId : bundleId.slice(-8),
type: opts.entryAsset ? opts.entryAsset.type : opts.type,
env: opts.env ? (0, _Environment.environmentToInternalEnvironment)(opts.env) : (0, _nullthrows().default)(entryAsset).env,
entryAssetIds: entryAsset ? [entryAsset.id] : [],
mainEntryId: entryAsset === null || entryAsset === void 0 ? void 0 : entryAsset.id,
pipeline: opts.entryAsset ? opts.entryAsset.pipeline : opts.pipeline,
needsStableName: opts.needsStableName,
bundleBehavior: opts.bundleBehavior != null ? _types.BundleBehavior[opts.bundleBehavior] : null,
isSplittable: opts.entryAsset ? opts.entryAsset.isBundleSplittable : opts.isSplittable,
isPlaceholder,
target,
name: null,
displayName: null,
publicId,
manualSharedBundle: opts.manualSharedBundle
}
};
let bundleNodeId = this.#graph._graph.addNodeByContentKey(bundleId, bundleNode);
if (opts.entryAsset) {
this.#graph._graph.addEdge(bundleNodeId, this.#graph._graph.getNodeIdByContentKey(opts.entryAsset.id));
}
return _Bundle.Bundle.get(bundleNode.value, this.#graph, this.#options);
}
addBundleToBundleGroup(bundle, bundleGroup) {
this.#graph.addBundleToBundleGroup((0, _Bundle.bundleToInternalBundle)(bundle), (0, _BundleGroup.bundleGroupToInternalBundleGroup)(bundleGroup));
}
createAssetReference(dependency, asset, bundle) {
return this.#graph.createAssetReference((0, _Dependency.dependencyToInternalDependency)(dependency), (0, _Asset.assetToAssetValue)(asset), (0, _Bundle.bundleToInternalBundle)(bundle));
}
createBundleReference(from, to) {
return this.#graph.createBundleReference((0, _Bundle.bundleToInternalBundle)(from), (0, _Bundle.bundleToInternalBundle)(to));
}
getDependencyAssets(dependency) {
return this.#graph.getDependencyAssets((0, _Dependency.dependencyToInternalDependency)(dependency)).map(asset => (0, _Asset.assetFromValue)(asset, this.#options));
}
getBundleGroupsContainingBundle(bundle) {
return this.#graph.getBundleGroupsContainingBundle((0, _Bundle.bundleToInternalBundle)(bundle)).map(bundleGroup => new _BundleGroup.default(bundleGroup, this.#options));
}
getParentBundlesOfBundleGroup(bundleGroup) {
return this.#graph.getParentBundlesOfBundleGroup((0, _BundleGroup.bundleGroupToInternalBundleGroup)(bundleGroup)).map(bundle => _Bundle.Bundle.get(bundle, this.#graph, this.#options));
}
getTotalSize(asset) {
return this.#graph.getTotalSize((0, _Asset.assetToAssetValue)(asset));
}
isAssetReachableFromBundle(asset, bundle) {
return this.#graph.isAssetReachableFromBundle((0, _Asset.assetToAssetValue)(asset), (0, _Bundle.bundleToInternalBundle)(bundle));
}
removeAssetGraphFromBundle(asset, bundle) {
this.#graph.removeAssetGraphFromBundle((0, _Asset.assetToAssetValue)(asset), (0, _Bundle.bundleToInternalBundle)(bundle));
}
}
exports.default = MutableBundleGraph;