css-loader 0.25.0 → 0.26.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/processCss.js CHANGED
@@ -1,251 +1,252 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- var formatCodeFrame = require("babel-code-frame");
6
- var Tokenizer = require("css-selector-tokenizer");
7
- var postcss = require("postcss");
8
- var loaderUtils = require("loader-utils");
9
- var assign = require("object-assign");
10
- var getLocalIdent = require("./getLocalIdent");
11
-
12
- var localByDefault = require("postcss-modules-local-by-default");
13
- var extractImports = require("postcss-modules-extract-imports");
14
- var modulesScope = require("postcss-modules-scope");
15
- var modulesValues = require("postcss-modules-values");
16
- var cssnano = require("cssnano");
17
-
18
- var parserPlugin = postcss.plugin("css-loader-parser", function(options) {
19
- return function(css) {
20
- var imports = {};
21
- var exports = {};
22
- var importItems = [];
23
- var urlItems = [];
24
-
25
- function replaceImportsInString(str) {
26
- if(options.import) {
27
- var tokens = str.split(/(\S+)/);
28
- tokens = tokens.map(function (token) {
29
- var importIndex = imports["$" + token];
30
- if(typeof importIndex === "number") {
31
- return "___CSS_LOADER_IMPORT___" + importIndex + "___";
32
- }
33
- return token;
34
- });
35
- return tokens.join("");
36
- }
37
- return str;
38
- }
39
-
40
- if(options.import) {
41
- css.walkAtRules("import", function(rule) {
42
- var values = Tokenizer.parseValues(rule.params);
43
- var url = values.nodes[0].nodes[0];
44
- if(url.type === "url") {
45
- url = url.url;
46
- } else if(url.type === "string") {
47
- url = url.value;
48
- } else throw rule.error("Unexpected format" + rule.params);
49
- values.nodes[0].nodes.shift();
50
- var mediaQuery = Tokenizer.stringifyValues(values);
51
- if(loaderUtils.isUrlRequest(url, options.root) && options.mode === "global") {
52
- url = loaderUtils.urlToRequest(url, options.root);
53
- }
54
- importItems.push({
55
- url: url,
56
- mediaQuery: mediaQuery
57
- });
58
- rule.remove();
59
- });
60
- }
61
-
62
- css.walkRules(function(rule) {
63
- if(rule.selector === ":export") {
64
- rule.walkDecls(function(decl) {
65
- exports[decl.prop] = decl.value;
66
- });
67
- rule.remove();
68
- } else if(/^:import\(.+\)$/.test(rule.selector)) {
69
- var match = /^:import\((.+)\)$/.exec(rule.selector);
70
- var url = loaderUtils.parseString(match[1]);
71
- rule.walkDecls(function(decl) {
72
- imports["$" + decl.prop] = importItems.length;
73
- importItems.push({
74
- url: url,
75
- export: decl.value
76
- });
77
- });
78
- rule.remove();
79
- }
80
- });
81
-
82
- Object.keys(exports).forEach(function(exportName) {
83
- exports[exportName] = replaceImportsInString(exports[exportName]);
84
- });
85
-
86
- function processNode(item) {
87
- switch (item.type) {
88
- case "value":
89
- item.nodes.forEach(processNode);
90
- break;
91
- case "nested-item":
92
- item.nodes.forEach(processNode);
93
- break;
94
- case "item":
95
- var importIndex = imports["$" + item.name];
96
- if (typeof importIndex === "number") {
97
- item.name = "___CSS_LOADER_IMPORT___" + importIndex + "___";
98
- }
99
- break;
100
- case "url":
101
- if (options.url && !/^#/.test(item.url) && loaderUtils.isUrlRequest(item.url, options.root)) {
102
- item.stringType = "";
103
- delete item.innerSpacingBefore;
104
- delete item.innerSpacingAfter;
105
- var url = item.url;
106
- item.url = "___CSS_LOADER_URL___" + urlItems.length + "___";
107
- urlItems.push({
108
- url: url
109
- });
110
- }
111
- break;
112
- }
113
- }
114
-
115
- css.walkDecls(function(decl) {
116
- var values = Tokenizer.parseValues(decl.value);
117
- values.nodes.forEach(function(value) {
118
- value.nodes.forEach(processNode);
119
- });
120
- decl.value = Tokenizer.stringifyValues(values);
121
- });
122
- css.walkAtRules(function(atrule) {
123
- if(typeof atrule.params === "string") {
124
- atrule.params = replaceImportsInString(atrule.params);
125
- }
126
- });
127
-
128
- options.importItems = importItems;
129
- options.urlItems = urlItems;
130
- options.exports = exports;
131
- };
132
- });
133
-
134
- module.exports = function processCss(inputSource, inputMap, options, callback) {
135
-
136
- var query = options.query;
137
- var root = query.root;
138
- var context = query.context;
139
- var localIdentName = query.localIdentName || "[hash:base64]";
140
- var localIdentRegExp = query.localIdentRegExp;
141
- var forceMinimize = query.minimize;
142
- var minimize = typeof forceMinimize !== "undefined" ? !!forceMinimize : options.minimize;
143
-
144
- var parserOptions = {
145
- root: root,
146
- mode: options.mode,
147
- url: query.url !== false,
148
- import: query.import !== false
149
- };
150
-
151
- var pipeline = postcss([
152
- localByDefault({
153
- mode: options.mode,
154
- rewriteUrl: function(global, url) {
155
- if(parserOptions.url){
156
- if(!loaderUtils.isUrlRequest(url, root)) {
157
- return url;
158
- }
159
- if(global) {
160
- return loaderUtils.urlToRequest(url, root);
161
- }
162
- }
163
- return url;
164
- }
165
- }),
166
- extractImports(),
167
- modulesValues,
168
- modulesScope({
169
- generateScopedName: function(exportName) {
170
- return getLocalIdent(options.loaderContext, localIdentName, exportName, {
171
- regExp: localIdentRegExp,
172
- hashPrefix: query.hashPrefix || "",
173
- context: context
174
- });
175
- }
176
- }),
177
- parserPlugin(parserOptions)
178
- ]);
179
-
180
- if(minimize) {
181
- var minimizeOptions = assign({}, query);
182
- ["zindex", "normalizeUrl", "discardUnused", "mergeIdents", "reduceIdents"].forEach(function(name) {
183
- if(typeof minimizeOptions[name] === "undefined")
184
- minimizeOptions[name] = false;
185
- });
186
- pipeline.use(cssnano(minimizeOptions));
187
- }
188
-
189
- pipeline.process(inputSource, {
190
- // we need a prefix to avoid path rewriting of PostCSS
191
- from: "/css-loader!" + options.from,
192
- to: options.to,
193
- map: {
194
- prev: inputMap,
195
- sourcesContent: true,
196
- inline: false,
197
- annotation: false
198
- }
199
- }).then(function(result) {
200
- callback(null, {
201
- source: result.css,
202
- map: result.map && result.map.toJSON(),
203
- exports: parserOptions.exports,
204
- importItems: parserOptions.importItems,
205
- importItemRegExpG: /___CSS_LOADER_IMPORT___([0-9]+)___/g,
206
- importItemRegExp: /___CSS_LOADER_IMPORT___([0-9]+)___/,
207
- urlItems: parserOptions.urlItems,
208
- urlItemRegExpG: /___CSS_LOADER_URL___([0-9]+)___/g,
209
- urlItemRegExp: /___CSS_LOADER_URL___([0-9]+)___/
210
- });
211
- }).catch(function(err) {
212
- if (err.name === 'CssSyntaxError') {
213
- var wrappedError = new CSSLoaderError(
214
- 'Syntax Error',
215
- err.reason,
216
- err.line != null && err.column != null
217
- ? {line: err.line, column: err.column}
218
- : null,
219
- err.input.source
220
- );
221
- callback(wrappedError);
222
- } else {
223
- callback(err);
224
- }
225
- });
226
- };
227
-
228
- function formatMessage(message, loc, source) {
229
- var formatted = message;
230
- if (loc) {
231
- formatted = formatted
232
- + ' (' + loc.line + ':' + loc.column + ')';
233
- }
234
- if (loc && source) {
235
- formatted = formatted
236
- + '\n\n' + formatCodeFrame(source, loc.line, loc.column) + '\n';
237
- }
238
- return formatted;
239
- }
240
-
241
- function CSSLoaderError(name, message, loc, source, error) {
242
- Error.call(this);
243
- Error.captureStackTrace(this, CSSLoaderError);
244
- this.name = name;
245
- this.error = error;
246
- this.message = formatMessage(message, loc, source);
247
- this.hideStack = true;
248
- }
249
-
250
- CSSLoaderError.prototype = Object.create(Error.prototype);
251
- CSSLoaderError.prototype.constructor = CSSLoaderError;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ var formatCodeFrame = require("babel-code-frame");
6
+ var Tokenizer = require("css-selector-tokenizer");
7
+ var postcss = require("postcss");
8
+ var loaderUtils = require("loader-utils");
9
+ var assign = require("object-assign");
10
+ var getLocalIdent = require("./getLocalIdent");
11
+
12
+ var localByDefault = require("postcss-modules-local-by-default");
13
+ var extractImports = require("postcss-modules-extract-imports");
14
+ var modulesScope = require("postcss-modules-scope");
15
+ var modulesValues = require("postcss-modules-values");
16
+ var cssnano = require("cssnano");
17
+
18
+ var parserPlugin = postcss.plugin("css-loader-parser", function(options) {
19
+ return function(css) {
20
+ var imports = {};
21
+ var exports = {};
22
+ var importItems = [];
23
+ var urlItems = [];
24
+
25
+ function replaceImportsInString(str) {
26
+ if(options.import) {
27
+ var tokens = str.split(/(\S+)/);
28
+ tokens = tokens.map(function (token) {
29
+ var importIndex = imports["$" + token];
30
+ if(typeof importIndex === "number") {
31
+ return "___CSS_LOADER_IMPORT___" + importIndex + "___";
32
+ }
33
+ return token;
34
+ });
35
+ return tokens.join("");
36
+ }
37
+ return str;
38
+ }
39
+
40
+ if(options.import) {
41
+ css.walkAtRules("import", function(rule) {
42
+ var values = Tokenizer.parseValues(rule.params);
43
+ var url = values.nodes[0].nodes[0];
44
+ if(url.type === "url") {
45
+ url = url.url;
46
+ } else if(url.type === "string") {
47
+ url = url.value;
48
+ } else throw rule.error("Unexpected format" + rule.params);
49
+ values.nodes[0].nodes.shift();
50
+ var mediaQuery = Tokenizer.stringifyValues(values);
51
+ if(loaderUtils.isUrlRequest(url, options.root) && options.mode === "global") {
52
+ url = loaderUtils.urlToRequest(url, options.root);
53
+ }
54
+ importItems.push({
55
+ url: url,
56
+ mediaQuery: mediaQuery
57
+ });
58
+ rule.remove();
59
+ });
60
+ }
61
+
62
+ css.walkRules(function(rule) {
63
+ if(rule.selector === ":export") {
64
+ rule.walkDecls(function(decl) {
65
+ exports[decl.prop] = decl.value;
66
+ });
67
+ rule.remove();
68
+ } else if(/^:import\(.+\)$/.test(rule.selector)) {
69
+ var match = /^:import\((.+)\)$/.exec(rule.selector);
70
+ var url = loaderUtils.parseString(match[1]);
71
+ rule.walkDecls(function(decl) {
72
+ imports["$" + decl.prop] = importItems.length;
73
+ importItems.push({
74
+ url: url,
75
+ export: decl.value
76
+ });
77
+ });
78
+ rule.remove();
79
+ }
80
+ });
81
+
82
+ Object.keys(exports).forEach(function(exportName) {
83
+ exports[exportName] = replaceImportsInString(exports[exportName]);
84
+ });
85
+
86
+ function processNode(item) {
87
+ switch (item.type) {
88
+ case "value":
89
+ item.nodes.forEach(processNode);
90
+ break;
91
+ case "nested-item":
92
+ item.nodes.forEach(processNode);
93
+ break;
94
+ case "item":
95
+ var importIndex = imports["$" + item.name];
96
+ if (typeof importIndex === "number") {
97
+ item.name = "___CSS_LOADER_IMPORT___" + importIndex + "___";
98
+ }
99
+ break;
100
+ case "url":
101
+ if (options.url && !/^#/.test(item.url) && loaderUtils.isUrlRequest(item.url, options.root)) {
102
+ item.stringType = "";
103
+ delete item.innerSpacingBefore;
104
+ delete item.innerSpacingAfter;
105
+ var url = item.url;
106
+ item.url = "___CSS_LOADER_URL___" + urlItems.length + "___";
107
+ urlItems.push({
108
+ url: url
109
+ });
110
+ }
111
+ break;
112
+ }
113
+ }
114
+
115
+ css.walkDecls(function(decl) {
116
+ var values = Tokenizer.parseValues(decl.value);
117
+ values.nodes.forEach(function(value) {
118
+ value.nodes.forEach(processNode);
119
+ });
120
+ decl.value = Tokenizer.stringifyValues(values);
121
+ });
122
+ css.walkAtRules(function(atrule) {
123
+ if(typeof atrule.params === "string") {
124
+ atrule.params = replaceImportsInString(atrule.params);
125
+ }
126
+ });
127
+
128
+ options.importItems = importItems;
129
+ options.urlItems = urlItems;
130
+ options.exports = exports;
131
+ };
132
+ });
133
+
134
+ module.exports = function processCss(inputSource, inputMap, options, callback) {
135
+ var query = options.query;
136
+ var root = query.root;
137
+ var context = query.context;
138
+ var localIdentName = query.localIdentName || "[hash:base64]";
139
+ var localIdentRegExp = query.localIdentRegExp;
140
+ var forceMinimize = query.minimize;
141
+ var minimize = typeof forceMinimize !== "undefined" ? !!forceMinimize : options.minimize;
142
+
143
+ var customGetLocalIdent = query.getLocalIdent || getLocalIdent;
144
+
145
+ var parserOptions = {
146
+ root: root,
147
+ mode: options.mode,
148
+ url: query.url !== false,
149
+ import: query.import !== false
150
+ };
151
+
152
+ var pipeline = postcss([
153
+ localByDefault({
154
+ mode: options.mode,
155
+ rewriteUrl: function(global, url) {
156
+ if(parserOptions.url){
157
+ if(!loaderUtils.isUrlRequest(url, root)) {
158
+ return url;
159
+ }
160
+ if(global) {
161
+ return loaderUtils.urlToRequest(url, root);
162
+ }
163
+ }
164
+ return url;
165
+ }
166
+ }),
167
+ extractImports(),
168
+ modulesValues,
169
+ modulesScope({
170
+ generateScopedName: function generateScopedName (exportName) {
171
+ return customGetLocalIdent(options.loaderContext, localIdentName, exportName, {
172
+ regExp: localIdentRegExp,
173
+ hashPrefix: query.hashPrefix || "",
174
+ context: context
175
+ });
176
+ }
177
+ }),
178
+ parserPlugin(parserOptions)
179
+ ]);
180
+
181
+ if(minimize) {
182
+ var minimizeOptions = assign({}, query);
183
+ ["zindex", "normalizeUrl", "discardUnused", "mergeIdents", "reduceIdents", "autoprefixer"].forEach(function(name) {
184
+ if(typeof minimizeOptions[name] === "undefined")
185
+ minimizeOptions[name] = false;
186
+ });
187
+ pipeline.use(cssnano(minimizeOptions));
188
+ }
189
+
190
+ pipeline.process(inputSource, {
191
+ // we need a prefix to avoid path rewriting of PostCSS
192
+ from: "/css-loader!" + options.from,
193
+ to: options.to,
194
+ map: {
195
+ prev: inputMap,
196
+ sourcesContent: true,
197
+ inline: false,
198
+ annotation: false
199
+ }
200
+ }).then(function(result) {
201
+ callback(null, {
202
+ source: result.css,
203
+ map: result.map && result.map.toJSON(),
204
+ exports: parserOptions.exports,
205
+ importItems: parserOptions.importItems,
206
+ importItemRegExpG: /___CSS_LOADER_IMPORT___([0-9]+)___/g,
207
+ importItemRegExp: /___CSS_LOADER_IMPORT___([0-9]+)___/,
208
+ urlItems: parserOptions.urlItems,
209
+ urlItemRegExpG: /___CSS_LOADER_URL___([0-9]+)___/g,
210
+ urlItemRegExp: /___CSS_LOADER_URL___([0-9]+)___/
211
+ });
212
+ }).catch(function(err) {
213
+ if (err.name === 'CssSyntaxError') {
214
+ var wrappedError = new CSSLoaderError(
215
+ 'Syntax Error',
216
+ err.reason,
217
+ err.line != null && err.column != null
218
+ ? {line: err.line, column: err.column}
219
+ : null,
220
+ err.input.source
221
+ );
222
+ callback(wrappedError);
223
+ } else {
224
+ callback(err);
225
+ }
226
+ });
227
+ };
228
+
229
+ function formatMessage(message, loc, source) {
230
+ var formatted = message;
231
+ if (loc) {
232
+ formatted = formatted
233
+ + ' (' + loc.line + ':' + loc.column + ')';
234
+ }
235
+ if (loc && source) {
236
+ formatted = formatted
237
+ + '\n\n' + formatCodeFrame(source, loc.line, loc.column) + '\n';
238
+ }
239
+ return formatted;
240
+ }
241
+
242
+ function CSSLoaderError(name, message, loc, source, error) {
243
+ Error.call(this);
244
+ Error.captureStackTrace(this, CSSLoaderError);
245
+ this.name = name;
246
+ this.error = error;
247
+ this.message = formatMessage(message, loc, source);
248
+ this.hideStack = true;
249
+ }
250
+
251
+ CSSLoaderError.prototype = Object.create(Error.prototype);
252
+ CSSLoaderError.prototype.constructor = CSSLoaderError;
package/locals.js CHANGED
@@ -1,5 +1,5 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- module.exports = require("./lib/localsLoader");
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ module.exports = require("./lib/localsLoader");
package/package.json CHANGED
@@ -1,35 +1,43 @@
1
1
  {
2
2
  "name": "css-loader",
3
- "version": "0.25.0",
3
+ "version": "0.26.4",
4
4
  "author": "Tobias Koppers @sokra",
5
5
  "description": "css loader module for webpack",
6
6
  "engines": {
7
- "node": ">=0.12.0"
7
+ "node": ">=0.12.0 || >=4.3.0 <5.0.0 || >=5.10"
8
8
  },
9
+ "files": [
10
+ "index.js",
11
+ "locals.js",
12
+ "lib"
13
+ ],
9
14
  "dependencies": {
10
15
  "babel-code-frame": "^6.11.0",
11
- "css-selector-tokenizer": "^0.6.0",
16
+ "css-selector-tokenizer": "^0.7.0",
12
17
  "cssnano": ">=2.6.1 <4",
13
- "loader-utils": "~0.2.2",
14
- "lodash.camelcase": "^3.0.1",
18
+ "loader-utils": "^1.0.2",
19
+ "lodash.camelcase": "^4.3.0",
15
20
  "object-assign": "^4.0.1",
16
21
  "postcss": "^5.0.6",
17
22
  "postcss-modules-extract-imports": "^1.0.0",
18
23
  "postcss-modules-local-by-default": "^1.0.1",
19
24
  "postcss-modules-scope": "^1.0.0",
20
25
  "postcss-modules-values": "^1.1.0",
21
- "source-list-map": "^0.1.4"
26
+ "source-list-map": "^0.1.7"
22
27
  },
23
28
  "devDependencies": {
24
- "codecov.io": "^0.1.2",
25
- "coveralls": "^2.11.2",
26
- "istanbul": "^0.3.13",
27
- "mocha": "^2.2.4",
28
- "should": "^7.0.1"
29
+ "codecov": "^1.0.1",
30
+ "eslint": "3.14.0",
31
+ "istanbul": "^0.4.5",
32
+ "mocha": "^3.2.0",
33
+ "should": "^11.1.2"
29
34
  },
30
35
  "scripts": {
31
36
  "test": "mocha",
32
- "travis": "npm run cover -- --report lcovonly",
37
+ "test:cover": "npm run cover -- --report lcovonly",
38
+ "lint": "eslint lib test",
39
+ "travis:test": "npm run cover",
40
+ "travis:lint": "npm run lint",
33
41
  "cover": "istanbul cover node_modules/mocha/bin/_mocha",
34
42
  "publish-patch": "mocha && npm version patch && git push && git push --tags && npm publish"
35
43
  },
package/.eslintrc DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "env": {
3
- "node": true
4
- },
5
- "rules": {
6
- "strict": 0,
7
- "curly": 0,
8
- "quotes": 0
9
- }
10
- }
package/.npmignore DELETED
@@ -1,3 +0,0 @@
1
- node_modules
2
- coverage
3
- test
package/.travis.yml DELETED
@@ -1,12 +0,0 @@
1
- sudo: false
2
- language: node_js
3
- node_js:
4
- - "0.12"
5
- - "node"
6
- - "iojs"
7
- script: npm run travis
8
-
9
- after_success:
10
- - cat ./coverage/lcov.info | node_modules/.bin/coveralls --verbose
11
- - cat ./coverage/coverage.json | node_modules/codecov.io/bin/codecov.io.js
12
- - rm -rf ./coverage