UNPKG

@parcel/core

Version:
196 lines (195 loc) • 9.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.bundleGraphToInternalBundleGraph = bundleGraphToInternalBundleGraph; 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 _graph() { const data = require("@parcel/graph"); _graph = function () { return data; }; return data; } var _Asset = require("./Asset"); var _Bundle = require("./Bundle"); var _Dependency = _interopRequireWildcard(require("./Dependency")); var _Target = require("./Target"); var _utils = require("../utils"); 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 }; } // Friendly access for other modules within this package that need access // to the internal bundle. const _bundleGraphToInternalBundleGraph = new WeakMap(); function bundleGraphToInternalBundleGraph(bundleGraph) { return (0, _nullthrows().default)(_bundleGraphToInternalBundleGraph.get(bundleGraph)); } class BundleGraph { #graph; #options; #createBundle; constructor(graph, createBundle, options) { this.#graph = graph; this.#options = options; this.#createBundle = createBundle; // $FlowFixMe _bundleGraphToInternalBundleGraph.set(this, graph); } getAssetById(id) { return (0, _Asset.assetFromValue)(this.#graph.getAssetById(id), this.#options); } getAssetPublicId(asset) { return this.#graph.getAssetPublicId((0, _Asset.assetToAssetValue)(asset)); } isDependencySkipped(dep) { return this.#graph.isDependencySkipped((0, _Dependency.dependencyToInternalDependency)(dep)); } getResolvedAsset(dep, bundle) { let resolution = this.#graph.getResolvedAsset((0, _Dependency.dependencyToInternalDependency)(dep), bundle && (0, _Bundle.bundleToInternalBundle)(bundle)); if (resolution) { return (0, _Asset.assetFromValue)(resolution, this.#options); } } getIncomingDependencies(asset) { return this.#graph.getIncomingDependencies((0, _Asset.assetToAssetValue)(asset)).map(dep => (0, _Dependency.getPublicDependency)(dep, this.#options)); } getAssetWithDependency(dep) { let asset = this.#graph.getAssetWithDependency((0, _Dependency.dependencyToInternalDependency)(dep)); if (asset) { return (0, _Asset.assetFromValue)(asset, this.#options); } } getBundleGroupsContainingBundle(bundle) { return this.#graph.getBundleGroupsContainingBundle((0, _Bundle.bundleToInternalBundle)(bundle)).map(bundleGroup => new _BundleGroup.default(bundleGroup, this.#options)); } getReferencedBundles(bundle, opts) { return this.#graph.getReferencedBundles((0, _Bundle.bundleToInternalBundle)(bundle), opts).map(bundle => this.#createBundle(bundle, this.#graph, this.#options)); } getReferencingBundles(bundle) { return this.#graph.getReferencingBundles((0, _Bundle.bundleToInternalBundle)(bundle)).map(bundle => this.#createBundle(bundle, this.#graph, this.#options)); } resolveAsyncDependency(dependency, bundle) { let resolved = this.#graph.resolveAsyncDependency((0, _Dependency.dependencyToInternalDependency)(dependency), bundle && (0, _Bundle.bundleToInternalBundle)(bundle)); if (resolved == null) { return; } else if (resolved.type === 'bundle_group') { return { type: 'bundle_group', value: new _BundleGroup.default(resolved.value, this.#options) }; } return { type: 'asset', value: (0, _Asset.assetFromValue)(resolved.value, this.#options) }; } getReferencedBundle(dependency, bundle) { let result = this.#graph.getReferencedBundle((0, _Dependency.dependencyToInternalDependency)(dependency), (0, _Bundle.bundleToInternalBundle)(bundle)); if (result != null) { return this.#createBundle(result, this.#graph, this.#options); } } getDependencies(asset) { return this.#graph.getDependencies((0, _Asset.assetToAssetValue)(asset)).map(dep => (0, _Dependency.getPublicDependency)(dep, this.#options)); } isAssetReachableFromBundle(asset, bundle) { return this.#graph.isAssetReachableFromBundle((0, _Asset.assetToAssetValue)(asset), (0, _Bundle.bundleToInternalBundle)(bundle)); } isAssetReferenced(bundle, asset) { return this.#graph.isAssetReferenced((0, _Bundle.bundleToInternalBundle)(bundle), (0, _Asset.assetToAssetValue)(asset)); } hasParentBundleOfType(bundle, type) { return this.#graph.hasParentBundleOfType((0, _Bundle.bundleToInternalBundle)(bundle), type); } getBundlesInBundleGroup(bundleGroup, opts) { return this.#graph.getBundlesInBundleGroup((0, _BundleGroup.bundleGroupToInternalBundleGroup)(bundleGroup), opts).map(bundle => this.#createBundle(bundle, this.#graph, this.#options)); } getBundles(opts) { return this.#graph.getBundles(opts).map(bundle => this.#createBundle(bundle, this.#graph, this.#options)); } isEntryBundleGroup(bundleGroup) { return this.#graph.isEntryBundleGroup((0, _BundleGroup.bundleGroupToInternalBundleGroup)(bundleGroup)); } getChildBundles(bundle) { return this.#graph.getChildBundles((0, _Bundle.bundleToInternalBundle)(bundle)).map(bundle => this.#createBundle(bundle, this.#graph, this.#options)); } getParentBundles(bundle) { return this.#graph.getParentBundles((0, _Bundle.bundleToInternalBundle)(bundle)).map(bundle => this.#createBundle(bundle, this.#graph, this.#options)); } getSymbolResolution(asset, symbol, boundary) { let res = this.#graph.getSymbolResolution((0, _Asset.assetToAssetValue)(asset), symbol, boundary ? (0, _Bundle.bundleToInternalBundle)(boundary) : null); return { asset: (0, _Asset.assetFromValue)(res.asset, this.#options), exportSymbol: res.exportSymbol, symbol: res.symbol, loc: (0, _utils.fromInternalSourceLocation)(this.#options.projectRoot, res.loc) }; } getExportedSymbols(asset, boundary) { let res = this.#graph.getExportedSymbols((0, _Asset.assetToAssetValue)(asset), boundary ? (0, _Bundle.bundleToInternalBundle)(boundary) : null); return res.map(e => ({ asset: (0, _Asset.assetFromValue)(e.asset, this.#options), exportSymbol: e.exportSymbol, symbol: e.symbol, loc: (0, _utils.fromInternalSourceLocation)(this.#options.projectRoot, e.loc), exportAs: e.exportAs })); } traverse(visit, start, opts) { return this.#graph.traverse((0, _graph().mapVisitor)((node, actions) => { // Skipping unused dependencies here is faster than doing an isDependencySkipped check inside the visitor // because the node needs to be re-looked up by id from the hashmap. if (opts !== null && opts !== void 0 && opts.skipUnusedDependencies && node.type === 'dependency' && (node.hasDeferred || node.excluded)) { actions.skipChildren(); return null; } return node.type === 'asset' ? { type: 'asset', value: (0, _Asset.assetFromValue)(node.value, this.#options) } : { type: 'dependency', value: (0, _Dependency.getPublicDependency)(node.value, this.#options) }; }, visit), start ? (0, _Asset.assetToAssetValue)(start) : undefined); } traverseBundles(visit, startBundle) { return this.#graph.traverseBundles((0, _graph().mapVisitor)(bundle => this.#createBundle(bundle, this.#graph, this.#options), visit), startBundle == null ? undefined : (0, _Bundle.bundleToInternalBundle)(startBundle)); } getBundlesWithAsset(asset) { return this.#graph.getBundlesWithAsset((0, _Asset.assetToAssetValue)(asset)).map(bundle => this.#createBundle(bundle, this.#graph, this.#options)); } getBundlesWithDependency(dependency) { return this.#graph.getBundlesWithDependency((0, _Dependency.dependencyToInternalDependency)(dependency)).map(bundle => this.#createBundle(bundle, this.#graph, this.#options)); } getUsedSymbols(v) { if (v instanceof _Asset.Asset) { return this.#graph.getUsedSymbolsAsset((0, _Asset.assetToAssetValue)(v)); } else { (0, _assert().default)(v instanceof _Dependency.default); return this.#graph.getUsedSymbolsDependency((0, _Dependency.dependencyToInternalDependency)(v)); } } getEntryRoot(target) { return this.#graph.getEntryRoot(this.#options.projectRoot, (0, _Target.targetToInternalTarget)(target)); } getEntryBundles() { return this.#graph.getEntryBundles().map(b => this.#createBundle(b, this.#graph, this.#options)); } } exports.default = BundleGraph;