testManifestsSayHostAndRoles
A manifest says the host protocol its code speaks and its definitions' roles, from those tcm has: anything else is refused, saying what it can be.
import { validate } from "#codebase/tcmts/cli/manifests"; import assert from "node:assert/strict"; export const testManifestsSayHostAndRoles = () => { const m = validate( "ui.manifest", { name: "ui", host: 1, roles: { Sheet: "stylesheet" } }, undefined, ); assert.equal(m.host, 1); assert.deepEqual(m.roles, { Sheet: "stylesheet" }); const plain = validate("geo.manifest", { name: "geo" }, undefined); assert.equal("host" in plain || "roles" in plain, false); assert.throws( () => validate("ui.manifest", { name: "ui", roles: { Sheet: "router" } }, undefined), /ui\.manifest: `roles\.Sheet` must be one of tcm's roles \(stylesheet, table, every\)/, ); assert.throws( () => validate("ui.manifest", { name: "ui", host: "1" }, undefined), /`host` is the version of tcm's host protocol its code speaks/, ); }