diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-10-30 16:45:38 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-10-30 16:45:38 +0800 |
| commit | a0579f91bbdf0de62b59df381d97a008bb98df57 (patch) | |
| tree | 69c21333750c7bc7358f9383560438048d9adebf /node_modules/postcss-loader/dist | |
| parent | 2d8aeba452672bcda2096e5d76bf37131c34075e (diff) | |
update/upgrade
Diffstat (limited to 'node_modules/postcss-loader/dist')
| -rw-r--r-- | node_modules/postcss-loader/dist/cjs.js | 3 | ||||
| -rw-r--r-- | node_modules/postcss-loader/dist/config.d.ts | 16 | ||||
| -rw-r--r-- | node_modules/postcss-loader/dist/index.js | 168 | ||||
| -rw-r--r-- | node_modules/postcss-loader/dist/options.json | 58 | ||||
| -rw-r--r-- | node_modules/postcss-loader/dist/utils.js | 458 |
5 files changed, 703 insertions, 0 deletions
diff --git a/node_modules/postcss-loader/dist/cjs.js b/node_modules/postcss-loader/dist/cjs.js new file mode 100644 index 00000000..1ec2c7ec --- /dev/null +++ b/node_modules/postcss-loader/dist/cjs.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = require("./index").default;
\ No newline at end of file diff --git a/node_modules/postcss-loader/dist/config.d.ts b/node_modules/postcss-loader/dist/config.d.ts new file mode 100644 index 00000000..729c449c --- /dev/null +++ b/node_modules/postcss-loader/dist/config.d.ts @@ -0,0 +1,16 @@ +import type { Config as PostCSSConfig } from "postcss-load-config"; +import type { LoaderContext } from "webpack"; + +type PostCSSLoaderContext = LoaderContext<PostCSSConfig>; + +interface PostCSSLoaderAPI { + mode: PostCSSLoaderContext["mode"]; + file: PostCSSLoaderContext["resourcePath"]; + webpackLoaderContext: PostCSSLoaderContext; + env: PostCSSLoaderContext["mode"]; + options: PostCSSConfig; +} + +export type PostCSSLoaderOptions = + | PostCSSConfig + | ((api: PostCSSLoaderAPI) => PostCSSConfig); diff --git a/node_modules/postcss-loader/dist/index.js b/node_modules/postcss-loader/dist/index.js new file mode 100644 index 00000000..d4c1c91b --- /dev/null +++ b/node_modules/postcss-loader/dist/index.js @@ -0,0 +1,168 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = loader; +var _path = _interopRequireDefault(require("path")); +var _package = _interopRequireDefault(require("postcss/package.json")); +var _options = _interopRequireDefault(require("./options.json")); +var _utils = require("./utils"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +let hasExplicitDependencyOnPostCSS = false; + +/** + * **PostCSS Loader** + * + * Loads && processes CSS with [PostCSS](https://github.com/postcss/postcss) + * + * @method loader + * + * @param {String} content Source + * @param {Object} sourceMap Source Map + * @param {Object} meta Meta + * + * @return {callback} callback Result + */ +async function loader(content, sourceMap, meta) { + const options = this.getOptions(_options.default); + const callback = this.async(); + const configOption = typeof options.postcssOptions === "undefined" || typeof options.postcssOptions.config === "undefined" ? true : options.postcssOptions.config; + let implementation; + try { + implementation = (0, _utils.getPostcssImplementation)(this, options.implementation); + } catch (error) { + callback(error); + return; + } + if (!implementation) { + callback(new Error(`The Postcss implementation "${options.implementation}" not found`)); + return; + } + let loadedConfig; + if (configOption) { + try { + loadedConfig = await (0, _utils.loadConfig)(this, configOption, options.postcssOptions); + } catch (error) { + callback(error); + return; + } + } + const { + plugins, + processOptions + } = await (0, _utils.getPostcssOptions)(this, loadedConfig, options.postcssOptions); + const useSourceMap = typeof options.sourceMap !== "undefined" ? options.sourceMap : this.sourceMap; + if (useSourceMap) { + processOptions.map = { + inline: false, + annotation: false, + ...processOptions.map + }; + } + if (sourceMap && processOptions.map) { + processOptions.map.prev = (0, _utils.normalizeSourceMap)(sourceMap, this.context); + } + let root; + + // Reuse PostCSS AST from other loaders + if (meta && meta.ast && meta.ast.type === "postcss" && + // eslint-disable-next-line global-require + require("semver").satisfies(meta.ast.version, `^${_package.default.version}`)) { + ({ + root + } = meta.ast); + } + if (!root && options.execute) { + // eslint-disable-next-line no-param-reassign + content = (0, _utils.exec)(content, this); + } + let result; + let processor; + try { + processor = implementation(plugins); + result = await processor.process(root || content, processOptions); + } catch (error) { + // Check postcss versions to avoid using PostCSS 7. + // For caching reasons, we use the readFileSync and existsSync functions from the context, + // not the functions from the `fs` module. + if (!hasExplicitDependencyOnPostCSS && processor && processor.version && processor.version.startsWith("7.")) { + // The `findPackageJsonDir` function returns `string` or `null`. + // This is used to do for caching, that is, an explicit comparison with `undefined` + // is used to make the condition body run once. + const packageJSONDir = (0, _utils.findPackageJSONDir)(process.cwd(), this.fs.statSync); + if (packageJSONDir) { + let bufferOfPackageJSON; + try { + bufferOfPackageJSON = this.fs.readFileSync(_path.default.resolve(packageJSONDir, "package.json"), "utf8"); + } catch (_error) { + // Nothing + } + if (bufferOfPackageJSON) { + let pkg; + try { + pkg = JSON.parse(bufferOfPackageJSON); + } catch (_error) { + // Nothing + } + if (pkg) { + if (!pkg.dependencies.postcss && !pkg.devDependencies.postcss) { + this.emitWarning(new Error("Add postcss as project dependency. postcss is not a peer dependency for postcss-loader. " + "Use `npm install postcss` or `yarn add postcss`")); + } else { + hasExplicitDependencyOnPostCSS = true; + } + } + } + } + } + (0, _utils.reportError)(this, callback, error); + return; + } + for (const warning of result.warnings()) { + this.emitWarning((0, _utils.warningFactory)(warning)); + } + for (const message of result.messages) { + // eslint-disable-next-line default-case + switch (message.type) { + case "dependency": + this.addDependency(message.file); + break; + case "build-dependency": + this.addBuildDependency(message.file); + break; + case "missing-dependency": + this.addMissingDependency(message.file); + break; + case "context-dependency": + this.addContextDependency(message.file); + break; + case "dir-dependency": + this.addContextDependency(message.dir); + break; + case "asset": + if (message.content && message.file) { + this.emitFile(message.file, message.content, message.sourceMap, message.info); + } + } + } + + // eslint-disable-next-line no-undefined + let map = result.map ? result.map.toJSON() : undefined; + if (map && useSourceMap) { + map = (0, _utils.normalizeSourceMapAfterPostcss)(map, this.context); + } + let ast; + try { + ast = { + type: "postcss", + version: result.processor.version, + root: result.root + }; + } catch (error) { + (0, _utils.reportError)(this, callback, error); + return; + } + callback(null, result.css, map, { + ast + }); +}
\ No newline at end of file diff --git a/node_modules/postcss-loader/dist/options.json b/node_modules/postcss-loader/dist/options.json new file mode 100644 index 00000000..b85e5654 --- /dev/null +++ b/node_modules/postcss-loader/dist/options.json @@ -0,0 +1,58 @@ +{ + "title": "PostCSS Loader options", + "type": "object", + "properties": { + "postcssOptions": { + "description": "Options to pass through to `Postcss`.", + "link": "https://github.com/webpack-contrib/postcss-loader#postcssOptions", + "anyOf": [ + { + "type": "object", + "additionalProperties": true, + "properties": { + "config": { + "description": "Allows to specify PostCSS config path.", + "link": "https://github.com/webpack-contrib/postcss-loader#config", + "anyOf": [ + { + "description": "Allows to specify the path to the configuration file", + "type": "string" + }, + { + "description": "Enables/Disables autoloading config", + "type": "boolean" + } + ] + } + } + }, + { + "instanceof": "Function" + } + ] + }, + "execute": { + "description": "Enables/Disables PostCSS parser support in 'CSS-in-JS'.", + "link": "https://github.com/webpack-contrib/postcss-loader#execute", + "type": "boolean" + }, + "sourceMap": { + "description": "Enables/Disables generation of source maps.", + "link": "https://github.com/webpack-contrib/postcss-loader#sourcemap", + "type": "boolean" + }, + "implementation": { + "description": "The implementation of postcss to use, instead of the locally installed version", + "link": "https://github.com/webpack-contrib/postcss-loader#implementation", + "anyOf": [ + { + "type": "string" + }, + { + "instanceof": "Function" + } + ] + } + }, + "additionalProperties": false +} diff --git a/node_modules/postcss-loader/dist/utils.js b/node_modules/postcss-loader/dist/utils.js new file mode 100644 index 00000000..13aa1392 --- /dev/null +++ b/node_modules/postcss-loader/dist/utils.js @@ -0,0 +1,458 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.exec = exec; +exports.findPackageJSONDir = findPackageJSONDir; +exports.getPostcssImplementation = getPostcssImplementation; +exports.getPostcssOptions = getPostcssOptions; +exports.loadConfig = loadConfig; +exports.normalizeSourceMap = normalizeSourceMap; +exports.normalizeSourceMapAfterPostcss = normalizeSourceMapAfterPostcss; +exports.reportError = reportError; +exports.warningFactory = warningFactory; +var _path = _interopRequireDefault(require("path")); +var _url = _interopRequireDefault(require("url")); +var _module = _interopRequireDefault(require("module")); +var _cosmiconfig = require("cosmiconfig"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const parentModule = module; +const stat = (inputFileSystem, filePath) => new Promise((resolve, reject) => { + inputFileSystem.stat(filePath, (err, stats) => { + if (err) { + reject(err); + } + resolve(stats); + }); +}); +function exec(code, loaderContext) { + const { + resource, + context + } = loaderContext; + const module = new _module.default(resource, parentModule); + + // eslint-disable-next-line no-underscore-dangle + module.paths = _module.default._nodeModulePaths(context); + module.filename = resource; + + // eslint-disable-next-line no-underscore-dangle + module._compile(code, resource); + return module.exports; +} +let tsLoader; +async function loadConfig(loaderContext, config, postcssOptions) { + const searchPath = typeof config === "string" ? _path.default.resolve(config) : _path.default.dirname(loaderContext.resourcePath); + let stats; + try { + stats = await stat(loaderContext.fs, searchPath); + } catch (errorIgnore) { + throw new Error(`No PostCSS config found in: ${searchPath}`); + } + const moduleName = "postcss"; + const searchPlaces = [ + // Prefer popular format + "package.json", `${moduleName}.config.js`, `${moduleName}.config.mjs`, `${moduleName}.config.cjs`, `${moduleName}.config.ts`, `${moduleName}.config.mts`, `${moduleName}.config.cts`, `.${moduleName}rc`, `.${moduleName}rc.json`, `.${moduleName}rc.js`, `.${moduleName}rc.mjs`, `.${moduleName}rc.cjs`, `.${moduleName}rc.ts`, `.${moduleName}rc.mts`, `.${moduleName}rc.cts`, `.${moduleName}rc.yaml`, `.${moduleName}rc.yml`, `.config/${moduleName}rc`, `.config/${moduleName}rc.json`, `.config/${moduleName}rc.yaml`, `.config/${moduleName}rc.yml`, `.config/${moduleName}rc.js`, `.config/${moduleName}rc.mjs`, `.config/${moduleName}rc.cjs`, `.config/${moduleName}rc.ts`, `.config/${moduleName}rc.mts`, `.config/${moduleName}rc.cts`]; + const loaders = { + ".js": async (...args) => { + let result; + try { + result = _cosmiconfig.defaultLoadersSync[".js"](...args); + } catch (error) { + let importESM; + try { + // eslint-disable-next-line no-new-func + importESM = new Function("id", "return import(id);"); + } catch (e) { + importESM = null; + } + if (error.code === "ERR_REQUIRE_ESM" && _url.default.pathToFileURL && importESM) { + const urlForConfig = _url.default.pathToFileURL(args[0]); + result = await importESM(urlForConfig); + } else { + throw error; + } + } + return result; + }, + ".cjs": _cosmiconfig.defaultLoadersSync[".cjs"], + ".mjs": async (...args) => { + let result; + let importESM; + try { + // eslint-disable-next-line no-new-func + importESM = new Function("id", "return import(id);"); + } catch (e) { + importESM = null; + } + if (_url.default.pathToFileURL && importESM) { + const urlForConfig = _url.default.pathToFileURL(args[0]); + result = await importESM(urlForConfig); + } else { + throw new Error("ESM is not supported"); + } + return result; + } + }; + if (!tsLoader) { + const opts = { + interopDefault: true + }; + // eslint-disable-next-line global-require, import/no-extraneous-dependencies + const jiti = require("jiti")(__filename, opts); + tsLoader = filepath => jiti(filepath); + } + loaders[".cts"] = tsLoader; + loaders[".mts"] = tsLoader; + loaders[".ts"] = tsLoader; + const explorer = (0, _cosmiconfig.cosmiconfig)(moduleName, { + searchPlaces, + loaders + }); + let result; + try { + if (stats.isFile()) { + result = await explorer.load(searchPath); + } else { + result = await explorer.search(searchPath); + } + } catch (error) { + throw error; + } + if (!result) { + return {}; + } + loaderContext.addBuildDependency(result.filepath); + loaderContext.addDependency(result.filepath); + if (result.isEmpty) { + return result; + } + if (typeof result.config === "function") { + const api = { + mode: loaderContext.mode, + file: loaderContext.resourcePath, + // For complex use + webpackLoaderContext: loaderContext, + // Partial compatibility with `postcss-cli` + env: loaderContext.mode, + options: postcssOptions || {} + }; + return { + ...result, + config: result.config(api) + }; + } + return result; +} +function loadPlugin(plugin, options, file) { + try { + // eslint-disable-next-line global-require, import/no-dynamic-require + let loadedPlugin = require(plugin); + if (loadedPlugin.default) { + loadedPlugin = loadedPlugin.default; + } + if (!options || Object.keys(options).length === 0) { + return loadedPlugin; + } + return loadedPlugin(options); + } catch (error) { + throw new Error(`Loading PostCSS "${plugin}" plugin failed: ${error.message}\n\n(@${file})`); + } +} +function pluginFactory() { + const listOfPlugins = new Map(); + return plugins => { + if (typeof plugins === "undefined") { + return listOfPlugins; + } + if (Array.isArray(plugins)) { + for (const plugin of plugins) { + if (Array.isArray(plugin)) { + const [name, options] = plugin; + listOfPlugins.set(name, options); + } else if (plugin && typeof plugin === "function") { + listOfPlugins.set(plugin); + } else if (plugin && Object.keys(plugin).length === 1 && (typeof plugin[Object.keys(plugin)[0]] === "object" || typeof plugin[Object.keys(plugin)[0]] === "boolean") && plugin[Object.keys(plugin)[0]] !== null) { + const [name] = Object.keys(plugin); + const options = plugin[name]; + if (options === false) { + listOfPlugins.delete(name); + } else { + listOfPlugins.set(name, options); + } + } else if (plugin) { + listOfPlugins.set(plugin); + } + } + } else { + const objectPlugins = Object.entries(plugins); + for (const [name, options] of objectPlugins) { + if (options === false) { + listOfPlugins.delete(name); + } else { + listOfPlugins.set(name, options); + } + } + } + return listOfPlugins; + }; +} +async function tryRequireThenImport(module) { + let exports; + try { + // eslint-disable-next-line import/no-dynamic-require, global-require + exports = require(module); + return exports; + } catch (requireError) { + let importESM; + try { + // eslint-disable-next-line no-new-func + importESM = new Function("id", "return import(id);"); + } catch (e) { + importESM = null; + } + if (requireError.code === "ERR_REQUIRE_ESM" && importESM) { + exports = await importESM(module); + return exports.default; + } + throw requireError; + } +} +async function getPostcssOptions(loaderContext, loadedConfig = {}, postcssOptions = {}) { + const file = loaderContext.resourcePath; + let normalizedPostcssOptions = postcssOptions; + if (typeof normalizedPostcssOptions === "function") { + normalizedPostcssOptions = normalizedPostcssOptions(loaderContext); + } + let plugins = []; + try { + const factory = pluginFactory(); + if (loadedConfig.config && loadedConfig.config.plugins) { + factory(loadedConfig.config.plugins); + } + factory(normalizedPostcssOptions.plugins); + plugins = [...factory()].map(item => { + const [plugin, options] = item; + if (typeof plugin === "string") { + return loadPlugin(plugin, options, file); + } + return plugin; + }); + } catch (error) { + loaderContext.emitError(error); + } + const processOptionsFromConfig = { + ...loadedConfig.config + } || {}; + if (processOptionsFromConfig.from) { + processOptionsFromConfig.from = _path.default.resolve(_path.default.dirname(loadedConfig.filepath), processOptionsFromConfig.from); + } + if (processOptionsFromConfig.to) { + processOptionsFromConfig.to = _path.default.resolve(_path.default.dirname(loadedConfig.filepath), processOptionsFromConfig.to); + } + const processOptionsFromOptions = { + ...normalizedPostcssOptions + }; + if (processOptionsFromOptions.from) { + processOptionsFromOptions.from = _path.default.resolve(loaderContext.rootContext, processOptionsFromOptions.from); + } + if (processOptionsFromOptions.to) { + processOptionsFromOptions.to = _path.default.resolve(loaderContext.rootContext, processOptionsFromOptions.to); + } + + // No need `plugins` and `config` for processOptions + const { + plugins: __plugins, + ...optionsFromConfig + } = processOptionsFromConfig; + const { + config: _config, + plugins: _plugins, + ...optionsFromOptions + } = processOptionsFromOptions; + const processOptions = { + from: file, + to: file, + map: false, + ...optionsFromConfig, + ...optionsFromOptions + }; + if (typeof processOptions.parser === "string") { + try { + processOptions.parser = await tryRequireThenImport(processOptions.parser); + } catch (error) { + loaderContext.emitError(new Error(`Loading PostCSS "${processOptions.parser}" parser failed: ${error.message}\n\n(@${file})`)); + } + } + if (typeof processOptions.stringifier === "string") { + try { + processOptions.stringifier = await tryRequireThenImport(processOptions.stringifier); + } catch (error) { + loaderContext.emitError(new Error(`Loading PostCSS "${processOptions.stringifier}" stringifier failed: ${error.message}\n\n(@${file})`)); + } + } + if (typeof processOptions.syntax === "string") { + try { + processOptions.syntax = await tryRequireThenImport(processOptions.syntax); + } catch (error) { + loaderContext.emitError(new Error(`Loading PostCSS "${processOptions.syntax}" syntax failed: ${error.message}\n\n(@${file})`)); + } + } + if (processOptions.map === true) { + // https://github.com/postcss/postcss/blob/master/docs/source-maps.md + processOptions.map = { + inline: true + }; + } + return { + plugins, + processOptions + }; +} +const IS_NATIVE_WIN32_PATH = /^[a-z]:[/\\]|^\\\\/i; +const ABSOLUTE_SCHEME = /^[a-z0-9+\-.]+:/i; +function getURLType(source) { + if (source[0] === "/") { + if (source[1] === "/") { + return "scheme-relative"; + } + return "path-absolute"; + } + if (IS_NATIVE_WIN32_PATH.test(source)) { + return "path-absolute"; + } + return ABSOLUTE_SCHEME.test(source) ? "absolute" : "path-relative"; +} +function normalizeSourceMap(map, resourceContext) { + let newMap = map; + + // Some loader emit source map as string + // Strip any JSON XSSI avoidance prefix from the string (as documented in the source maps specification), and then parse the string as JSON. + if (typeof newMap === "string") { + newMap = JSON.parse(newMap); + } + delete newMap.file; + const { + sourceRoot + } = newMap; + delete newMap.sourceRoot; + if (newMap.sources) { + newMap.sources = newMap.sources.map(source => { + const sourceType = getURLType(source); + + // Do no touch `scheme-relative` and `absolute` URLs + if (sourceType === "path-relative" || sourceType === "path-absolute") { + const absoluteSource = sourceType === "path-relative" && sourceRoot ? _path.default.resolve(sourceRoot, _path.default.normalize(source)) : _path.default.normalize(source); + return _path.default.relative(resourceContext, absoluteSource); + } + return source; + }); + } + return newMap; +} +function normalizeSourceMapAfterPostcss(map, resourceContext) { + const newMap = map; + + // result.map.file is an optional property that provides the output filename. + // Since we don't know the final filename in the webpack build chain yet, it makes no sense to have it. + // eslint-disable-next-line no-param-reassign + delete newMap.file; + + // eslint-disable-next-line no-param-reassign + newMap.sourceRoot = ""; + + // eslint-disable-next-line no-param-reassign + newMap.sources = newMap.sources.map(source => { + if (source.indexOf("<") === 0) { + return source; + } + const sourceType = getURLType(source); + + // Do no touch `scheme-relative`, `path-absolute` and `absolute` types + if (sourceType === "path-relative") { + return _path.default.resolve(resourceContext, source); + } + return source; + }); + return newMap; +} +function findPackageJSONDir(cwd, statSync) { + let dir = cwd; + for (;;) { + try { + if (statSync(_path.default.join(dir, "package.json")).isFile()) { + break; + } + } catch (error) { + // Nothing + } + const parent = _path.default.dirname(dir); + if (dir === parent) { + dir = null; + break; + } + dir = parent; + } + return dir; +} +function getPostcssImplementation(loaderContext, implementation) { + let resolvedImplementation = implementation; + if (!implementation || typeof implementation === "string") { + const postcssImplPkg = implementation || "postcss"; + + // eslint-disable-next-line import/no-dynamic-require, global-require + resolvedImplementation = require(postcssImplPkg); + } + + // eslint-disable-next-line consistent-return + return resolvedImplementation; +} +function reportError(loaderContext, callback, error) { + if (error.file) { + loaderContext.addDependency(error.file); + } + if (error.name === "CssSyntaxError") { + callback(syntaxErrorFactory(error)); + } else { + callback(error); + } +} +function warningFactory(warning) { + let message = ""; + if (typeof warning.line !== "undefined") { + message += `(${warning.line}:${warning.column}) `; + } + if (typeof warning.plugin !== "undefined") { + message += `from "${warning.plugin}" plugin: `; + } + message += warning.text; + if (warning.node) { + message += `\n\nCode:\n ${warning.node.toString()}\n`; + } + const obj = new Error(message, { + cause: warning + }); + obj.stack = null; + return obj; +} +function syntaxErrorFactory(error) { + let message = "\nSyntaxError\n\n"; + if (typeof error.line !== "undefined") { + message += `(${error.line}:${error.column}) `; + } + if (typeof error.plugin !== "undefined") { + message += `from "${error.plugin}" plugin: `; + } + message += error.file ? `${error.file} ` : "<css input> "; + message += `${error.reason}`; + const code = error.showSourceCode(); + if (code) { + message += `\n\n${code}\n`; + } + const obj = new Error(message, { + cause: error + }); + obj.stack = null; + return obj; +}
\ No newline at end of file |
