45 lines
1.5 KiB
JavaScript
45 lines
1.5 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
|
|
import os from 'node:os';
|
|
import path from 'node:path';
|
|
|
|
import { verifyRegistry } from './gate-verify.mjs';
|
|
|
|
const root = process.cwd();
|
|
const manifest = JSON.parse(await readFile(path.join(root, 'gates/gates.manifest.json'), 'utf8'));
|
|
manifest.gateRoots = ['.mosaic-empty-gate-root'];
|
|
manifest.criteria = [];
|
|
manifest.gates = [];
|
|
manifest.proseClaims = [];
|
|
manifest.compatibilityScenarios = [];
|
|
const directory = await mkdtemp(path.join(os.tmpdir(), 'gate-empty-population-'));
|
|
try {
|
|
const manifestPath = path.join(directory, 'manifest.json');
|
|
await writeFile(manifestPath, `${JSON.stringify(manifest)}\n`);
|
|
const result = await verifyRegistry({
|
|
root,
|
|
manifest: manifestPath,
|
|
structureOnly: true,
|
|
fixtureProfile: false,
|
|
});
|
|
const required = ['criteria', 'gates', 'proseClaims', 'compatibilityScenarios'];
|
|
const missing = required.filter(
|
|
(population) =>
|
|
!result.failures.some((failure) =>
|
|
failure.includes(`${population} population must be non-empty and anchored`),
|
|
),
|
|
);
|
|
if (missing.length > 0) {
|
|
process.stdout.write(`empty populations were not rejected: ${missing.join(', ')}\n`);
|
|
process.exitCode = 0;
|
|
} else {
|
|
process.stderr.write(
|
|
'empty universally quantified registry populations rejected before evaluation\n',
|
|
);
|
|
process.exitCode = 1;
|
|
}
|
|
} finally {
|
|
await rm(directory, { recursive: true, force: true });
|
|
}
|