Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 3 additions & 12 deletions packages/commonjs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,14 @@
"ci:coverage": "nyc pnpm test && nyc report --reporter=text-lcov > coverage.lcov",
"ci:lint": "pnpm build && pnpm lint",
"ci:lint:commits": "commitlint --from=${CIRCLE_BRANCH} --to=${CIRCLE_SHA1}",
"ci:test": "pnpm test -- --verbose && pnpm test:ts",
"ci:test": "pnpm test -- --reporter=verbose && pnpm test:ts",
"prebuild": "del-cli dist",
"prepare": "if [ ! -d 'dist' ]; then pnpm build; fi",
"prepublishOnly": "pnpm build",
"prerelease": "pnpm build",
"pretest": "pnpm build",
"release": "pnpm --workspace-root package:release $(pwd)",
"test": "ava",
"test": "vitest --config ../../.config/vitest.config.mts run",
"test:ts": "tsc types/index.d.ts test/types.ts --noEmit"
},
"files": [
Expand Down Expand Up @@ -81,14 +81,5 @@
"source-map-support": "^0.5.21",
"typescript": "^4.8.3"
},
"types": "./types/index.d.ts",
"ava": {
"workerThreads": false,
"files": [
"!**/fixtures/**",
"!**/helpers/**",
"!**/recipes/**",
"!**/types.ts"
]
}
"types": "./types/index.d.ts"
}
151 changes: 78 additions & 73 deletions packages/commonjs/test/form.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,22 @@ const fs = require('fs');
const path = require('path');

const acorn = require('acorn');
const test = require('ava');

const { commonjs } = require('./helpers/util.js');

process.chdir(__dirname);

const transformContext = {
error: (base, props) => {
let error = base;
if (!(base instanceof Error)) error = Object.assign(new Error(base.message), base);
if (props) Object.assign(error, props);
throw error;
},
load: ({ id }) => Promise.resolve({ id, meta: {} }),
load: ({ id }) =>
Promise.resolve({
id,
meta: {}
}),
parse: (input, options) =>
acorn.parse(input, {
ecmaVersion: 9,
Expand All @@ -30,78 +32,81 @@ const transformContext = {
})
};

// Do not run on Windows as we have full path names in the output
if (path.sep === '/') {
fs.readdirSync('./fixtures/form').forEach((dir) => {
let config;

try {
config = require(`./fixtures/form/${dir}/_config.js`);
} catch (err) {
config = {};
}

const inputEntries = [];
const runFormTest = test.skipIf(path.sep !== '/');

if (typeof config.multi === 'object') {
for (const [key, entry] of Object.entries(config.multi)) {
inputEntries.push([key, `fixtures/form/${dir}/${entry}`]);
}
} else {
inputEntries.push(['output', `fixtures/form/${dir}/input.js`]);
fs.readdirSync('./fixtures/form').forEach((dir) => {
let config;
try {
config = require(`./fixtures/form/${dir}/_config.js`);
} catch (err) {
config = {};
}
const inputEntries = [];
if (typeof config.multi === 'object') {
for (const [key, entry] of Object.entries(config.multi)) {
inputEntries.push([key, `fixtures/form/${dir}/${entry}`]);
}

(config.solo ? test.only : test)(dir, (t) =>
Promise.all(
inputEntries.map(async ([outputName, id]) => {
const { buildStart, transform } = commonjs(config.options);
buildStart.call({ meta: { rollupVersion: '99.0.0' } }, { plugins: [] });
transformContext.getModuleInfo = (moduleId) => {
return {
isEntry: config.entry && moduleId === id,
importers:
config.importers && config.importers[outputName]
? config.importers[outputName].map((x) => `fixtures/form/${dir}/${x}`)
: [],
meta: {}
};
};
const input = fs.readFileSync(id, 'utf-8');

let outputFile = `fixtures/form/${dir}/${outputName}`;
if (fs.existsSync(`${outputFile}.${process.platform}.js`)) {
outputFile += `.${process.platform}.js`;
} else {
outputFile += '.js';
}

const expected = fs.readFileSync(outputFile, 'utf-8').trim();
// eslint-disable-next-line no-await-in-loop
const transformed = await transform.call(transformContext, input, id);
let actual = (transformed ? transformed.code : input).trim().replace(/\0/g, '_');
const cwd = process.cwd();
while (actual.indexOf(cwd) >= 0) {
actual = actual.replace(process.cwd(), 'CWD');
} else {
inputEntries.push(['output', `fixtures/form/${dir}/input.js`]);
}
(config.solo ? runFormTest.only : runFormTest)(dir, () =>
Promise.all(
inputEntries.map(async ([outputName, id]) => {
const { buildStart, transform } = commonjs(config.options);
buildStart.call(
{
meta: {
rollupVersion: '99.0.0'
}
},
{
plugins: []
}
);
transformContext.getModuleInfo = (moduleId) => {
return {
isEntry: config.entry && moduleId === id,
importers:
config.importers && config.importers[outputName]
? config.importers[outputName].map((x) => `fixtures/form/${dir}/${x}`)
: [],
meta: {}
};
};
const input = fs.readFileSync(id, 'utf-8');
let outputFile = `fixtures/form/${dir}/${outputName}`;
if (fs.existsSync(`${outputFile}.${process.platform}.js`)) {
outputFile += `.${process.platform}.js`;
} else {
outputFile += '.js';
}
const expected = fs.readFileSync(outputFile, 'utf-8').trim();
// eslint-disable-next-line no-await-in-loop
const transformed = await transform.call(transformContext, input, id);
let actual = (transformed ? transformed.code : input).trim().replace(/\0/g, '_');
const cwd = process.cwd();
while (actual.indexOf(cwd) >= 0) {
actual = actual.replace(process.cwd(), 'CWD');
}

// uncomment to update snapshots
// fs.writeFileSync(outputFile, `${actual}\n`);
// uncomment to update snapshots
// fs.writeFileSync(outputFile, `${actual}\n`);

// trim whitespace from line endings,
// this will benefit issues like `form/try-catch-remove` where whitespace is left in the line,
// and testing on windows (\r\n)
t.is(
actual
.split('\n')
.map((x) => x.trimEnd())
.join('\n'),
expected
.split('\n')
.map((x) => x.trimEnd())
.join('\n')
);
})
)
);
});
}
// trim whitespace from line endings,
// this will benefit issues like `form/try-catch-remove` where whitespace is left in the line,
// and testing on windows (\r\n)
expect(
actual
.split('\n')
.map((x) => x.trimEnd())
.join('\n')
).toBe(
expected
.split('\n')
.map((x) => x.trimEnd())
.join('\n')
);
})
)
);
});
43 changes: 32 additions & 11 deletions packages/commonjs/test/function.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,50 @@

const { readdirSync } = require('fs');

const test = require('ava');
const { rollup } = require('rollup');

const { commonjs, getCodeMapFromBundle, runCodeSplitTest } = require('./helpers/util');

process.chdir(__dirname);
const avaAssertions = {
is(actual, expected, message) {
expect(actual, message).toBe(expected);
},
deepEqual(actual, expected, message) {
expect(actual, message).toEqual(expected);
},
truthy(value, message) {
expect(value, message).toBeTruthy();
},
throws(fn, expectation) {
try {
fn();
} catch (error) {
if (expectation?.message instanceof RegExp) {
expect(error.message).toMatch(expectation.message);
} else if (expectation?.message) {
expect(error.message).toBe(expectation.message);
}

return error;
}

return expect.unreachable('Expected function to throw');
}
};

process.chdir(__dirname);
readdirSync('./fixtures/function').forEach((dir) => {
let config;

try {
config = require(`./fixtures/function/${dir}/_config.js`);
} catch (err) {
config = {};
}

if (config.skip) {
console.error(`Skipped test "${dir}"`);
return;
}
(config.solo ? test.only : test)(dir, async (t) => {
(config.solo ? test.only : test)(dir, async () => {
const options = Object.assign(
{
input: `fixtures/function/${dir}/${config.input || 'main.js'}`
Expand All @@ -35,7 +58,6 @@ readdirSync('./fixtures/function').forEach((dir) => {
]
}
);

const bundle = await rollup(options);
const codeMap = await getCodeMapFromBundle(bundle, options.output || {});
if (config.show || config.solo) {
Expand All @@ -50,16 +72,15 @@ readdirSync('./fixtures/function').forEach((dir) => {
}
const { exports, global, error } = runCodeSplitTest(
codeMap,
t,
avaAssertions,
config.testEntry || 'main.js',
config.context
);

if (config.exports) config.exports(exports, t);
if (config.global) config.global(global, t);
if (config.exports) config.exports(exports, avaAssertions);
if (config.global) config.global(global, avaAssertions);
if (error) {
throw error;
}
t.snapshot(codeMap);
expect(codeMap).toMatchSnapshot();
});
});
Binary file modified packages/commonjs/test/snapshots/function.js.snap
Binary file not shown.
Binary file modified packages/commonjs/test/snapshots/test.js.snap
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
const path = require('path');

const test = require('ava');
const { rollup } = require('rollup');

const { commonjs } = require('./helpers/util.js');

process.chdir(path.join(__dirname, 'fixtures/samples/dynamic-require-root-outside-cwd/cwd'));

test('crawls dynamicRequireRoot outside cwd', async (t) => {
test('crawls dynamicRequireRoot outside cwd', async () => {
const build = await rollup({
input: 'main.js',
plugins: [
Expand All @@ -17,7 +15,11 @@
})
]
});
const bundle = await build.generate({ format: 'cjs' });
const bundle = await build.generate({
format: 'cjs'
});
const { code } = bundle.output[0];

Check warning on line 21 in packages/commonjs/test/test-dynamic-require-root-outside-cwd.js

View workflow job for this annotation

GitHub Actions / Node v24

Use array destructuring

Check warning on line 21 in packages/commonjs/test/test-dynamic-require-root-outside-cwd.js

View workflow job for this annotation

GitHub Actions / Node v20

Use array destructuring
t.true(code.includes('outer_export_value'), 'outer_export_value not found in the code');
expect(code.includes('outer_export_value'), 'outer_export_value not found in the code').toBe(
true
);
});
Loading
Loading