233 lines
7.7 KiB
JavaScript
233 lines
7.7 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
function _sourceMap() {
|
|
const data = _interopRequireDefault(require("@parcel/source-map"));
|
|
_sourceMap = function () {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _plugin() {
|
|
const data = require("@parcel/plugin");
|
|
_plugin = function () {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _lightningcss() {
|
|
const data = _interopRequireWildcard(require("lightningcss"));
|
|
_lightningcss = function () {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _utils() {
|
|
const data = require("@parcel/utils");
|
|
_utils = function () {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _browserslist() {
|
|
const data = _interopRequireDefault(require("browserslist"));
|
|
_browserslist = 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 _diagnostic() {
|
|
const data = require("@parcel/diagnostic");
|
|
_diagnostic = function () {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
// $FlowFixMe - init for browser build.
|
|
var _default = exports.default = new (_plugin().Optimizer)({
|
|
async loadConfig({
|
|
config,
|
|
logger,
|
|
options
|
|
}) {
|
|
const configFile = await config.getConfig(['.cssnanorc', 'cssnano.config.json', 'cssnano.config.js', 'cssnano.config.cjs'], {
|
|
packageKey: 'cssnano'
|
|
});
|
|
if (configFile) {
|
|
let filename = _path().default.basename(configFile.filePath);
|
|
let codeHighlights;
|
|
let message;
|
|
if (filename === 'package.json') {
|
|
message = (0, _diagnostic().md)`
|
|
Parcel\'s default CSS minifer changed from cssnano to lightningcss, but a "cssnano" key was found in **package.json**. Either remove this configuration, or configure Parcel to use @parcel/optimizer-cssnano instead.
|
|
`;
|
|
let contents = await options.inputFS.readFile(configFile.filePath, 'utf8');
|
|
codeHighlights = (0, _diagnostic().generateJSONCodeHighlights)(contents, [{
|
|
key: '/cssnano',
|
|
type: 'key'
|
|
}]);
|
|
} else {
|
|
message = (0, _diagnostic().md)`Parcel\'s default CSS minifer changed from cssnano to lightningcss, but a __${filename}__ config file was found. Either remove this config file, or configure Parcel to use @parcel/optimizer-cssnano instead.`;
|
|
codeHighlights = [{
|
|
start: {
|
|
line: 1,
|
|
column: 1
|
|
},
|
|
end: {
|
|
line: 1,
|
|
column: 1
|
|
}
|
|
}];
|
|
}
|
|
logger.warn({
|
|
message,
|
|
documentationURL: 'https://parceljs.org/languages/css/#minification',
|
|
codeFrames: [{
|
|
filePath: configFile.filePath,
|
|
codeHighlights
|
|
}]
|
|
});
|
|
}
|
|
},
|
|
async optimize({
|
|
bundle,
|
|
bundleGraph,
|
|
logger,
|
|
contents: prevContents,
|
|
getSourceMapReference,
|
|
map: prevMap,
|
|
options
|
|
}) {
|
|
if (!bundle.env.shouldOptimize) {
|
|
return {
|
|
contents: prevContents,
|
|
map: prevMap
|
|
};
|
|
}
|
|
let targets = getTargets(bundle.env.engines.browsers);
|
|
let code = await (0, _utils().blobToBuffer)(prevContents);
|
|
let unusedSymbols;
|
|
if (bundle.env.shouldScopeHoist) {
|
|
unusedSymbols = [];
|
|
bundle.traverseAssets(asset => {
|
|
if (asset.symbols.isCleared || asset.meta.cssModulesCompiled === 'postcss') {
|
|
return;
|
|
}
|
|
let usedSymbols = bundleGraph.getUsedSymbols(asset);
|
|
if (usedSymbols == null) {
|
|
return;
|
|
}
|
|
let defaultImport = null;
|
|
if (usedSymbols.has('default')) {
|
|
let incoming = bundleGraph.getIncomingDependencies(asset);
|
|
defaultImport = incoming.find(d => d.symbols.hasExportSymbol('default'));
|
|
if (defaultImport) {
|
|
var _defaultImport$symbol, _loc$filePath;
|
|
let loc = (_defaultImport$symbol = defaultImport.symbols.get('default')) === null || _defaultImport$symbol === void 0 ? void 0 : _defaultImport$symbol.loc;
|
|
logger.warn({
|
|
message: 'CSS modules cannot be tree shaken when imported with a default specifier',
|
|
...(loc && {
|
|
codeFrames: [{
|
|
filePath: (0, _nullthrows().default)((_loc$filePath = loc === null || loc === void 0 ? void 0 : loc.filePath) !== null && _loc$filePath !== void 0 ? _loc$filePath : defaultImport.sourcePath),
|
|
codeHighlights: [(0, _diagnostic().convertSourceLocationToHighlight)(loc)]
|
|
}]
|
|
}),
|
|
hints: [`Instead do: import * as style from "${defaultImport.specifier}";`],
|
|
documentationURL: 'https://parceljs.org/languages/css/#tree-shaking'
|
|
});
|
|
}
|
|
}
|
|
if (!defaultImport && !usedSymbols.has('*')) {
|
|
for (let [symbol, {
|
|
local
|
|
}] of asset.symbols) {
|
|
if (local !== 'default' && !usedSymbols.has(symbol)) {
|
|
unusedSymbols.push(local);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Inline style attributes in HTML need to be parsed differently from full CSS files.
|
|
if (bundle.bundleBehavior === 'inline') {
|
|
let entry = bundle.getMainEntry();
|
|
if ((entry === null || entry === void 0 ? void 0 : entry.meta.type) === 'attr') {
|
|
let result = (0, _lightningcss().transformStyleAttribute)({
|
|
code,
|
|
minify: true,
|
|
targets
|
|
});
|
|
return {
|
|
contents: Buffer.from(result.code)
|
|
};
|
|
}
|
|
}
|
|
|
|
// $FlowFixMe
|
|
if (process.browser) {
|
|
await (0, _lightningcss().default)();
|
|
}
|
|
let result = (0, _lightningcss().transform)({
|
|
filename: bundle.name,
|
|
code,
|
|
minify: true,
|
|
sourceMap: !!bundle.env.sourceMap,
|
|
targets,
|
|
unusedSymbols
|
|
});
|
|
let map;
|
|
if (result.map != null) {
|
|
let vlqMap = JSON.parse(Buffer.from(result.map).toString());
|
|
map = new (_sourceMap().default)(options.projectRoot);
|
|
map.addVLQMap(vlqMap);
|
|
if (prevMap) {
|
|
map.extends(prevMap);
|
|
}
|
|
}
|
|
let contents = Buffer.from(result.code);
|
|
if (bundle.env.sourceMap) {
|
|
let reference = await getSourceMapReference(map);
|
|
if (reference != null) {
|
|
contents = contents.toString() + '\n' + '/*# sourceMappingURL=' + reference + ' */\n';
|
|
}
|
|
}
|
|
return {
|
|
contents: Buffer.from(contents),
|
|
map
|
|
};
|
|
}
|
|
});
|
|
let cache = new Map();
|
|
function getTargets(browsers) {
|
|
if (browsers == null) {
|
|
return undefined;
|
|
}
|
|
let cached = cache.get(browsers);
|
|
if (cached != null) {
|
|
return cached;
|
|
}
|
|
let targets = (0, _lightningcss().browserslistToTargets)((0, _browserslist().default)(browsers));
|
|
cache.set(browsers, targets);
|
|
return targets;
|
|
} |