Son CV dans un terminal web en Javascript! https://terminal-cv.gregandev.fr
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

234 lines
7.2 KiB

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createAssetIdFromOptions = createAssetIdFromOptions;
2 years ago
exports.createAsset = createAsset;
exports.generateFromAST = generateFromAST;
exports.getInvalidationId = getInvalidationId;
2 years ago
exports.getInvalidationHash = getInvalidationHash;
function _stream() {
const data = require("stream");
_stream = function () {
return data;
};
return data;
}
function _logger() {
const data = require("@parcel/logger");
_logger = function () {
return data;
};
return data;
}
function _nullthrows() {
const data = _interopRequireDefault(require("nullthrows"));
_nullthrows = function () {
return data;
};
return data;
}
var _CommittedAsset = _interopRequireDefault(require("./CommittedAsset"));
var _UncommittedAsset = _interopRequireDefault(require("./UncommittedAsset"));
var _loadParcelPlugin = _interopRequireDefault(require("./loadParcelPlugin"));
var _Asset = require("./public/Asset");
var _PluginOptions = _interopRequireDefault(require("./public/PluginOptions"));
function _utils() {
const data = require("@parcel/utils");
_utils = function () {
return data;
};
return data;
}
var _utils2 = require("./utils");
var _buildCache = require("./buildCache");
var _projectPath = require("./projectPath");
function _hash() {
const data = require("@parcel/hash");
_hash = function () {
return data;
};
return data;
}
var _types = require("./types");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function createAssetIdFromOptions(options) {
var _options$uniqueKey, _options$pipeline, _options$query;
let uniqueKey = (_options$uniqueKey = options.uniqueKey) !== null && _options$uniqueKey !== void 0 ? _options$uniqueKey : '';
let idBase = options.idBase != null ? options.idBase : (0, _projectPath.fromProjectPathRelative)(options.filePath);
return (0, _hash().hashString)(idBase + options.type + options.env.id + uniqueKey + ':' + ((_options$pipeline = options.pipeline) !== null && _options$pipeline !== void 0 ? _options$pipeline : '') + ':' + ((_options$query = options.query) !== null && _options$query !== void 0 ? _options$query : ''));
}
function createAsset(projectRoot, options) {
var _options$committed, _options$isBundleSpli, _options$sideEffects, _options$uniqueKey2;
return {
id: options.id != null ? options.id : createAssetIdFromOptions(options),
committed: (_options$committed = options.committed) !== null && _options$committed !== void 0 ? _options$committed : false,
hash: options.hash,
filePath: options.filePath,
query: options.query,
bundleBehavior: options.bundleBehavior ? _types.BundleBehavior[options.bundleBehavior] : null,
isBundleSplittable: (_options$isBundleSpli = options.isBundleSplittable) !== null && _options$isBundleSpli !== void 0 ? _options$isBundleSpli : true,
type: options.type,
contentKey: options.contentKey,
mapKey: options.mapKey,
astKey: options.astKey,
astGenerator: options.astGenerator,
dependencies: options.dependencies || new Map(),
isSource: options.isSource,
outputHash: options.outputHash,
pipeline: options.pipeline,
env: options.env,
meta: options.meta || {},
stats: options.stats,
symbols: options.symbols && new Map([...options.symbols].map(([k, v]) => [k, {
local: v.local,
meta: v.meta,
loc: (0, _utils2.toInternalSourceLocation)(projectRoot, v.loc)
}])),
sideEffects: (_options$sideEffects = options.sideEffects) !== null && _options$sideEffects !== void 0 ? _options$sideEffects : true,
uniqueKey: (_options$uniqueKey2 = options.uniqueKey) !== null && _options$uniqueKey2 !== void 0 ? _options$uniqueKey2 : '',
plugin: options.plugin,
configPath: options.configPath,
configKeyPath: options.configKeyPath
};
}
const generateResults = new WeakMap();
function generateFromAST(asset) {
let output = generateResults.get(asset.value);
if (output == null) {
output = _generateFromAST(asset);
generateResults.set(asset.value, output);
}
return output;
}
async function _generateFromAST(asset) {
var _plugin$generate;
let ast = await asset.getAST();
if (ast == null) {
throw new Error('Asset has no AST');
}
let pluginName = (0, _nullthrows().default)(asset.value.plugin);
let {
plugin
} = await (0, _loadParcelPlugin.default)(pluginName, (0, _projectPath.fromProjectPath)(asset.options.projectRoot, (0, _nullthrows().default)(asset.value.configPath)), (0, _nullthrows().default)(asset.value.configKeyPath), asset.options);
let generate = (_plugin$generate = plugin.generate) === null || _plugin$generate === void 0 ? void 0 : _plugin$generate.bind(plugin);
if (!generate) {
throw new Error(`${pluginName} does not have a generate method`);
}
let {
content,
map
} = await generate({
asset: new _Asset.Asset(asset),
ast,
options: new _PluginOptions.default(asset.options),
logger: new (_logger().PluginLogger)({
origin: pluginName
})
});
let mapBuffer = map === null || map === void 0 ? void 0 : map.toBuffer(); // Store the results in the cache so we can avoid generating again next time
await Promise.all([asset.options.cache.setStream((0, _nullthrows().default)(asset.value.contentKey), (0, _utils().blobToStream)(content)), mapBuffer != null && asset.options.cache.setBlob((0, _nullthrows().default)(asset.value.mapKey), mapBuffer)]);
return {
content: content instanceof _stream().Readable ? asset.options.cache.getStream((0, _nullthrows().default)(asset.value.contentKey)) : content,
map
};
}
function getInvalidationId(invalidation) {
switch (invalidation.type) {
case 'file':
return 'file:' + (0, _projectPath.fromProjectPathRelative)(invalidation.filePath);
case 'env':
return 'env:' + invalidation.key;
case 'option':
return 'option:' + invalidation.key;
default:
throw new Error('Unknown invalidation type: ' + invalidation.type);
}
}
const hashCache = (0, _buildCache.createBuildCache)();
async function getInvalidationHash(invalidations, options) {
if (invalidations.length === 0) {
return '';
}
let sortedInvalidations = invalidations.slice().sort((a, b) => getInvalidationId(a) < getInvalidationId(b) ? -1 : 1);
let hashes = '';
for (let invalidation of sortedInvalidations) {
switch (invalidation.type) {
case 'file':
{
// Only recompute the hash of this file if we haven't seen it already during this build.
let fileHash = hashCache.get(invalidation.filePath);
if (fileHash == null) {
fileHash = (0, _utils().hashFile)(options.inputFS, (0, _projectPath.fromProjectPath)(options.projectRoot, invalidation.filePath));
hashCache.set(invalidation.filePath, fileHash);
}
hashes += await fileHash;
break;
}
case 'env':
hashes += invalidation.key + ':' + (options.env[invalidation.key] || '');
break;
case 'option':
hashes += invalidation.key + ':' + (0, _utils2.hashFromOption)(options[invalidation.key]);
break;
default:
throw new Error('Unknown invalidation type: ' + invalidation.type);
}
}
return (0, _hash().hashString)(hashes);
}