"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getBundleGroupId = getBundleGroupId; exports.assertSignalNotAborted = assertSignalNotAborted; exports.registerCoreWithSerializer = registerCoreWithSerializer; exports.getPublicId = getPublicId; exports.optionsProxy = optionsProxy; exports.hashFromOption = hashFromOption; exports.invalidateOnFileCreateToInternal = invalidateOnFileCreateToInternal; exports.fromInternalSourceLocation = fromInternalSourceLocation; exports.toInternalSourceLocation = toInternalSourceLocation; exports.toInternalSymbols = toInternalSymbols; exports.BuildAbortError = void 0; function _assert() { const data = _interopRequireDefault(require("assert")); _assert = function () { return data; }; return data; } function _baseX() { const data = _interopRequireDefault(require("base-x")); _baseX = function () { return data; }; return data; } function _graph() { const data = require("@parcel/graph"); _graph = function () { return data; }; return data; } function _utils() { const data = require("@parcel/utils"); _utils = function () { return data; }; return data; } var _serializer = require("./serializer"); var _AssetGraph = _interopRequireDefault(require("./AssetGraph")); var _BundleGraph = _interopRequireDefault(require("./BundleGraph")); var _ParcelConfig = _interopRequireDefault(require("./ParcelConfig")); var _RequestTracker = require("./RequestTracker"); var _Config = _interopRequireDefault(require("./public/Config")); var _projectPath = require("./projectPath"); var _package = _interopRequireDefault(require("../package.json")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // flowlint-next-line untyped-import:off const base62 = (0, _baseX().default)('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); function getBundleGroupId(bundleGroup) { return 'bundle_group:' + bundleGroup.entryAssetId; } function assertSignalNotAborted(signal) { if (signal && signal.aborted) { throw new BuildAbortError(); } } class BuildAbortError extends Error { name = 'BuildAbortError'; } exports.BuildAbortError = BuildAbortError; let coreRegistered; function registerCoreWithSerializer() { if (coreRegistered) { return; } const packageVersion = _package.default.version; if (typeof packageVersion !== 'string') { throw new Error('Expected package version to be a string'); } // $FlowFixMe[incompatible-cast] for (let [name, ctor] of Object.entries({ AssetGraph: _AssetGraph.default, Config: _Config.default, BundleGraph: _BundleGraph.default, Graph: _graph().Graph, ParcelConfig: _ParcelConfig.default, RequestGraph: _RequestTracker.RequestGraph })) { (0, _serializer.registerSerializableClass)(packageVersion + ':' + name, ctor); } coreRegistered = true; } function getPublicId(id, alreadyExists) { let encoded = base62.encode(Buffer.from(id, 'hex')); for (let end = 5; end <= encoded.length; end++) { let candidate = encoded.slice(0, end); if (!alreadyExists(candidate)) { return candidate; } } throw new Error('Original id was not unique'); } // These options don't affect compilation and should cause invalidations const ignoreOptions = new Set(['env', // handled by separate invalidateOnEnvChange 'inputFS', 'outputFS', 'workerFarm', 'packageManager', 'detailedReport', 'shouldDisableCache', 'cacheDir', 'shouldAutoInstall', 'logLevel', 'shouldProfile', 'shouldPatchConsole', 'projectRoot', 'additionalReporters']); function optionsProxy(options, invalidateOnOptionChange, addDevDependency) { let packageManager = addDevDependency ? proxyPackageManager(options.projectRoot, options.packageManager, addDevDependency) : options.packageManager; return new Proxy(options, { get(target, prop) { if (prop === 'packageManager') { return packageManager; } if (!ignoreOptions.has(prop)) { invalidateOnOptionChange(prop); } return target[prop]; } }); } function proxyPackageManager(projectRoot, packageManager, addDevDependency) { let require = (id, from, opts) => { addDevDependency({ specifier: id, resolveFrom: (0, _projectPath.toProjectPath)(projectRoot, from), range: opts === null || opts === void 0 ? void 0 : opts.range }); return packageManager.require(id, from, opts); }; return new Proxy(packageManager, { get(target, prop) { if (prop === 'require') { return require; } // $FlowFixMe return target[prop]; } }); } function hashFromOption(value) { if (typeof value === 'object' && value != null) { return (0, _utils().hashObject)(value); } return String(value); } function invalidateOnFileCreateToInternal(projectRoot, invalidation) { if (invalidation.glob != null) { return { glob: (0, _projectPath.toProjectPath)(projectRoot, invalidation.glob) }; } else if (invalidation.filePath != null) { return { filePath: (0, _projectPath.toProjectPath)(projectRoot, invalidation.filePath) }; } else { (0, _assert().default)(invalidation.aboveFilePath != null && invalidation.fileName != null); return { fileName: invalidation.fileName, aboveFilePath: (0, _projectPath.toProjectPath)(projectRoot, invalidation.aboveFilePath) }; } } function fromInternalSourceLocation(projectRoot, loc) { if (!loc) return loc; return { filePath: (0, _projectPath.fromProjectPath)(projectRoot, loc.filePath), start: loc.start, end: loc.end }; } function toInternalSourceLocation(projectRoot, loc) { if (!loc) return loc; return { filePath: (0, _projectPath.toProjectPath)(projectRoot, loc.filePath), start: loc.start, end: loc.end }; } function toInternalSymbols(projectRoot, symbols) { if (!symbols) return symbols; return new Map([...symbols].map(([k, { loc, ...v }]) => [k, { ...v, loc: toInternalSourceLocation(projectRoot, loc) }])); }