import { describe, expect, it } from "vitest"; import { getBoundaryViolation, getProductionLayer, listProductionModulePaths, publicModuleAllowedTargetRuntimePaths, } from "./testing/module-import-boundary-test-support"; describe("Toolcraft module public import boundary", () => { it("allows only the exact factory and declaration-contract paths", () => { expect(getProductionLayer("public.ts")).toBe("public"); expect(Object.isFrozen(publicModuleAllowedTargetRuntimePaths)).toBe(true); expect(publicModuleAllowedTargetRuntimePaths).toEqual([ "modules/built-ins/canvas-editing/canvas-editing-module.ts", "modules/built-ins/image-export/image-export-module.ts", "modules/built-ins/layers/layers-module.ts", "modules/built-ins/media-source/media-source-module.ts", "modules/built-ins/model-3d/model-3d-module.ts", "modules/built-ins/spatial-view/spatial-view-module.ts", "modules/built-ins/svg-export/svg-export-module.ts", "modules/built-ins/timeline/timeline-module.ts", "modules/built-ins/video-export/video-export-module.ts", "modules/contract/capability.ts", "modules/contract/integration-port.ts", "modules/contract/module-definition.ts", "modules/contract/module-plan.ts", ]); expect(new Set(publicModuleAllowedTargetRuntimePaths).size).toBe( publicModuleAllowedTargetRuntimePaths.length, ); const productionRuntimePaths = new Set( listProductionModulePaths().map((modulePath) => `modules/${modulePath}`), ); expect( publicModuleAllowedTargetRuntimePaths.filter( (runtimePath) => !productionRuntimePaths.has(runtimePath), ), ).toEqual([]); for (const allowedTarget of publicModuleAllowedTargetRuntimePaths) { expect(getBoundaryViolation("public.ts", allowedTarget)).toBeUndefined(); } }); it("fails closed for current internals and future helpers", () => { for (const prohibitedTarget of [ "modules/built-in-catalog.ts", "modules/built-ins/image-export/future-helper.ts", "modules/contract/contribution.ts", "modules/contract/normalize-module-contribution.ts", "modules/contract/validate-module-contribution.ts", "modules/contributions/artifact-settings-contributions.ts", "modules/resolution/resolve-product-modules.ts", "modules/testing/create-test-module-definition.ts", ]) { expect(getBoundaryViolation("public.ts", prohibitedTarget)).toBe( `public.ts -> ${prohibitedTarget}`, ); } }); });