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.
244 lines
5.3 KiB
244 lines
5.3 KiB
2 years ago
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.remapAstLocations = remapAstLocations;
|
||
|
exports.parse = parse;
|
||
|
exports.generateAST = generateAST;
|
||
|
exports.generate = generate;
|
||
|
exports.convertBabelLoc = convertBabelLoc;
|
||
|
Object.defineProperty(exports, "babelErrorEnhancer", {
|
||
|
enumerable: true,
|
||
|
get: function () {
|
||
|
return _babelErrorUtils.babelErrorEnhancer;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
function _path() {
|
||
|
const data = _interopRequireDefault(require("path"));
|
||
|
|
||
|
_path = function () {
|
||
|
return data;
|
||
|
};
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
function _parser() {
|
||
|
const data = require("@babel/parser");
|
||
|
|
||
|
_parser = 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 _babylonWalk() {
|
||
|
const data = require("@parcel/babylon-walk");
|
||
|
|
||
|
_babylonWalk = function () {
|
||
|
return data;
|
||
|
};
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
var _babelErrorUtils = require("./babelErrorUtils");
|
||
|
|
||
|
function _astring() {
|
||
|
const data = require("astring");
|
||
|
|
||
|
_astring = function () {
|
||
|
return data;
|
||
|
};
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
var _generator = require("./generator");
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
// $FlowFixMe
|
||
|
// $FlowFixMe
|
||
|
function remapAstLocations(ast, map) {
|
||
|
// remap ast to original mappings
|
||
|
// This improves sourcemap accuracy and fixes sourcemaps when scope-hoisting
|
||
|
(0, _babylonWalk().traverseAll)(ast.program, node => {
|
||
|
if (node.loc) {
|
||
|
var _node$loc;
|
||
|
|
||
|
if ((_node$loc = node.loc) !== null && _node$loc !== void 0 && _node$loc.start) {
|
||
|
let mapping = map.findClosestMapping(node.loc.start.line, node.loc.start.column);
|
||
|
|
||
|
if (mapping !== null && mapping !== void 0 && mapping.original) {
|
||
|
// $FlowFixMe
|
||
|
node.loc.start.line = mapping.original.line; // $FlowFixMe
|
||
|
|
||
|
node.loc.start.column = mapping.original.column; // $FlowFixMe
|
||
|
|
||
|
let length = node.loc.end.column - node.loc.start.column; // $FlowFixMe
|
||
|
|
||
|
node.loc.end.line = mapping.original.line; // $FlowFixMe
|
||
|
|
||
|
node.loc.end.column = mapping.original.column + length; // $FlowFixMe
|
||
|
|
||
|
node.loc.filename = mapping.source;
|
||
|
} else {
|
||
|
// Maintain null mappings?
|
||
|
node.loc = null;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
async function parse({
|
||
|
asset,
|
||
|
code,
|
||
|
options
|
||
|
}) {
|
||
|
try {
|
||
|
let program = (0, _parser().parse)(code, {
|
||
|
sourceFilename: (0, _utils().relativeUrl)(options.projectRoot, asset.filePath),
|
||
|
allowReturnOutsideFunction: true,
|
||
|
strictMode: false,
|
||
|
sourceType: 'module'
|
||
|
});
|
||
|
let map = await asset.getMap();
|
||
|
|
||
|
if (map) {
|
||
|
remapAstLocations(program, map);
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
type: 'babel',
|
||
|
version: '7.0.0',
|
||
|
program
|
||
|
};
|
||
|
} catch (e) {
|
||
|
throw await (0, _babelErrorUtils.babelErrorEnhancer)(e, asset);
|
||
|
}
|
||
|
} // astring is ~50x faster than @babel/generator. We use it with a custom
|
||
|
// generator to handle the Babel AST differences from ESTree.
|
||
|
|
||
|
|
||
|
function generateAST({
|
||
|
ast,
|
||
|
sourceFileName,
|
||
|
sourceMaps,
|
||
|
options
|
||
|
}) {
|
||
|
let map = new (_sourceMap().default)(options.projectRoot);
|
||
|
let mappings = [];
|
||
|
let generated = (0, _astring().generate)(ast.program, {
|
||
|
generator: _generator.generator,
|
||
|
expressionsPrecedence: _generator.expressionsPrecedence,
|
||
|
comments: true,
|
||
|
sourceMap: sourceMaps ? {
|
||
|
file: sourceFileName,
|
||
|
|
||
|
addMapping(mapping) {
|
||
|
// Copy the object because astring mutates it
|
||
|
mappings.push({
|
||
|
original: mapping.original,
|
||
|
generated: {
|
||
|
line: mapping.generated.line,
|
||
|
column: mapping.generated.column
|
||
|
},
|
||
|
name: mapping.name,
|
||
|
source: mapping.source
|
||
|
});
|
||
|
}
|
||
|
|
||
|
} : null
|
||
|
});
|
||
|
map.addIndexedMappings(mappings);
|
||
|
return {
|
||
|
content: generated,
|
||
|
map
|
||
|
};
|
||
|
}
|
||
|
|
||
|
async function generate({
|
||
|
asset,
|
||
|
ast,
|
||
|
options
|
||
|
}) {
|
||
|
let sourceFileName = (0, _utils().relativeUrl)(options.projectRoot, asset.filePath);
|
||
|
let {
|
||
|
content,
|
||
|
map
|
||
|
} = generateAST({
|
||
|
ast: ast.program,
|
||
|
sourceFileName,
|
||
|
sourceMaps: !!asset.env.sourceMap,
|
||
|
options
|
||
|
});
|
||
|
let originalSourceMap = await asset.getMap();
|
||
|
|
||
|
if (originalSourceMap) {
|
||
|
// The babel AST already contains the correct mappings, but not the source contents.
|
||
|
// We need to copy over the source contents from the original map.
|
||
|
let sourcesContent = originalSourceMap.getSourcesContentMap();
|
||
|
|
||
|
for (let filePath in sourcesContent) {
|
||
|
let content = sourcesContent[filePath];
|
||
|
|
||
|
if (content != null) {
|
||
|
map.setSourceContent(filePath, content);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
content,
|
||
|
map
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function convertBabelLoc(options, loc) {
|
||
|
if (!loc) return null;
|
||
|
let {
|
||
|
filename,
|
||
|
start,
|
||
|
end
|
||
|
} = loc;
|
||
|
if (filename == null) return null;
|
||
|
return {
|
||
|
filePath: _path().default.resolve(options.projectRoot, filename),
|
||
|
start: {
|
||
|
line: start.line,
|
||
|
column: start.column + 1
|
||
|
},
|
||
|
// - Babel's columns are exclusive, ours are inclusive (column - 1)
|
||
|
// - Babel has 0-based columns, ours are 1-based (column + 1)
|
||
|
// = +-0
|
||
|
end: {
|
||
|
line: end.line,
|
||
|
column: end.column
|
||
|
}
|
||
|
};
|
||
|
}
|