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.

335 lines
8.2 KiB

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _hash() {
const data = require("@parcel/hash");
_hash = function () {
return data;
};
return data;
}
function _utils() {
const data = require("@parcel/utils");
_utils = function () {
return data;
};
return data;
}
function _plugin() {
const data = require("@parcel/plugin");
_plugin = function () {
return data;
};
return data;
}
function _nullthrows() {
const data = _interopRequireDefault(require("nullthrows"));
_nullthrows = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _semver() {
const data = _interopRequireDefault(require("semver"));
_semver = function () {
return data;
};
return data;
}
function _postcssValueParser() {
const data = _interopRequireDefault(require("postcss-value-parser"));
_postcssValueParser = function () {
return data;
};
return data;
}
var _loadConfig = require("./loadConfig");
var _constants = require("./constants");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const COMPOSES_RE = /composes:.+from\s*("|').*("|')\s*;?/;
const FROM_IMPORT_RE = /.+from\s*(?:"|')(.*)(?:"|')\s*;?/;
const LEGACY_MODULE_RE = /@value|(:global|:local)(?!\s*\()/i;
const MODULE_BY_NAME_RE = /\.module\./;
var _default = new (_plugin().Transformer)({
loadConfig({
config,
options,
logger
}) {
return (0, _loadConfig.load)({
config,
options,
logger
});
},
canReuseAST({
ast
}) {
return ast.type === 'postcss' && _semver().default.satisfies(ast.version, _constants.POSTCSS_RANGE);
},
async parse({
asset,
config,
options
}) {
let isLegacy = await isLegacyCssModule(asset);
if (!config && !isLegacy) {
return;
}
const postcss = await loadPostcss(options, asset.filePath);
return {
type: 'postcss',
version: '8.2.1',
program: postcss.parse(await asset.getCode(), {
from: asset.filePath
}).toJSON()
};
},
async transform({
asset,
config,
options,
resolve
}) {
asset.type = 'css';
let isLegacy = await isLegacyCssModule(asset);
if (isLegacy && !config) {
config = {
hydrated: {
plugins: [],
from: asset.filePath,
to: asset.filePath,
modules: {}
}
}; // TODO: warning?
}
if (!config) {
return [asset];
}
const postcss = await loadPostcss(options, asset.filePath);
let ast = (0, _nullthrows().default)(await asset.getAST());
let program = postcss.fromJSON(ast.program);
let plugins = [...config.hydrated.plugins];
let cssModules = null;
if (config.hydrated.modules) {
asset.meta.cssModulesCompiled = true; // TODO: should this be resolved from the project root?
let postcssModules = await options.packageManager.require('postcss-modules', asset.filePath, {
range: '^4.3.0',
saveDev: true,
shouldAutoInstall: options.shouldAutoInstall
});
plugins.push(postcssModules({
getJSON: (filename, json) => cssModules = json,
Loader: await createLoader(asset, resolve, options),
generateScopedName: (name, filename) => `${name}_${(0, _hash().hashString)(_path().default.relative(options.projectRoot, filename)).substr(0, 6)}`,
...config.hydrated.modules
}));
let code = asset.isASTDirty() ? null : await asset.getCode();
if (code == null || COMPOSES_RE.test(code)) {
program.walkDecls(decl => {
let [, importPath] = FROM_IMPORT_RE.exec(decl.value) || [];
if (decl.prop === 'composes' && importPath != null) {
let parsed = (0, _postcssValueParser().default)(decl.value);
parsed.walk(node => {
if (node.type === 'string') {
asset.addDependency({
specifier: importPath,
specifierType: 'url',
loc: {
filePath: asset.filePath,
start: decl.source.start,
end: {
line: decl.source.start.line,
column: decl.source.start.column + importPath.length
}
}
});
}
});
}
});
}
} // $FlowFixMe Added in Flow 0.121.0 upgrade in #4381
let {
messages,
root
} = await postcss(plugins).process(program, config.hydrated);
asset.setAST({
type: 'postcss',
version: '8.2.1',
program: root.toJSON()
});
for (let msg of messages) {
if (msg.type === 'dependency') {
asset.invalidateOnFileChange(msg.file);
} else if (msg.type === 'dir-dependency') {
var _msg$glob;
let pattern = `${msg.dir}/${(_msg$glob = msg.glob) !== null && _msg$glob !== void 0 ? _msg$glob : '**/*'}`;
let files = await (0, _utils().glob)(pattern, asset.fs, {
onlyFiles: true
});
for (let file of files) {
asset.invalidateOnFileChange(_path().default.normalize(file));
}
asset.invalidateOnFileCreate({
glob: pattern
});
}
}
let assets = [asset];
if (cssModules) {
// $FlowFixMe
let cssModulesList = Object.entries(cssModules);
let deps = asset.getDependencies().filter(dep => dep.priority === 'sync');
let code;
if (deps.length > 0) {
code = `
module.exports = Object.assign({}, ${deps.map(dep => `require(${JSON.stringify(dep.specifier)})`).join(', ')}, ${JSON.stringify(cssModules, null, 2)});
`;
} else {
code = cssModulesList.map( // This syntax enables shaking the invidual statements, so that unused classes don't even exist in JS.
([className, classNameHashed]) => `module.exports[${JSON.stringify(className)}] = ${JSON.stringify(classNameHashed)};`).join('\n');
}
asset.symbols.ensure();
for (let [k, v] of cssModulesList) {
asset.symbols.set(k, v);
}
asset.symbols.set('default', 'default');
assets.push({
type: 'js',
content: code
});
}
return assets;
},
async generate({
asset,
ast,
options
}) {
const postcss = await loadPostcss(options, asset.filePath);
let code = '';
postcss.stringify(postcss.fromJSON(ast.program), c => {
code += c;
});
return {
content: code
};
}
});
exports.default = _default;
async function createLoader(asset, resolve, options) {
let {
default: FileSystemLoader
} = await options.packageManager.require('postcss-modules/build/css-loader-core/loader', asset.filePath);
return class extends FileSystemLoader {
async fetch(composesPath, relativeTo) {
let importPath = composesPath.replace(/^["']|["']$/g, '');
let resolved = await resolve(relativeTo, importPath);
let rootRelativePath = _path().default.resolve(_path().default.dirname(relativeTo), resolved);
let root = _path().default.resolve('/'); // fixes an issue on windows which is part of the css-modules-loader-core
// see https://github.com/css-modules/css-modules-loader-core/issues/230
if (rootRelativePath.startsWith(root)) {
rootRelativePath = rootRelativePath.substr(root.length);
}
let source = await asset.fs.readFile(resolved, 'utf-8');
let {
exportTokens
} = await this.core.load(source, rootRelativePath, undefined, // $FlowFixMe[method-unbinding]
this.fetch.bind(this));
return exportTokens;
}
get finalSource() {
return '';
}
};
}
function loadPostcss(options, from) {
return options.packageManager.require('postcss', from, {
range: _constants.POSTCSS_RANGE,
saveDev: true,
shouldAutoInstall: options.shouldAutoInstall
});
}
async function isLegacyCssModule(asset) {
if (!MODULE_BY_NAME_RE.test(asset.filePath)) {
return false;
}
let code = await asset.getCode();
return LEGACY_MODULE_RE.test(code);
}