UNPKG

@parcel/core

Version:
256 lines (254 loc) • 7.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MutableAsset = exports.Asset = void 0; exports.assetFromValue = assetFromValue; exports.assetToAssetValue = assetToAssetValue; exports.mutableAssetToUncommittedAsset = mutableAssetToUncommittedAsset; function _nullthrows() { const data = _interopRequireDefault(require("nullthrows")); _nullthrows = function () { return data; }; return data; } var _Environment = _interopRequireDefault(require("./Environment")); var _Dependency = require("./Dependency"); var _Symbols = require("./Symbols"); var _UncommittedAsset = _interopRequireDefault(require("../UncommittedAsset")); var _CommittedAsset = _interopRequireDefault(require("../CommittedAsset")); var _Environment2 = require("../Environment"); var _projectPath = require("../projectPath"); var _types = require("../types"); var _utils = require("../utils"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const inspect = Symbol.for('nodejs.util.inspect.custom'); const uncommittedAssetValueToAsset = new WeakMap(); const committedAssetValueToAsset = new WeakMap(); const assetValueToMutableAsset = new WeakMap(); const _assetToAssetValue = new WeakMap(); const _mutableAssetToUncommittedAsset = new WeakMap(); function assetToAssetValue(asset) { return (0, _nullthrows().default)(_assetToAssetValue.get(asset)); } function mutableAssetToUncommittedAsset(mutableAsset) { return (0, _nullthrows().default)(_mutableAssetToUncommittedAsset.get(mutableAsset)); } function assetFromValue(value, options) { return new Asset(value.committed ? new _CommittedAsset.default(value, options) : new _UncommittedAsset.default({ value, options })); } class BaseAsset { #asset; #query /*: ?URLSearchParams */; constructor(asset) { this.#asset = asset; _assetToAssetValue.set(this, asset.value); } // $FlowFixMe[unsupported-syntax] [inspect]() { return `Asset(${this.filePath})`; } get id() { return this.#asset.value.id; } get type() { return this.#asset.value.type; } get env() { return new _Environment.default(this.#asset.value.env, this.#asset.options); } get fs() { return this.#asset.options.inputFS; } get filePath() { return (0, _projectPath.fromProjectPath)(this.#asset.options.projectRoot, this.#asset.value.filePath); } get query() { if (!this.#query) { this.#query = new URLSearchParams(this.#asset.value.query ?? ''); } return this.#query; } get meta() { return this.#asset.value.meta; } get bundleBehavior() { let bundleBehavior = this.#asset.value.bundleBehavior; return bundleBehavior == null ? null : _types.BundleBehaviorNames[bundleBehavior]; } get isBundleSplittable() { return this.#asset.value.isBundleSplittable; } get isSource() { return this.#asset.value.isSource; } get sideEffects() { return this.#asset.value.sideEffects; } get symbols() { return new _Symbols.AssetSymbols(this.#asset.options, this.#asset.value); } get uniqueKey() { return this.#asset.value.uniqueKey; } get astGenerator() { return this.#asset.value.astGenerator; } get pipeline() { return this.#asset.value.pipeline; } getDependencies() { return this.#asset.getDependencies().map(dep => (0, _Dependency.getPublicDependency)(dep, this.#asset.options)); } getCode() { return this.#asset.getCode(); } getBuffer() { return this.#asset.getBuffer(); } getStream() { return this.#asset.getStream(); } getMap() { return this.#asset.getMap(); } getAST() { return this.#asset.getAST(); } getMapBuffer() { return this.#asset.getMapBuffer(); } } class Asset extends BaseAsset { #asset /*: CommittedAsset | UncommittedAsset */; #env /*: ?Environment */; constructor(asset) { let assetValueToAsset = asset.value.committed ? committedAssetValueToAsset : uncommittedAssetValueToAsset; let existing = assetValueToAsset.get(asset.value); if (existing != null) { return existing; } super(asset); this.#asset = asset; assetValueToAsset.set(asset.value, this); return this; } get env() { this.#env ??= new _Environment.default(this.#asset.value.env, this.#asset.options); return this.#env; } get stats() { return this.#asset.value.stats; } } exports.Asset = Asset; class MutableAsset extends BaseAsset { #asset /*: UncommittedAsset */; constructor(asset) { let existing = assetValueToMutableAsset.get(asset.value); if (existing != null) { return existing; } super(asset); this.#asset = asset; assetValueToMutableAsset.set(asset.value, this); _mutableAssetToUncommittedAsset.set(this, asset); return this; } setMap(map) { this.#asset.setMap(map); } get type() { return this.#asset.value.type; } set type(type) { if (type !== this.#asset.value.type) { this.#asset.value.type = type; this.#asset.updateId(); } } get bundleBehavior() { let bundleBehavior = this.#asset.value.bundleBehavior; return bundleBehavior == null ? null : _types.BundleBehaviorNames[bundleBehavior]; } set bundleBehavior(bundleBehavior) { this.#asset.value.bundleBehavior = bundleBehavior ? _types.BundleBehavior[bundleBehavior] : null; } get isBundleSplittable() { return this.#asset.value.isBundleSplittable; } set isBundleSplittable(isBundleSplittable) { this.#asset.value.isBundleSplittable = isBundleSplittable; } get sideEffects() { return this.#asset.value.sideEffects; } set sideEffects(sideEffects) { this.#asset.value.sideEffects = sideEffects; } get uniqueKey() { return this.#asset.value.uniqueKey; } set uniqueKey(uniqueKey) { if (this.#asset.value.uniqueKey != null) { throw new Error("Cannot change an asset's uniqueKey after it has been set."); } this.#asset.value.uniqueKey = uniqueKey; } get symbols() { return new _Symbols.MutableAssetSymbols(this.#asset.options, this.#asset.value); } addDependency(dep) { return this.#asset.addDependency(dep); } invalidateOnFileChange(filePath) { this.#asset.invalidateOnFileChange((0, _projectPath.toProjectPath)(this.#asset.options.projectRoot, filePath)); } invalidateOnFileCreate(invalidation) { this.#asset.invalidateOnFileCreate(invalidation); } invalidateOnEnvChange(env) { this.#asset.invalidateOnEnvChange(env); } invalidateOnStartup() { this.#asset.invalidateOnStartup(); } invalidateOnBuild() { this.#asset.invalidateOnBuild(); } isASTDirty() { return this.#asset.isASTDirty; } setBuffer(buffer) { this.#asset.setBuffer(buffer); } setCode(code) { this.#asset.setCode(code); } setStream(stream) { this.#asset.setStream(stream); } setAST(ast) { return this.#asset.setAST(ast); } addURLDependency(url, opts) { return this.addDependency({ specifier: url, specifierType: 'url', priority: 'lazy', ...opts }); } setEnvironment(env) { this.#asset.value.env = (0, _Environment2.createEnvironment)({ ...env, loc: (0, _utils.toInternalSourceLocation)(this.#asset.options.projectRoot, env.loc) }); this.#asset.updateId(); } } exports.MutableAsset = MutableAsset;