@parcel/core
Version:
160 lines (157 loc) • 5.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.BuildAbortError = void 0;
exports.assertSignalNotAborted = assertSignalNotAborted;
exports.createInvalidations = createInvalidations;
exports.fromInternalSourceLocation = fromInternalSourceLocation;
exports.getBundleGroupId = getBundleGroupId;
exports.getPublicId = getPublicId;
exports.hashFromOption = hashFromOption;
exports.invalidateOnFileCreateToInternal = invalidateOnFileCreateToInternal;
exports.optionsProxy = optionsProxy;
exports.toInternalSourceLocation = toInternalSourceLocation;
exports.toInternalSymbols = toInternalSymbols;
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 _utils() {
const data = require("@parcel/utils");
_utils = function () {
return data;
};
return data;
}
var _projectPath = require("./projectPath");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const base62 = (0, _baseX().default)('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
function getBundleGroupId(bundleGroup) {
return 'bundle_group:' + bundleGroup.target.name + bundleGroup.entryAssetId;
}
function assertSignalNotAborted(signal) {
if (signal && signal.aborted) {
throw new BuildAbortError();
}
}
class BuildAbortError extends Error {
name = 'BuildAbortError';
}
exports.BuildAbortError = BuildAbortError;
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', 'shouldTrace', '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 createInvalidations() {
return {
invalidateOnBuild: false,
invalidateOnStartup: false,
invalidateOnOptionChange: new Set(),
invalidateOnEnvChange: new Set(),
invalidateOnFileChange: new Set(),
invalidateOnFileCreate: []
};
}
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)
}]));
}