Add per-file asset hashes and a rollback-compatible server manifest
This commit is contained in:
@@ -27,3 +27,25 @@ test('every SHELL asset exists on disk and there are no duplicate entries', () =
|
||||
assert.equal(new Set(shell).size, shell.length, 'SHELL has no duplicate entries');
|
||||
for (const asset of shell) assert.ok(existsSync(join(__dirname, asset.slice(1))), `${asset} exists`);
|
||||
});
|
||||
|
||||
test('assets.json describes the complete existing shell exactly once with eager core features', () => {
|
||||
const { groups } = JSON.parse(readFileSync(join(__dirname, 'assets.json'), 'utf8'));
|
||||
const described = new Set();
|
||||
for (const [name, group] of Object.entries(groups)) {
|
||||
assert.equal(group.contract, 1, `${name} initial contract`);
|
||||
assert.equal(typeof group.eager, 'boolean');
|
||||
for (const asset of group.files) {
|
||||
assert.ok(!described.has(asset), `${asset} has one group`);
|
||||
described.add(asset);
|
||||
assert.ok(existsSync(join(__dirname, asset.slice(1))), `${asset} exists`);
|
||||
}
|
||||
}
|
||||
for (const asset of shell) if (asset !== '/') assert.ok(described.has(asset), `${asset} is described`);
|
||||
// piano-engine is dynamically imported and historically absent from SHELL.
|
||||
for (const asset of described) assert.ok(listed.has(asset) || asset === '/piano-engine.mjs', `${asset} shell or documented dynamic import`);
|
||||
assert.equal(groups.core.eager, true);
|
||||
for (const name of ['playlist', 'settings', 'service-mode', 'lyrics-editor']) {
|
||||
assert.equal(groups[`feature:${name}`].eager, true);
|
||||
for (const asset of groups[`feature:${name}`].embeddedIn) assert.ok(groups.core.files.includes(asset), `${name} remains in core`);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user