1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = loader;
|
7 |
|
8 | var _loaderUtils = require("loader-utils");
|
9 |
|
10 | var _postcss = _interopRequireDefault(require("postcss"));
|
11 |
|
12 | var _package = _interopRequireDefault(require("postcss/package.json"));
|
13 |
|
14 | var _schemaUtils = require("schema-utils");
|
15 |
|
16 | var _semver = require("semver");
|
17 |
|
18 | var _CssSyntaxError = _interopRequireDefault(require("./CssSyntaxError"));
|
19 |
|
20 | var _Warning = _interopRequireDefault(require("./Warning"));
|
21 |
|
22 | var _options = _interopRequireDefault(require("./options.json"));
|
23 |
|
24 | var _plugins = require("./plugins");
|
25 |
|
26 | var _utils = require("./utils");
|
27 |
|
28 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | async function loader(content, map, meta) {
|
35 | const rawOptions = (0, _loaderUtils.getOptions)(this);
|
36 | (0, _schemaUtils.validate)(_options.default, rawOptions, {
|
37 | name: "CSS Loader",
|
38 | baseDataPath: "options"
|
39 | });
|
40 | const plugins = [];
|
41 | const callback = this.async();
|
42 | let options;
|
43 |
|
44 | try {
|
45 | options = (0, _utils.normalizeOptions)(rawOptions, this);
|
46 | } catch (error) {
|
47 | callback(error);
|
48 | return;
|
49 | }
|
50 |
|
51 | const replacements = [];
|
52 | const exports = [];
|
53 |
|
54 | if ((0, _utils.shouldUseModulesPlugins)(options)) {
|
55 | plugins.push(...(0, _utils.getModulesPlugins)(options, this));
|
56 | }
|
57 |
|
58 | const importPluginImports = [];
|
59 | const importPluginApi = [];
|
60 |
|
61 | if ((0, _utils.shouldUseImportPlugin)(options)) {
|
62 | const resolver = this.getResolve({
|
63 | conditionNames: ["style"],
|
64 | extensions: [".css"],
|
65 | mainFields: ["css", "style", "main", "..."],
|
66 | mainFiles: ["index", "..."],
|
67 | restrictions: [/\.css$/i]
|
68 | });
|
69 | plugins.push((0, _plugins.importParser)({
|
70 | imports: importPluginImports,
|
71 | api: importPluginApi,
|
72 | context: this.context,
|
73 | rootContext: this.rootContext,
|
74 | filter: (0, _utils.getFilter)(options.import, this.resourcePath),
|
75 | resolver,
|
76 | urlHandler: url => (0, _loaderUtils.stringifyRequest)(this, (0, _utils.getPreRequester)(this)(options.importLoaders) + url)
|
77 | }));
|
78 | }
|
79 |
|
80 | const urlPluginImports = [];
|
81 |
|
82 | if ((0, _utils.shouldUseURLPlugin)(options)) {
|
83 | const urlResolver = this.getResolve({
|
84 | conditionNames: ["asset"],
|
85 | mainFields: ["asset"],
|
86 | mainFiles: [],
|
87 | extensions: []
|
88 | });
|
89 | plugins.push((0, _plugins.urlParser)({
|
90 | imports: urlPluginImports,
|
91 | replacements,
|
92 | context: this.context,
|
93 | rootContext: this.rootContext,
|
94 | filter: (0, _utils.getFilter)(options.url, this.resourcePath),
|
95 | resolver: urlResolver,
|
96 | urlHandler: url => (0, _loaderUtils.stringifyRequest)(this, url)
|
97 | }));
|
98 | }
|
99 |
|
100 | const icssPluginImports = [];
|
101 | const icssPluginApi = [];
|
102 |
|
103 | if ((0, _utils.shouldUseIcssPlugin)(options)) {
|
104 | const icssResolver = this.getResolve({
|
105 | conditionNames: ["style"],
|
106 | extensions: [],
|
107 | mainFields: ["css", "style", "main", "..."],
|
108 | mainFiles: ["index", "..."]
|
109 | });
|
110 | plugins.push((0, _plugins.icssParser)({
|
111 | imports: icssPluginImports,
|
112 | api: icssPluginApi,
|
113 | replacements,
|
114 | exports,
|
115 | context: this.context,
|
116 | rootContext: this.rootContext,
|
117 | resolver: icssResolver,
|
118 | urlHandler: url => (0, _loaderUtils.stringifyRequest)(this, (0, _utils.getPreRequester)(this)(options.importLoaders) + url)
|
119 | }));
|
120 | }
|
121 |
|
122 |
|
123 | if (meta) {
|
124 | const {
|
125 | ast
|
126 | } = meta;
|
127 |
|
128 | if (ast && ast.type === "postcss" && (0, _semver.satisfies)(ast.version, `^${_package.default.version}`)) {
|
129 |
|
130 | content = ast.root;
|
131 | }
|
132 | }
|
133 |
|
134 | const {
|
135 | resourcePath
|
136 | } = this;
|
137 | let result;
|
138 |
|
139 | try {
|
140 | result = await (0, _postcss.default)(plugins).process(content, {
|
141 | hideNothingWarning: true,
|
142 | from: resourcePath,
|
143 | to: resourcePath,
|
144 | map: options.sourceMap ? {
|
145 | prev: map ? (0, _utils.normalizeSourceMap)(map, resourcePath) : null,
|
146 | inline: false,
|
147 | annotation: false
|
148 | } : false
|
149 | });
|
150 | } catch (error) {
|
151 | if (error.file) {
|
152 | this.addDependency(error.file);
|
153 | }
|
154 |
|
155 | callback(error.name === "CssSyntaxError" ? new _CssSyntaxError.default(error) : error);
|
156 | return;
|
157 | }
|
158 |
|
159 | for (const warning of result.warnings()) {
|
160 | this.emitWarning(new _Warning.default(warning));
|
161 | }
|
162 |
|
163 | const imports = [].concat(icssPluginImports.sort(_utils.sort)).concat(importPluginImports.sort(_utils.sort)).concat(urlPluginImports.sort(_utils.sort));
|
164 | const api = [].concat(importPluginApi.sort(_utils.sort)).concat(icssPluginApi.sort(_utils.sort));
|
165 |
|
166 | if (options.modules.exportOnlyLocals !== true) {
|
167 | imports.unshift({
|
168 | importName: "___CSS_LOADER_API_IMPORT___",
|
169 | url: (0, _loaderUtils.stringifyRequest)(this, require.resolve("./runtime/api"))
|
170 | });
|
171 |
|
172 | if (options.sourceMap) {
|
173 | imports.unshift({
|
174 | importName: "___CSS_LOADER_API_SOURCEMAP_IMPORT___",
|
175 | url: (0, _loaderUtils.stringifyRequest)(this, require.resolve("./runtime/cssWithMappingToString"))
|
176 | });
|
177 | }
|
178 | }
|
179 |
|
180 | const importCode = (0, _utils.getImportCode)(imports, options);
|
181 | const moduleCode = (0, _utils.getModuleCode)(result, api, replacements, options, this);
|
182 | const exportCode = (0, _utils.getExportCode)(exports, replacements, options);
|
183 | callback(null, `${importCode}${moduleCode}${exportCode}`);
|
184 | } |
\ | No newline at end of file |