mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-11-21 14:13:36 +08:00
docs:更新文档
This commit is contained in:
118
node_modules/postcss-modules-values/src/index.js
generated
vendored
Normal file
118
node_modules/postcss-modules-values/src/index.js
generated
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
'use strict';
|
||||
|
||||
const postcss = require('postcss');
|
||||
const ICSSUtils = require('icss-utils');
|
||||
|
||||
const matchImports = /^(.+?|\([\s\S]+?\))\s+from\s+("[^"]*"|'[^']*'|[\w-]+)$/;
|
||||
const matchValueDefinition = /(?:\s+|^)([\w-]+):?\s+(.+?)\s*$/g;
|
||||
const matchImport = /^([\w-]+)(?:\s+as\s+([\w-]+))?/;
|
||||
|
||||
let options = {};
|
||||
let importIndex = 0;
|
||||
let createImportedName =
|
||||
(options && options.createImportedName) ||
|
||||
((importName /*, path*/) =>
|
||||
`i__const_${importName.replace(/\W/g, '_')}_${importIndex++}`);
|
||||
|
||||
module.exports = postcss.plugin(
|
||||
'postcss-modules-values',
|
||||
() => (css, result) => {
|
||||
const importAliases = [];
|
||||
const definitions = {};
|
||||
|
||||
const addDefinition = atRule => {
|
||||
let matches;
|
||||
while ((matches = matchValueDefinition.exec(atRule.params))) {
|
||||
let [, /*match*/ key, value] = matches;
|
||||
// Add to the definitions, knowing that values can refer to each other
|
||||
definitions[key] = ICSSUtils.replaceValueSymbols(value, definitions);
|
||||
atRule.remove();
|
||||
}
|
||||
};
|
||||
|
||||
const addImport = atRule => {
|
||||
const matches = matchImports.exec(atRule.params);
|
||||
if (matches) {
|
||||
let [, /*match*/ aliases, path] = matches;
|
||||
// We can use constants for path names
|
||||
if (definitions[path]) {
|
||||
path = definitions[path];
|
||||
}
|
||||
const imports = aliases
|
||||
.replace(/^\(\s*([\s\S]+)\s*\)$/, '$1')
|
||||
.split(/\s*,\s*/)
|
||||
.map(alias => {
|
||||
const tokens = matchImport.exec(alias);
|
||||
if (tokens) {
|
||||
const [, /*match*/ theirName, myName = theirName] = tokens;
|
||||
const importedName = createImportedName(myName);
|
||||
definitions[myName] = importedName;
|
||||
return { theirName, importedName };
|
||||
} else {
|
||||
throw new Error(`@import statement "${alias}" is invalid!`);
|
||||
}
|
||||
});
|
||||
importAliases.push({ path, imports });
|
||||
atRule.remove();
|
||||
}
|
||||
};
|
||||
|
||||
/* Look at all the @value statements and treat them as locals or as imports */
|
||||
css.walkAtRules('value', atRule => {
|
||||
if (matchImports.exec(atRule.params)) {
|
||||
addImport(atRule);
|
||||
} else {
|
||||
if (atRule.params.indexOf('@value') !== -1) {
|
||||
result.warn('Invalid value definition: ' + atRule.params);
|
||||
}
|
||||
|
||||
addDefinition(atRule);
|
||||
}
|
||||
});
|
||||
|
||||
/* We want to export anything defined by now, but don't add it to the CSS yet or
|
||||
it well get picked up by the replacement stuff */
|
||||
const exportDeclarations = Object.keys(definitions).map(key =>
|
||||
postcss.decl({
|
||||
value: definitions[key],
|
||||
prop: key,
|
||||
raws: { before: '\n ' }
|
||||
})
|
||||
);
|
||||
|
||||
/* If we have no definitions, don't continue */
|
||||
if (!Object.keys(definitions).length) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Perform replacements */
|
||||
ICSSUtils.replaceSymbols(css, definitions);
|
||||
|
||||
/* Add export rules if any */
|
||||
if (exportDeclarations.length > 0) {
|
||||
const exportRule = postcss.rule({
|
||||
selector: ':export',
|
||||
raws: { after: '\n' }
|
||||
});
|
||||
exportRule.append(exportDeclarations);
|
||||
css.prepend(exportRule);
|
||||
}
|
||||
|
||||
/* Add import rules */
|
||||
importAliases.reverse().forEach(({ path, imports }) => {
|
||||
const importRule = postcss.rule({
|
||||
selector: `:import(${path})`,
|
||||
raws: { after: '\n' }
|
||||
});
|
||||
imports.forEach(({ theirName, importedName }) => {
|
||||
importRule.append({
|
||||
value: theirName,
|
||||
prop: importedName,
|
||||
raws: { before: '\n ' }
|
||||
});
|
||||
});
|
||||
|
||||
css.prepend(importRule);
|
||||
});
|
||||
}
|
||||
);
|
||||
Reference in New Issue
Block a user