Skip to content

Commit 08e153c

Browse files
authored
Merge pull request #206 from bholloway/remove-engine-option
Remove engine option
2 parents 10f9cdb + 921ddda commit 08e153c

File tree

10 files changed

+97
-264
lines changed

10 files changed

+97
-264
lines changed

packages/resolve-url-loader/index.js

+26-39
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,23 @@
44
*/
55
'use strict';
66

7-
var os = require('os'),
8-
path = require('path'),
9-
fs = require('fs'),
10-
util = require('util'),
11-
loaderUtils = require('loader-utils'),
12-
SourceMapConsumer = require('source-map').SourceMapConsumer;
7+
const os = require('os');
8+
const path = require('path');
9+
const fs = require('fs');
10+
const util = require('util');
11+
const loaderUtils = require('loader-utils');
12+
const SourceMapConsumer = require('source-map').SourceMapConsumer;
1313

14-
var adjustSourceMap = require('adjust-sourcemap-loader/lib/process');
14+
const adjustSourceMap = require('adjust-sourcemap-loader/lib/process');
1515

16-
var valueProcessor = require('./lib/value-processor'),
17-
joinFn = require('./lib/join-function'),
18-
logToTestHarness = require('./lib/log-to-test-harness');
16+
const valueProcessor = require('./lib/value-processor');
17+
const joinFn = require('./lib/join-function');
18+
const logToTestHarness = require('./lib/log-to-test-harness');
1919

2020
const DEPRECATED_OPTIONS = {
2121
engine: [
2222
'DEP_RESOLVE_URL_LOADER_OPTION_ENGINE',
23-
'the "engine" option is deprecated, "postcss" engine is the default, there are no other available engines'
23+
'the "engine" option has been removed, "postcss" is the only available parser'
2424
],
2525
keepQuery: [
2626
'DEP_RESOLVE_URL_LOADER_OPTION_KEEP_QUERY',
@@ -55,7 +55,7 @@ function resolveUrlLoader(content, sourceMap) {
5555
/* jshint validthis:true */
5656

5757
// details of the file being processed
58-
var loader = this;
58+
const loader = this;
5959

6060
// a relative loader.context is a problem
6161
if (/^\./.test(loader.context)) {
@@ -66,24 +66,20 @@ function resolveUrlLoader(content, sourceMap) {
6666
}
6767

6868
// infer webpack version from new loader features
69-
var isWebpackGte5 = 'getOptions' in loader && typeof loader.getOptions === 'function';
69+
const isWebpackGte5 = 'getOptions' in loader && typeof loader.getOptions === 'function';
7070

71-
// webpack 1: prefer loader query, else options object
72-
// webpack 2: prefer loader options
73-
// webpack 3: deprecate loader.options object
74-
// webpack 4: loader.options no longer defined
75-
var rawOptions = loaderUtils.getOptions(loader),
76-
options = Object.assign(
71+
// use loader.getOptions where available otherwise use loaderUtils
72+
const rawOptions = isWebpackGte5 ? loader.getOptions() : loaderUtils.getOptions(loader);
73+
const options = Object.assign(
7774
{
7875
sourceMap: loader.sourceMap,
79-
engine : 'postcss',
8076
silent : false,
8177
removeCR : os.EOL.includes('\r'),
8278
root : false,
8379
debug : false,
8480
join : joinFn.defaultJoin
8581
},
86-
rawOptions
82+
rawOptions,
8783
);
8884

8985
// maybe log options for the test harness
@@ -95,7 +91,7 @@ function resolveUrlLoader(content, sourceMap) {
9591
}
9692

9793
// deprecated options
98-
var deprecatedItems = Object.entries(DEPRECATED_OPTIONS).filter(([key]) => key in rawOptions);
94+
const deprecatedItems = Object.entries(DEPRECATED_OPTIONS).filter(([key]) => key in rawOptions);
9995
if (deprecatedItems.length) {
10096
deprecatedItems.forEach(([, value]) => handleAsDeprecated(...value));
10197
}
@@ -114,7 +110,7 @@ function resolveUrlLoader(content, sourceMap) {
114110
}
115111

116112
// validate the result of calling the join option
117-
var joinProper = options.join(options, loader);
113+
const joinProper = options.join(options, loader);
118114
if (typeof joinProper !== 'function') {
119115
return handleAsError(
120116
'loader misconfiguration',
@@ -129,7 +125,7 @@ function resolveUrlLoader(content, sourceMap) {
129125

130126
// validate root option
131127
if (typeof options.root === 'string') {
132-
var isValid = (options.root === '') ||
128+
const isValid = (options.root === '') ||
133129
(path.isAbsolute(options.root) && fs.existsSync(options.root) && fs.statSync(options.root).isDirectory());
134130

135131
if (!isValid) {
@@ -149,7 +145,8 @@ function resolveUrlLoader(content, sourceMap) {
149145
loader.cacheable();
150146

151147
// incoming source-map
152-
var sourceMapConsumer, absSourceMap;
148+
let absSourceMap = null;
149+
let sourceMapConsumer = null;
153150
if (sourceMap) {
154151

155152
// support non-standard string encoded source-map (per less-loader)
@@ -186,20 +183,10 @@ function resolveUrlLoader(content, sourceMap) {
186183
);
187184
}
188185

189-
// choose a CSS engine
190-
var enginePath = /^[\w-]+$/.test(options.engine) && path.join(__dirname, 'lib', 'engine', options.engine + '.js');
191-
var isValidEngine = fs.existsSync(enginePath);
192-
if (!isValidEngine) {
193-
return handleAsError(
194-
'loader misconfiguration',
195-
'"engine" option is not valid'
196-
);
197-
}
198-
199186
// allow engine to throw at initialisation
200-
var engine;
187+
let engine = null;
201188
try {
202-
engine = require(enginePath);
189+
engine = require('./lib/engine/postcss');
203190
} catch (error) {
204191
return handleAsError(
205192
'error initialising',
@@ -208,7 +195,7 @@ function resolveUrlLoader(content, sourceMap) {
208195
}
209196

210197
// process async
211-
var callback = loader.async();
198+
const callback = loader.async();
212199
Promise
213200
.resolve(engine(loader.resourcePath, content, {
214201
outputSourceMap : !!options.sourceMap,
@@ -234,7 +221,7 @@ function resolveUrlLoader(content, sourceMap) {
234221
// webpack4 and earlier: source-map sources are relative to the file being processed
235222
// webpack5: source-map sources are relative to the project root but without a leading slash
236223
if (options.sourceMap) {
237-
var finalMap = adjustSourceMap(loader, {
224+
const finalMap = adjustSourceMap(loader, {
238225
format: isWebpackGte5 ? 'projectRelative' : 'sourceRelative'
239226
}, result.map);
240227
callback(null, result.content, finalMap);

packages/resolve-url-loader/lib/engine/fail-initialisation.js

-7
This file was deleted.

packages/resolve-url-loader/lib/engine/fail-processing.js

-18
This file was deleted.

packages/test-my-cli/operations/exec.js

+10-8
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ exports.create = (command) => {
6363
)),
6464
withTime(({index, root, caller, cwd, env, meta}, {onActivity}) =>
6565
new Promise((resolve) => {
66-
let stdout = '', stderr = '', interval = 0;
66+
let stdout = '', stderr = '', interval = 0, caughtError = null;
6767
const child = spawn(cmd, args, {cwd, env, shell: true, stdio: 'pipe'});
6868
addOrRemove(true);
6969

@@ -72,8 +72,8 @@ exports.create = (command) => {
7272
const field = isAdd ? 'addListener' : 'removeListener';
7373
child.stdout[field]('data', onStdout);
7474
child.stderr[field]('data', onStderr);
75-
child.on('exit', onExit);
76-
child.on('error', onError);
75+
child[field]('error', onError);
76+
child[field]('close', onClose);
7777

7878
if (isAdd) {
7979
child.stdout.setEncoding('utf8');
@@ -92,14 +92,16 @@ exports.create = (command) => {
9292
stderr += data;
9393
}
9494

95-
function onExit(code) {
96-
addOrRemove(false);
97-
resolve({index, root, caller, cwd, env, meta, code, stdout, stderr});
95+
function onError(error) {
96+
caughtError = error;
9897
}
9998

100-
function onError(error) {
99+
function onClose(code) {
101100
addOrRemove(false);
102-
resolve({index, root, caller, cwd, env, meta, code: 1, stdout, stderr: error.toString()});
101+
resolve({
102+
index, root, caller, cwd, env, meta, code, stdout,
103+
stderr: caughtError ? caughtError.toString() : stderr
104+
});
103105
}
104106
})
105107
),

test/cases/absolute-asset.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const {
1313
} = require('./common/exec');
1414
const {assertCssContent} = require('../lib/assert');
1515
const {
16-
onlyMeta, assertWebpackOk, assertWebpackNotOk, assertNoErrors, assertNoMessages, assertStdout,
16+
onlyOS, onlyMeta, assertWebpackOk, assertWebpackNotOk, assertNoErrors, assertNoMessages, assertStdout,
1717
assertCssSourceMapComment, assertCssFile, assertSourceMapFile, assertAssetError
1818
} = require('../lib/assert');
1919

@@ -90,11 +90,14 @@ module.exports = test(
9090
// if webpack passes it is incidental but lets check anyway
9191
testDebug(
9292
all(buildDevNormal, buildProdNormal)(
93-
onlyMeta('meta.version.webpack == 4')(
93+
compose(onlyOS('posix'), onlyMeta('meta.version.webpack == 4'))(
9494
assertWebpackNotOk,
9595
assertAssetError
9696
),
97-
onlyMeta('meta.version.webpack >= 5')(
97+
all(
98+
onlyOS('windows'),
99+
compose(onlyOS('posix'), onlyMeta('meta.version.webpack >= 5'))
100+
)(
98101
assertWebpackOk,
99102
assertNoErrors,
100103
assertNoMessages

test/cases/common/test/invalid.js

-104
Original file line numberDiff line numberDiff line change
@@ -6,71 +6,6 @@ const {test, layer, env} = require('test-my-cli');
66
const {assertStderr} = require('../../../lib/assert');
77
const {escapeStr} = require('../../../lib/util');
88

9-
exports.testKeepQuery = (...rest) =>
10-
test(
11-
'keepQuery=true',
12-
layer()(
13-
env({
14-
LOADER_OPTIONS: {keepQuery: true},
15-
OUTPUT: 'keepQuery'
16-
}),
17-
...rest,
18-
test('validate', assertStderr('options.keepQuery')(1)`keepQuery: true`)
19-
)
20-
);
21-
22-
exports.testAbsolute = (...rest) =>
23-
test(
24-
'absolute=true',
25-
layer()(
26-
env({
27-
LOADER_OPTIONS: {absolute: true},
28-
OUTPUT: 'absolute'
29-
}),
30-
...rest,
31-
test('validate', assertStderr('options.absolute')(1)`absolute: true`)
32-
)
33-
);
34-
35-
exports.testAttempts = (...rest) =>
36-
test(
37-
'attempts=N',
38-
layer()(
39-
env({
40-
LOADER_OPTIONS: {attempts: 1},
41-
OUTPUT: 'attempts'
42-
}),
43-
...rest,
44-
test('validate', assertStderr('options.attempts')(1)`attempts: 1`)
45-
)
46-
);
47-
48-
exports.testIncludeRoot = (...rest) =>
49-
test(
50-
'includeRoot=true',
51-
layer()(
52-
env({
53-
LOADER_OPTIONS: {includeRoot: true},
54-
OUTPUT: 'includeRoot'
55-
}),
56-
...rest
57-
),
58-
test('validate', assertStderr('options.includeRoot')(1)`includeRoot: true`)
59-
);
60-
61-
exports.testFail = (...rest) =>
62-
test(
63-
'fail=true',
64-
layer()(
65-
env({
66-
LOADER_OPTIONS: {fail: true},
67-
OUTPUT: 'fail'
68-
}),
69-
...rest,
70-
test('validate', assertStderr('options.fail')(1)`fail: true`)
71-
)
72-
);
73-
749
exports.testNonFunctionJoin1 = (...rest) =>
7510
test(
7611
'join1=!function',
@@ -148,42 +83,3 @@ exports.testNonExistentRoot = (...rest) =>
14883
test('validate', assertStderr('options.root')(1)`root: "${escapeStr(process.cwd())}[^"]+foo"`)
14984
)
15085
);
151-
152-
exports.testSilent = (...rest) =>
153-
test(
154-
'silent=true',
155-
layer()(
156-
env({
157-
LOADER_OPTIONS: {silent: true},
158-
OUTPUT: 'silent'
159-
}),
160-
...rest,
161-
test('validate', assertStderr('options.silent')(1)`silent: true`)
162-
)
163-
);
164-
165-
exports.testEngineFailInitialisation = (...rest) =>
166-
test(
167-
'engine=fail-initialisation',
168-
layer()(
169-
env({
170-
LOADER_OPTIONS: {engine: 'fail-initialisation'},
171-
OUTPUT: 'engine-fail-initialisation'
172-
}),
173-
...rest,
174-
test('validate', assertStderr('options.engine')(1)`engine: "fail-initialisation"`)
175-
)
176-
);
177-
178-
exports.testEngineFailProcessing = (...rest) =>
179-
test(
180-
'engine=fail-processing',
181-
layer()(
182-
env({
183-
LOADER_OPTIONS: {engine: 'fail-processing'},
184-
OUTPUT: 'engine-fail-processing'
185-
}),
186-
...rest,
187-
test('validate', assertStderr('options.engine')(1)`engine: "fail-processing"`)
188-
)
189-
);

0 commit comments

Comments
 (0)