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.
terminal-cv/node_modules/@parcel/core/lib/UncommittedAsset.js

417 lines
12 KiB

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _assert() {
const data = _interopRequireDefault(require("assert"));
_assert = function () {
return data;
};
return data;
}
function _stream() {
const data = require("stream");
_stream = function () {
return data;
};
return data;
}
function _sourceMap() {
const data = _interopRequireDefault(require("@parcel/source-map"));
_sourceMap = function () {
return data;
};
return data;
}
function _utils() {
const data = require("@parcel/utils");
_utils = function () {
return data;
};
return data;
}
function _hash() {
const data = require("@parcel/hash");
_hash = function () {
return data;
};
return data;
}
var _serializer = require("./serializer");
var _Dependency = require("./Dependency");
var _Environment = require("./Environment");
var _constants = require("./constants");
var _assetUtils = require("./assetUtils");
var _types = require("./types");
var _utils2 = require("./utils");
var _projectPath = require("./projectPath");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class UncommittedAsset {
constructor({
value,
options,
content,
mapBuffer,
ast,
isASTDirty,
idBase,
invalidations,
fileCreateInvalidations
}) {
this.value = value;
this.options = options;
this.content = content;
this.mapBuffer = mapBuffer;
this.ast = ast;
this.isASTDirty = isASTDirty || false;
this.idBase = idBase;
this.invalidations = invalidations || new Map();
this.fileCreateInvalidations = fileCreateInvalidations || [];
}
/*
* Prepares the asset for being serialized to the cache by commiting its
* content and map of the asset to the cache.
*/
async commit(pipelineKey) {
var _this$value$hash;
// If there is a dirty AST, clear out any old content and map as these
// must be regenerated later and shouldn't be committed.
if (this.ast != null && this.isASTDirty) {
this.content = null;
this.mapBuffer = null;
}
let size = 0;
let contentKey = this.content == null ? null : this.getCacheKey('content' + pipelineKey);
let mapKey = this.mapBuffer == null ? null : this.getCacheKey('map' + pipelineKey);
let astKey = this.ast == null ? null : this.getCacheKey('ast' + pipelineKey); // Since we can only read from the stream once, compute the content length
// and hash while it's being written to the cache.
await Promise.all([contentKey != null && this.commitContent(contentKey).then(s => size = s), this.mapBuffer != null && mapKey != null && this.options.cache.setBlob(mapKey, this.mapBuffer), astKey != null && this.options.cache.setBlob(astKey, (0, _serializer.serializeRaw)(this.ast))]);
this.value.contentKey = contentKey;
this.value.mapKey = mapKey;
this.value.astKey = astKey;
this.value.outputHash = (0, _hash().hashString)(((_this$value$hash = this.value.hash) !== null && _this$value$hash !== void 0 ? _this$value$hash : '') + pipelineKey + (await (0, _assetUtils.getInvalidationHash)(this.getInvalidations(), this.options)));
if (this.content != null) {
this.value.stats.size = size;
}
this.value.isLargeBlob = this.content instanceof _stream().Readable;
this.value.committed = true;
}
async commitContent(contentKey) {
let content = await this.content;
if (content == null) {
return 0;
}
let size = 0;
if (content instanceof _stream().Readable) {
await this.options.cache.setStream(contentKey, content.pipe(new (_utils().TapStream)(buf => {
size += buf.length;
})));
return size;
}
if (typeof content === 'string') {
size = Buffer.byteLength(content);
} else {
size = content.length;
}
await this.options.cache.setBlob(contentKey, content);
return size;
}
async getCode() {
if (this.ast != null && this.isASTDirty) {
throw new Error('Cannot call getCode() on an asset with a dirty AST. For transformers, implement canReuseAST() and check asset.isASTDirty.');
}
let content = await this.content;
if (typeof content === 'string' || content instanceof Buffer) {
return content.toString();
} else if (content != null) {
this.content = (0, _utils().bufferStream)(content);
return (await this.content).toString();
}
(0, _assert().default)(false, 'Internal error: missing content');
}
async getBuffer() {
let content = await this.content;
if (content == null) {
return Buffer.alloc(0);
} else if (content instanceof Buffer) {
return content;
} else if (typeof content === 'string') {
return Buffer.from(content);
}
this.content = (0, _utils().bufferStream)(content);
return this.content;
}
getStream() {
var _this$content;
if (this.content instanceof _stream().Readable) {
// Remove content if it's a stream, as it should not be reused.
let content = this.content;
this.content = null;
return content;
}
if (this.content instanceof Promise) {
return (0, _utils().streamFromPromise)(this.content);
}
return (0, _utils().blobToStream)((_this$content = this.content) !== null && _this$content !== void 0 ? _this$content : Buffer.alloc(0));
}
setCode(code) {
this.content = code;
this.clearAST();
}
setBuffer(buffer) {
this.content = buffer;
this.clearAST();
}
setStream(stream) {
this.content = stream;
this.clearAST();
}
async loadExistingSourcemap() {
if (this.map) {
return this.map;
}
let code = await this.getCode();
let map = await (0, _utils().loadSourceMap)((0, _projectPath.fromProjectPath)(this.options.projectRoot, this.value.filePath), code, {
fs: this.options.inputFS,
projectRoot: this.options.projectRoot
});
if (map) {
this.map = map;
this.mapBuffer = map.toBuffer();
this.setCode(code.replace(_utils().SOURCEMAP_RE, ''));
}
return this.map;
}
getMapBuffer() {
return Promise.resolve(this.mapBuffer);
}
async getMap() {
if (this.map == null) {
var _this$mapBuffer;
let mapBuffer = (_this$mapBuffer = this.mapBuffer) !== null && _this$mapBuffer !== void 0 ? _this$mapBuffer : await this.getMapBuffer();
if (mapBuffer) {
// Get sourcemap from flatbuffer
this.map = new (_sourceMap().default)(this.options.projectRoot, mapBuffer);
}
}
return this.map;
}
setMap(map) {
var _this$map;
// If we have sourceContent available, it means this asset is source code without
// a previous source map. Ensure that the map set by the transformer has the original
// source content available.
if (map != null && this.sourceContent != null) {
map.setSourceContent((0, _projectPath.fromProjectPath)(this.options.projectRoot, this.value.filePath), // $FlowFixMe
this.sourceContent);
this.sourceContent = null;
}
this.map = map;
this.mapBuffer = (_this$map = this.map) === null || _this$map === void 0 ? void 0 : _this$map.toBuffer();
}
getAST() {
return Promise.resolve(this.ast);
}
setAST(ast) {
this.ast = ast;
this.isASTDirty = true;
this.value.astGenerator = {
type: ast.type,
version: ast.version
};
}
clearAST() {
this.ast = null;
this.isASTDirty = false;
this.value.astGenerator = null;
}
getCacheKey(key) {
return (0, _hash().hashString)(_constants.PARCEL_VERSION + key + this.value.id + (this.value.hash || ''));
}
addDependency(opts) {
// eslint-disable-next-line no-unused-vars
let {
env,
symbols,
...rest
} = opts;
let dep = (0, _Dependency.createDependency)(this.options.projectRoot, { ...rest,
// $FlowFixMe "convert" the $ReadOnlyMaps to the interal mutable one
symbols,
env: (0, _Environment.mergeEnvironments)(this.options.projectRoot, this.value.env, env),
sourceAssetId: this.value.id,
sourcePath: (0, _projectPath.fromProjectPath)(this.options.projectRoot, this.value.filePath)
});
let existing = this.value.dependencies.get(dep.id);
if (existing) {
(0, _Dependency.mergeDependencies)(existing, dep);
} else {
this.value.dependencies.set(dep.id, dep);
}
return dep.id;
}
invalidateOnFileChange(filePath) {
let invalidation = {
type: 'file',
filePath
};
this.invalidations.set((0, _assetUtils.getInvalidationId)(invalidation), invalidation);
}
invalidateOnFileCreate(invalidation) {
this.fileCreateInvalidations.push((0, _utils2.invalidateOnFileCreateToInternal)(this.options.projectRoot, invalidation));
}
invalidateOnEnvChange(key) {
let invalidation = {
type: 'env',
key
};
this.invalidations.set((0, _assetUtils.getInvalidationId)(invalidation), invalidation);
}
getInvalidations() {
return [...this.invalidations.values()];
}
getDependencies() {
return Array.from(this.value.dependencies.values());
}
createChildAsset(result, plugin, configPath, configKeyPath) {
var _result$content, _result$bundleBehavio, _result$isBundleSplit, _result$pipeline, _result$sideEffects;
let content = (_result$content = result.content) !== null && _result$content !== void 0 ? _result$content : null;
let asset = new UncommittedAsset({
value: (0, _assetUtils.createAsset)(this.options.projectRoot, {
idBase: this.idBase,
hash: this.value.hash,
filePath: this.value.filePath,
type: result.type,
bundleBehavior: (_result$bundleBehavio = result.bundleBehavior) !== null && _result$bundleBehavio !== void 0 ? _result$bundleBehavio : this.value.bundleBehavior == null ? null : _types.BundleBehaviorNames[this.value.bundleBehavior],
isBundleSplittable: (_result$isBundleSplit = result.isBundleSplittable) !== null && _result$isBundleSplit !== void 0 ? _result$isBundleSplit : this.value.isBundleSplittable,
isSource: this.value.isSource,
env: (0, _Environment.mergeEnvironments)(this.options.projectRoot, this.value.env, result.env),
dependencies: this.value.type === result.type ? new Map(this.value.dependencies) : new Map(),
meta: { ...this.value.meta,
...result.meta
},
pipeline: (_result$pipeline = result.pipeline) !== null && _result$pipeline !== void 0 ? _result$pipeline : this.value.type === result.type ? this.value.pipeline : null,
stats: {
time: 0,
size: this.value.stats.size
},
// $FlowFixMe
symbols: result.symbols,
sideEffects: (_result$sideEffects = result.sideEffects) !== null && _result$sideEffects !== void 0 ? _result$sideEffects : this.value.sideEffects,
uniqueKey: result.uniqueKey,
astGenerator: result.ast ? {
type: result.ast.type,
version: result.ast.version
} : null,
plugin,
configPath,
configKeyPath
}),
options: this.options,
content,
ast: result.ast,
isASTDirty: result.ast === this.ast ? this.isASTDirty : true,
mapBuffer: result.map ? result.map.toBuffer() : null,
idBase: this.idBase,
invalidations: this.invalidations,
fileCreateInvalidations: this.fileCreateInvalidations
});
let dependencies = result.dependencies;
if (dependencies) {
for (let dep of dependencies) {
asset.addDependency(dep);
}
}
return asset;
}
updateId() {
// $FlowFixMe - this is fine
this.value.id = (0, _assetUtils.createAssetIdFromOptions)(this.value);
}
}
exports.default = UncommittedAsset;