mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-28 19:01:34 +00:00
32 lines
1.4 KiB
JavaScript
32 lines
1.4 KiB
JavaScript
import { existsSync } from 'node:fs';
|
|
import { resolve } from 'node:path';
|
|
import { pathToFileURL } from 'node:url';
|
|
import { sourceFingerprint } from '../scripts/source-fingerprint.mjs';
|
|
|
|
const fingerprintForTree = async (root) => {
|
|
const modulePath = resolve(root, 'scripts/source-fingerprint.mjs');
|
|
if (!existsSync(modulePath)) return sourceFingerprint(root);
|
|
const module = await import(pathToFileURL(modulePath).href);
|
|
if (typeof module.sourceFingerprint !== 'function') {
|
|
throw new Error(`${modulePath} does not export sourceFingerprint`);
|
|
}
|
|
return module.sourceFingerprint(root);
|
|
};
|
|
|
|
/** Refuse measurements/screenshots made by a committed bundle from old source. */
|
|
export async function assertFreshDemoBundle(page, root = process.cwd()) {
|
|
// A comparative performance run may load an older tree whose fingerprint
|
|
// contract is intentionally different from the candidate's. Validate that
|
|
// tree with the implementation that built it, not with today's algorithm.
|
|
const expected = await fingerprintForTree(root);
|
|
const loaded = await page.evaluate(() => globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__ ?? null);
|
|
if (loaded !== expected) {
|
|
throw new Error(
|
|
'demo/srv/assets/houseplan-card.js is stale. Run npm run build and copy '
|
|
+ 'dist/houseplan-card.js to demo/srv/assets/houseplan-card.js first. '
|
|
+ `Expected ${expected}, loaded ${loaded || 'no fingerprint'}.`,
|
|
);
|
|
}
|
|
return expected;
|
|
}
|