mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-21 00:58:17 +08:00
68 lines
2.3 KiB
JavaScript
68 lines
2.3 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const os = require('node:os');
|
|
const path = require('node:path');
|
|
const { test } = require('node:test');
|
|
const {
|
|
createQingLong3PackageClosureBuildPlan,
|
|
resolveQingLong3Package,
|
|
} = require('../../scripts/ql3-build-package-closure.cjs');
|
|
|
|
function fixture(t, directoryName = 'ql3-example', name = '@qinglong/example') {
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'ql3-build-closure-'));
|
|
const packageDirectory = path.join(root, 'packages', directoryName);
|
|
fs.mkdirSync(packageDirectory, { recursive: true });
|
|
fs.writeFileSync(
|
|
path.join(packageDirectory, 'package.json'),
|
|
JSON.stringify({ name, scripts: { build: 'tsc -p tsconfig.json' } }),
|
|
);
|
|
t.after(() => fs.rmSync(root, { recursive: true, force: true }));
|
|
return { packageDirectory, root };
|
|
}
|
|
|
|
test('builds one package and its workspace dependency closure in topology order', (t) => {
|
|
const { packageDirectory, root } = fixture(t);
|
|
assert.deepEqual(resolveQingLong3Package(root, packageDirectory), {
|
|
name: '@qinglong/example',
|
|
packageDirectory,
|
|
});
|
|
const plan = createQingLong3PackageClosureBuildPlan(root, packageDirectory);
|
|
assert.deepEqual(plan.args, [
|
|
'-r',
|
|
'--workspace-concurrency=1',
|
|
'--filter',
|
|
'@qinglong/example...',
|
|
'run',
|
|
'build',
|
|
]);
|
|
assert.equal(plan.cwd, root);
|
|
});
|
|
|
|
test('rejects package escapes, non-QL3 directories and recursive builds', (t) => {
|
|
const valid = fixture(t);
|
|
assert.throws(
|
|
() => resolveQingLong3Package(valid.root, valid.root),
|
|
/cwd must be one direct packages\/ql3-\* directory/,
|
|
);
|
|
|
|
const legacy = fixture(t, 'legacy-example');
|
|
assert.throws(
|
|
() => resolveQingLong3Package(legacy.root, legacy.packageDirectory),
|
|
/cwd must be one direct packages\/ql3-\* directory/,
|
|
);
|
|
|
|
const recursive = fixture(t, 'ql3-recursive', '@qinglong/recursive');
|
|
const manifestPath = path.join(recursive.packageDirectory, 'package.json');
|
|
fs.writeFileSync(
|
|
manifestPath,
|
|
JSON.stringify({
|
|
name: '@qinglong/recursive',
|
|
scripts: { build: 'pnpm --filter @qinglong/example build && tsc' },
|
|
}),
|
|
);
|
|
assert.throws(
|
|
() => resolveQingLong3Package(recursive.root, recursive.packageDirectory),
|
|
/build must compile only itself/,
|
|
);
|
|
});
|