mirror of
https://github.com/nexu-io/open-design.git
synced 2026-07-03 12:27:55 +08:00
* Pin sandbox contract shapes and ownership guards * fix(web): guard alias import escapes
74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import {
|
|
collectWebImportIsolationViolationsFromSource,
|
|
isWebImportIsolationSourcePath,
|
|
} from "./guard.ts";
|
|
|
|
test("web import isolation rejects daemon private source imports", () => {
|
|
const violations = collectWebImportIsolationViolationsFromSource(
|
|
"apps/web/src/providers/example.ts",
|
|
[
|
|
"import { startServer } from '../../../daemon/src/server';",
|
|
"import { bypass } from '@/../daemon/src/server';",
|
|
].join("\n"),
|
|
);
|
|
|
|
assert.deepEqual(
|
|
violations.map((violation) => [violation.lineNumber, violation.specifier]),
|
|
[
|
|
[1, "../../../daemon/src/server"],
|
|
[2, "@/../daemon/src/server"],
|
|
],
|
|
);
|
|
});
|
|
|
|
test("web import isolation rejects sidecar and platform package imports", () => {
|
|
const violations = collectWebImportIsolationViolationsFromSource(
|
|
"apps/web/app/page.tsx",
|
|
[
|
|
"import { parseStamp } from '@open-design/platform';",
|
|
"type SidecarRuntime = import('@open-design/sidecar').Runtime;",
|
|
"const proto = await import('@open-design/sidecar-proto');",
|
|
"const sidecar = await import('@/../../packages/sidecar/src/index');",
|
|
].join("\n"),
|
|
);
|
|
|
|
assert.deepEqual(
|
|
violations.map((violation) => violation.specifier),
|
|
[
|
|
"@open-design/platform",
|
|
"@open-design/sidecar",
|
|
"@open-design/sidecar-proto",
|
|
"@/../../packages/sidecar/src/index",
|
|
],
|
|
);
|
|
});
|
|
|
|
test("web import isolation allows contracts and app-local imports", () => {
|
|
assert.deepEqual(
|
|
collectWebImportIsolationViolationsFromSource(
|
|
"apps/web/src/providers/example.ts",
|
|
[
|
|
"import type { ChatRunStatusResponse } from '@open-design/contracts';",
|
|
"import { requestJson } from './daemon';",
|
|
"import { latestTodoWriteInputFromMessages } from '@/src/runtime/todos';",
|
|
].join("\n"),
|
|
),
|
|
[],
|
|
);
|
|
});
|
|
|
|
test("web import isolation ignores tests and comments", () => {
|
|
assert.equal(isWebImportIsolationSourcePath("apps/web/src/providers/example.ts"), true);
|
|
assert.equal(isWebImportIsolationSourcePath("apps/web/tests/providers/example.test.ts"), false);
|
|
assert.deepEqual(
|
|
collectWebImportIsolationViolationsFromSource(
|
|
"apps/web/src/providers/example.ts",
|
|
"// import { startServer } from '../../daemon/src/server';\n",
|
|
),
|
|
[],
|
|
);
|
|
});
|