forked from adamlaska/browser-compat-data
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathspec-urls.test.js
More file actions
71 lines (58 loc) · 2.72 KB
/
spec-urls.test.js
File metadata and controls
71 lines (58 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
'use strict';
const assert = require('assert');
const specData = require('browser-specs');
const { walk } = require('../utils');
describe('spec_url data', () => {
it('spec_urls only use allow listed hosts by w3c/browser-specs (and our exception list)', () => {
const specURLs = [];
for (const { compat } of walk()) {
const { spec_url } = compat;
const specs = [].concat(spec_url || []); // coerce spec_url to array, or empty array if undefined
specURLs.push(...specs);
}
const specsFromBrowserSpecs = [
...specData.map(spec => spec.url),
...specData.map(spec => spec.nightly.url),
...specData.map(spec => spec.series.nightlyUrl),
];
/*
* Before adding an exception, open an issue with https://github.com/w3c/browser-specs to
* see if a spec should be added there instead.
* When adding an exception here, provide a reason and indicate how the exception can be removed.
*/
const specsExceptions = [
// Remove once https://github.com/whatwg/html/pull/6715 is resolved
'https://wicg.github.io/controls-list/',
// Remove once Window.{clearImmediate,setImmediate} are irrelevant and removed
'https://w3c.github.io/setImmediate/',
// Remove if supported in browser-specs https://github.com/w3c/browser-specs/issues/339
'https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-digest-headers-05',
'https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-expect-ct-08',
// Exception for April Fools' joke for "418 I'm a teapot"
'https://www.rfc-editor.org/rfc/rfc2324',
// Unfortunately this doesn't produce a rendered spec, so it isn't in browser-specs
// Remove if it is in the main ECMA spec
'https://github.com/tc39/proposal-regexp-legacy-features/',
// For the 'shared' flag in WebAssembly.Memory
// Remove if this spec will be merged with the main WebAssembly spec
'https://webassembly.github.io/threads/js-api/',
// Not really a browser feature, thus not in browser-specs
// Remove if it is in the main ECMA spec
'https://tc39.es/proposal-hashbang/out.html',
// Remove if https://github.com/w3c/mathml/issues/216 is resolved
'https://w3c.github.io/mathml/',
];
const allowList = new Set([...specsFromBrowserSpecs, ...specsExceptions]);
const rejectedSpecs = [];
for (const spec of specURLs) {
if (![...allowList].find(host => spec.startsWith(host)))
rejectedSpecs.push(spec);
}
assert.deepStrictEqual(
rejectedSpecs,
[],
`Invalid specification host(s) found. Try a more current specification URL and/or
check if the specification URL is listed in https://github.com/w3c/browser-specs.`,
);
});
});