next
Version:
The React Framework
169 lines (168 loc) • 6.44 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = loader;
var _loaderUtils = require("next/dist/compiled/loader-utils");
var _postcss = _interopRequireDefault(require("postcss"));
var _cssSyntaxError = _interopRequireDefault(require("./CssSyntaxError"));
var _warning = _interopRequireDefault(require("../../postcss-loader/src/Warning"));
var _plugins = require("./plugins");
var _utils = require("./utils");
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
async function loader(content, map, meta) {
const rawOptions = (0, _loaderUtils).getOptions(this);
const plugins = [];
const callback = this.async();
const loaderSpan = this.currentTraceSpan.traceChild('css-loader');
loaderSpan.traceAsyncFn(async ()=>{
let options;
try {
options = (0, _utils).normalizeOptions(rawOptions, this);
} catch (error) {
throw error;
}
const replacements = [];
const exports = [];
if ((0, _utils).shouldUseModulesPlugins(options)) {
plugins.push(...(0, _utils).getModulesPlugins(options, this));
}
const importPluginImports = [];
const importPluginApi = [];
if ((0, _utils).shouldUseImportPlugin(options)) {
const resolver = this.getResolve({
conditionNames: [
'style'
],
extensions: [
'.css'
],
mainFields: [
'css',
'style',
'main',
'...'
],
mainFiles: [
'index',
'...'
],
restrictions: [
/\.css$/i
]
});
plugins.push((0, _plugins).importParser({
imports: importPluginImports,
api: importPluginApi,
context: this.context,
rootContext: this.rootContext,
filter: (0, _utils).getFilter(options.import, this.resourcePath),
resolver,
urlHandler: (url)=>(0, _loaderUtils).stringifyRequest(this, (0, _utils).getPreRequester(this)(options.importLoaders) + url)
}));
}
const urlPluginImports = [];
if ((0, _utils).shouldUseURLPlugin(options)) {
const urlResolver = this.getResolve({
conditionNames: [
'asset'
],
mainFields: [
'asset'
],
mainFiles: [],
extensions: []
});
plugins.push((0, _plugins).urlParser({
imports: urlPluginImports,
replacements,
context: this.context,
rootContext: this.rootContext,
filter: (0, _utils).getFilter(options.url, this.resourcePath),
resolver: urlResolver,
urlHandler: (url)=>(0, _loaderUtils).stringifyRequest(this, url)
}));
}
const icssPluginImports = [];
const icssPluginApi = [];
if ((0, _utils).shouldUseIcssPlugin(options)) {
const icssResolver = this.getResolve({
conditionNames: [
'style'
],
extensions: [],
mainFields: [
'css',
'style',
'main',
'...'
],
mainFiles: [
'index',
'...'
]
});
plugins.push((0, _plugins).icssParser({
imports: icssPluginImports,
api: icssPluginApi,
replacements,
exports,
context: this.context,
rootContext: this.rootContext,
resolver: icssResolver,
urlHandler: (url)=>(0, _loaderUtils).stringifyRequest(this, (0, _utils).getPreRequester(this)(options.importLoaders) + url)
}));
}
// Reuse CSS AST (PostCSS AST e.g 'postcss-loader') to avoid reparsing
if (meta) {
const { ast } = meta;
if (ast && ast.type === 'postcss') {
// eslint-disable-next-line no-param-reassign
content = ast.root;
loaderSpan.setAttribute('astUsed', 'true');
}
}
const { resourcePath } = this;
let result;
try {
result = await (0, _postcss).default(plugins).process(content, {
from: resourcePath,
to: resourcePath,
map: options.sourceMap ? {
prev: map ? (0, _utils).normalizeSourceMap(map, resourcePath) : null,
inline: false,
annotation: false
} : false
});
} catch (error1) {
if (error1.file) {
this.addDependency(error1.file);
}
throw error1.name === 'CssSyntaxError' ? new _cssSyntaxError.default(error1) : error1;
}
for (const warning of result.warnings()){
this.emitWarning(new _warning.default(warning));
}
const imports = [].concat(icssPluginImports.sort(_utils.sort)).concat(importPluginImports.sort(_utils.sort)).concat(urlPluginImports.sort(_utils.sort));
const api = [].concat(importPluginApi.sort(_utils.sort)).concat(icssPluginApi.sort(_utils.sort));
if (options.modules.exportOnlyLocals !== true) {
imports.unshift({
importName: '___CSS_LOADER_API_IMPORT___',
url: (0, _loaderUtils).stringifyRequest(this, require.resolve('./runtime/api'))
});
}
const importCode = (0, _utils).getImportCode(imports, options);
const moduleCode = (0, _utils).getModuleCode(result, api, replacements, options, this);
const exportCode = (0, _utils).getExportCode(exports, replacements, options);
return `${importCode}${moduleCode}${exportCode}`;
}).then((code)=>{
callback(null, code);
}, (err)=>{
callback(err);
});
}
//# sourceMappingURL=index.js.map