/
index.js
81 lines (76 loc) · 2.35 KB
/
index.js
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
72
73
74
75
76
77
78
79
80
81
const { basename, resolve } = require('node:path');
const { chdir } = require('node:process');
const { rollup } = require('../../dist/rollup');
const { runTestSuiteWithSamples, assertDirectoriesAreEqual } = require('../utils.js');
const FORMATS = ['es', 'cjs', 'amd', 'system'];
runTestSuiteWithSamples('chunking form', resolve(__dirname, 'samples'), (dir, config) => {
(config.skip ? describe.skip : config.solo ? describe.only : describe)(
basename(dir) + ': ' + config.description,
() => {
let bundle;
if (config.before) {
before(config.before);
}
if (config.after) {
after(config.after);
}
for (const format of FORMATS) {
it('generates ' + format, async () => {
chdir(dir);
bundle =
bundle ||
(await rollup({
input: [dir + '/main.js'],
onwarn: warning => {
if (!(config.expectedWarnings && config.expectedWarnings.includes(warning.code))) {
throw new Error(
`Unexpected warnings (${warning.code}): ${warning.message}\n` +
'If you expect warnings, list their codes in config.expectedWarnings'
);
}
},
strictDeprecations: true,
...(config.options || {})
}));
await generateAndTestBundle(
bundle,
{
dir: `${dir}/_actual/${format}`,
exports: 'auto',
format,
chunkFileNames: 'generated-[name].js',
validate: true,
...((config.options || {}).output || {})
},
`${dir}/_expected/${format}`,
config
);
});
}
}
);
});
async function generateAndTestBundle(bundle, outputOptions, expectedDir, config) {
await bundle.write({
...outputOptions,
dir: `${outputOptions.dir}${config.nestedDir ? '/' + config.nestedDir : ''}`
});
if (outputOptions.format === 'amd' && config.runAmd) {
try {
const exports = await new Promise((resolve, reject) => {
global.assert = require('node:assert');
const requirejs = require('requirejs');
requirejs.config({ baseUrl: outputOptions.dir });
requirejs([config.nestedDir ? `${config.nestedDir}/main` : 'main'], resolve, reject);
});
if (config.runAmd.exports) {
await config.runAmd.exports(exports);
}
} finally {
delete require.cache[require.resolve('requirejs')];
delete global.requirejsVars;
delete global.assert;
}
}
assertDirectoriesAreEqual(outputOptions.dir, expectedDir);
}