Skip to content

Commit de9c6f7

Browse files
authored
Updates and breaking changes
* Update minimal Node.js versions * Update dev dependencies * Update dependencies * Remove support for the ava-3 protocol
1 parent 96b4ae4 commit de9c6f7

10 files changed

+176
-204
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
strategy:
1414
fail-fast: false
1515
matrix:
16-
node-version: [^10.18.0, ^12.14.0, ^13.5.0]
16+
node-version: [^12.22, ^14.16, ^15]
1717
os: [ubuntu-latest, windows-latest]
1818
steps:
1919
- uses: actions/checkout@v1

.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
/.nyc_output
21
/coverage
32
/node_modules

index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ function isValidRewritePaths(rewritePaths) {
2727
}
2828

2929
module.exports = ({negotiateProtocol}) => {
30-
const protocol = negotiateProtocol(['ava-3.2', 'ava-3'], {version: pkg.version});
30+
const protocol = negotiateProtocol(['ava-3.2'], {version: pkg.version});
3131
if (protocol === null) {
3232
return;
3333
}

package.json

+8-8
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"version": "1.1.1",
44
"description": "TypeScript provider for AVA",
55
"engines": {
6-
"node": ">=10.18.0 <11 || >=12.14.0 <13 || >=13.5.0"
6+
"node": ">=12.22 <13 || >=14.16 <15 || >=15"
77
},
88
"files": [
99
"index.js"
@@ -16,18 +16,18 @@
1616
"typescript"
1717
],
1818
"scripts": {
19-
"test": "xo && nyc ava"
19+
"test": "xo && c8 ava"
2020
},
2121
"dependencies": {
22-
"escape-string-regexp": "^2.0.0"
22+
"escape-string-regexp": "^4.0.0"
2323
},
2424
"devDependencies": {
25-
"ava": "^3.0.0",
26-
"execa": "^4.0.0",
27-
"nyc": "^15.0.0",
28-
"xo": "^0.25.3"
25+
"ava": "^3.15.0",
26+
"c8": "^7.7.1",
27+
"execa": "^5.0.0",
28+
"xo": "^0.38.2"
2929
},
30-
"nyc": {
30+
"c8": {
3131
"reporter": [
3232
"html",
3333
"lcov",

test/protocol-ava-3.2.js

+80-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const path = require('path');
22
const test = require('ava');
3+
const execa = require('execa');
34
const pkg = require('../package.json');
45
const makeProvider = require('..');
56

@@ -8,7 +9,7 @@ const withProvider = (t, run) => run(t, makeProvider({
89
t.true(identifiers.includes('ava-3.2'));
910
t.is(version, pkg.version);
1011
return {
11-
ava: {version: '3.2.0'},
12+
ava: {version: '3.15.0'},
1213
identifier: 'ava-3.2',
1314
normalizeGlobPatterns: patterns => patterns,
1415
async findFiles({patterns}) {
@@ -19,8 +20,60 @@ const withProvider = (t, run) => run(t, makeProvider({
1920
}
2021
}));
2122

23+
const validateConfig = (t, provider, config) => {
24+
const error = t.throws(() => provider.main({config}));
25+
error.message = error.message.replace(`v${pkg.version}`, 'v${pkg.version}'); // eslint-disable-line no-template-curly-in-string
26+
t.snapshot(error);
27+
};
28+
2229
test('negotiates ava-3.2 protocol', withProvider, t => t.plan(2));
2330

31+
test('main() config validation: throw when config is not a plain object', withProvider, (t, provider) => {
32+
validateConfig(t, provider, false);
33+
validateConfig(t, provider, true);
34+
validateConfig(t, provider, null);
35+
validateConfig(t, provider, []);
36+
});
37+
38+
test('main() config validation: throw when config contains keys other than \'extensions\' or \'rewritePaths\'', withProvider, (t, provider) => {
39+
validateConfig(t, provider, {foo: 1});
40+
});
41+
42+
test('main() config validation: throw when config.extensions contains empty strings', withProvider, (t, provider) => {
43+
validateConfig(t, provider, {extensions: ['']});
44+
});
45+
46+
test('main() config validation: throw when config.extensions contains non-strings', withProvider, (t, provider) => {
47+
validateConfig(t, provider, {extensions: [1]});
48+
});
49+
50+
test('main() config validation: throw when config.extensions contains duplicates', withProvider, (t, provider) => {
51+
validateConfig(t, provider, {extensions: ['ts', 'ts']});
52+
});
53+
54+
test('main() config validation: config may not be an empty object', withProvider, (t, provider) => {
55+
validateConfig(t, provider, {});
56+
});
57+
58+
test('main() config validation: rewrite paths must end in a /', withProvider, (t, provider) => {
59+
validateConfig(t, provider, {rewritePaths: {src: 'build/'}});
60+
validateConfig(t, provider, {rewritePaths: {'src/': 'build'}});
61+
});
62+
63+
test('main() extensions: defaults to [\'ts\']', withProvider, (t, provider) => {
64+
t.deepEqual(provider.main({config: {rewritePaths: {'src/': 'build/'}}}).extensions, ['ts']);
65+
});
66+
67+
test('main() extensions: returns configured extensions', withProvider, (t, provider) => {
68+
const extensions = ['tsx'];
69+
t.deepEqual(provider.main({config: {extensions, rewritePaths: {'src/': 'build/'}}}).extensions, extensions);
70+
});
71+
72+
test('main() extensions: always returns new arrays', withProvider, (t, provider) => {
73+
const main = provider.main({config: {rewritePaths: {'src/': 'build/'}}});
74+
t.not(main.extensions, main.extensions);
75+
});
76+
2477
test('main() ignoreChange()', withProvider, (t, provider) => {
2578
const main = provider.main({config: {rewritePaths: {'src/': 'build/'}}});
2679
t.true(main.ignoreChange(path.join(__dirname, 'src/foo.ts')));
@@ -41,3 +94,29 @@ test('main() updateGlobs()', withProvider, (t, provider) => {
4194
ignoredByWatcherPatterns: ['assets/**']
4295
}));
4396
});
97+
98+
const compile = async provider => {
99+
return {
100+
state: await provider.main({
101+
config: {
102+
rewritePaths: {
103+
'typescript/': 'fixtures/'
104+
}
105+
}
106+
}).compile()
107+
};
108+
};
109+
110+
test('worker(): load rewritten paths files', withProvider, async (t, provider) => {
111+
const {state} = await compile(provider);
112+
const {stdout, stderr} = await execa.node(
113+
path.join(__dirname, 'fixtures/install-and-load'),
114+
['ava-3', JSON.stringify(state), path.join(__dirname, 'typescript', 'file.ts')],
115+
{cwd: path.join(__dirname, 'fixtures')}
116+
);
117+
if (stderr.length > 0) {
118+
t.log(stderr);
119+
}
120+
121+
t.snapshot(stdout);
122+
});

test/protocol-ava-3.js

-101
This file was deleted.

test/snapshots/protocol-ava-3.2.js.md

+86
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,86 @@ The actual snapshot is saved in `protocol-ava-3.2.js.snap`.
44

55
Generated by [AVA](https://avajs.dev).
66

7+
## main() config validation: throw when config is not a plain object
8+
9+
> Snapshot 1
10+
11+
Error {
12+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
13+
}
14+
15+
> Snapshot 2
16+
17+
Error {
18+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
19+
}
20+
21+
> Snapshot 3
22+
23+
Error {
24+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
25+
}
26+
27+
> Snapshot 4
28+
29+
Error {
30+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
31+
}
32+
33+
## main() config validation: throw when config contains keys other than 'extensions' or 'rewritePaths'
34+
35+
> Snapshot 1
36+
37+
Error {
38+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
39+
}
40+
41+
## main() config validation: throw when config.extensions contains empty strings
42+
43+
> Snapshot 1
44+
45+
Error {
46+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
47+
}
48+
49+
## main() config validation: throw when config.extensions contains non-strings
50+
51+
> Snapshot 1
52+
53+
Error {
54+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
55+
}
56+
57+
## main() config validation: throw when config.extensions contains duplicates
58+
59+
> Snapshot 1
60+
61+
Error {
62+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
63+
}
64+
65+
## main() config validation: config may not be an empty object
66+
67+
> Snapshot 1
68+
69+
Error {
70+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
71+
}
72+
73+
## main() config validation: rewrite paths must end in a /
74+
75+
> Snapshot 1
76+
77+
Error {
78+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
79+
}
80+
81+
> Snapshot 2
82+
83+
Error {
84+
message: 'Unexpected Typescript configuration for AVA. See https://github.com/avajs/typescript/blob/v${pkg.version}/README.md for allowed values.',
85+
}
86+
787
## main() updateGlobs()
888

989
> Snapshot 1
@@ -19,3 +99,9 @@ Generated by [AVA](https://avajs.dev).
1999
'build/**/*.js.map',
20100
],
21101
}
102+
103+
## worker(): load rewritten paths files
104+
105+
> Snapshot 1
106+
107+
'logged in file.js'
416 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)