070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { readdirSync, readFileSync, statSync } from 'node:fs';
|
|
import { dirname, join } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
const webRoot = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
|
|
function filesUnder(dir: string): string[] {
|
|
const entries = readdirSync(dir).flatMap((entry) => {
|
|
const path = join(dir, entry);
|
|
const stat = statSync(path);
|
|
if (stat.isDirectory()) return filesUnder(path);
|
|
return path;
|
|
});
|
|
return entries.filter((path) => /\.(ts|tsx|cts|mts)$/.test(path));
|
|
}
|
|
|
|
describe('host bridge boundary', () => {
|
|
it('keeps web source and tests from directly reading preload globals', () => {
|
|
const forbidden = [
|
|
'electronAPI',
|
|
'__odDesktop',
|
|
'__OD_CLIENT_TYPE__',
|
|
'__od__',
|
|
'OPEN_DESIGN_HOST_GLOBAL',
|
|
];
|
|
const candidates = [
|
|
...filesUnder(join(webRoot, 'src')),
|
|
...filesUnder(join(webRoot, 'tests')).filter((path) => !path.endsWith('host-boundary.test.ts')),
|
|
];
|
|
const offenders = candidates.flatMap((path) => {
|
|
const source = readFileSync(path, 'utf8');
|
|
return forbidden
|
|
.filter((token) => source.includes(token))
|
|
.map((token) => `${path.replace(`${webRoot}/`, '')}: ${token}`);
|
|
});
|
|
expect(offenders).toEqual([]);
|
|
});
|
|
});
|