Format authored monorepo code with pinned language formatters
This commit is contained in:
@@ -9,36 +9,36 @@ import {
|
||||
type CapabilityValidationIssueCode,
|
||||
type WorkspaceRevision,
|
||||
} from "../src/capability-model/index.js";
|
||||
import {
|
||||
fixtureId,
|
||||
makeValidCapabilityWorkspace,
|
||||
} from "./fixtures/capability-model.js";
|
||||
import { fixtureId, makeValidCapabilityWorkspace } from "./fixtures/capability-model.js";
|
||||
|
||||
test("ordinary state rejects managed references even under list/optional wrappers", () => {
|
||||
const workspace = makeValidCapabilityWorkspace();
|
||||
const state = [...workspace.sharedAttachments, ...workspace.conformances.flatMap((entry) => entry.privateAttachments)].find((entry) => entry.kind === "state")!;
|
||||
const state = [
|
||||
...workspace.sharedAttachments,
|
||||
...workspace.conformances.flatMap((entry) => entry.privateAttachments),
|
||||
].find((entry) => entry.kind === "state")!;
|
||||
if (state.kind !== "state") throw new Error("fixture missing state");
|
||||
state.valueType = {kind: "list", value: {kind: "optional", value: {kind: "object-ref", expectation: {kind: "atom", atomId: state.attachedTo}}}};
|
||||
state.valueType = {
|
||||
kind: "list",
|
||||
value: { kind: "optional", value: { kind: "object-ref", expectation: { kind: "atom", atomId: state.attachedTo } } },
|
||||
};
|
||||
assert.ok(validateWorkspaceRevision(workspace).some((entry) => entry.message.includes("graph relationships")));
|
||||
});
|
||||
|
||||
const expectIssue = (
|
||||
workspace: WorkspaceRevision,
|
||||
code: CapabilityValidationIssueCode,
|
||||
) => {
|
||||
const expectIssue = (workspace: WorkspaceRevision, code: CapabilityValidationIssueCode) => {
|
||||
const issues = validateWorkspaceRevision(workspace);
|
||||
assert.ok(
|
||||
issues.some((entry) => entry.code === code),
|
||||
`Expected ${code}, got:\n${issues
|
||||
.map((entry) => `${entry.code} ${entry.path}: ${entry.message}`)
|
||||
.join("\n")}`,
|
||||
`Expected ${code}, got:\n${issues.map((entry) => `${entry.code} ${entry.path}: ${entry.message}`).join("\n")}`,
|
||||
);
|
||||
assert.equal(compileWorkspaceRevision(workspace).ok, false);
|
||||
};
|
||||
|
||||
test("constructor dependency input contracts match the selected constructor", () => {
|
||||
const workspace = makeValidCapabilityWorkspace();
|
||||
const port = workspace.packageImports.flatMap((pkg) => pkg.exports).flatMap((entry) => entry.dependencyPorts)
|
||||
const port = workspace.packageImports
|
||||
.flatMap((pkg) => pkg.exports)
|
||||
.flatMap((entry) => entry.dependencyPorts)
|
||||
.find((port) => port.requirement.kind === "constructor")!;
|
||||
assert.equal(port.requirement.kind, "constructor");
|
||||
if (port.requirement.kind !== "constructor") return;
|
||||
@@ -52,14 +52,10 @@ const conformance = (
|
||||
workspace: WorkspaceRevision,
|
||||
identity: Pick<(typeof workspace.conformances)[number], "atomId" | "interfaceRevisionId">,
|
||||
) => {
|
||||
const result = workspace.conformances.find((entry) =>
|
||||
entry.atomId === identity.atomId &&
|
||||
entry.interfaceRevisionId === identity.interfaceRevisionId
|
||||
);
|
||||
assert.ok(
|
||||
result,
|
||||
`Missing fixture conformance ${identity.atomId} as ${identity.interfaceRevisionId}`,
|
||||
const result = workspace.conformances.find(
|
||||
(entry) => entry.atomId === identity.atomId && entry.interfaceRevisionId === identity.interfaceRevisionId,
|
||||
);
|
||||
assert.ok(result, `Missing fixture conformance ${identity.atomId} as ${identity.interfaceRevisionId}`);
|
||||
return result;
|
||||
};
|
||||
|
||||
@@ -70,12 +66,7 @@ test("the representative v1 workspace compiles to native and package plans", ()
|
||||
assert.equal(compiled.ok, true);
|
||||
if (!compiled.ok) return;
|
||||
|
||||
const title = resolveOperationPlan(
|
||||
compiled.plan,
|
||||
fixtureId.project,
|
||||
fixtureId.namedV1,
|
||||
fixtureId.namedGet,
|
||||
);
|
||||
const title = resolveOperationPlan(compiled.plan, fixtureId.project, fixtureId.namedV1, fixtureId.namedGet);
|
||||
assert.equal(title?.kind, "state");
|
||||
if (title?.kind === "state") {
|
||||
assert.equal(title.binding.slotId, fixtureId.projectTitle);
|
||||
@@ -83,12 +74,7 @@ test("the representative v1 workspace compiles to native and package plans", ()
|
||||
assert.deepEqual(title.attachment.owner, { kind: "workspace" });
|
||||
}
|
||||
|
||||
const owner = resolveOperationPlan(
|
||||
compiled.plan,
|
||||
fixtureId.project,
|
||||
fixtureId.ownedV1,
|
||||
fixtureId.ownerResolve,
|
||||
);
|
||||
const owner = resolveOperationPlan(compiled.plan, fixtureId.project, fixtureId.ownedV1, fixtureId.ownerResolve);
|
||||
assert.equal(owner?.kind, "edge");
|
||||
if (owner?.kind === "edge") {
|
||||
assert.equal(owner.binding.edgeTypeId, fixtureId.projectOwner);
|
||||
@@ -98,12 +84,7 @@ test("the representative v1 workspace compiles to native and package plans", ()
|
||||
});
|
||||
}
|
||||
|
||||
const summary = resolveOperationPlan(
|
||||
compiled.plan,
|
||||
fixtureId.project,
|
||||
fixtureId.summaryV1,
|
||||
fixtureId.summaryGet,
|
||||
);
|
||||
const summary = resolveOperationPlan(compiled.plan, fixtureId.project, fixtureId.summaryV1, fixtureId.summaryGet);
|
||||
assert.equal(summary?.kind, "package");
|
||||
if (summary?.kind === "package") {
|
||||
assert.equal(summary.packageRevision.revisionId, fixtureId.todoRuntimeV1);
|
||||
@@ -126,10 +107,7 @@ test("the closure is an exact tree-shaking boundary", () => {
|
||||
const closure = computeCapabilityClosure(result.plan, [
|
||||
{ atomId: fixtureId.project, interfaceRevisionId: fixtureId.summaryV1 },
|
||||
]);
|
||||
assert.deepEqual(closure.conformances, [
|
||||
fixtureId.projectNamedConformance,
|
||||
fixtureId.projectSummaryConformance,
|
||||
]);
|
||||
assert.deepEqual(closure.conformances, [fixtureId.projectNamedConformance, fixtureId.projectSummaryConformance]);
|
||||
assert.deepEqual(closure.packageRevisionIds, [fixtureId.todoRuntimeV1]);
|
||||
assert.deepEqual(closure.attachmentIds, [fixtureId.projectTitle]);
|
||||
assert.deepEqual(closure.constructorAtomIds, [fixtureId.person]);
|
||||
@@ -140,18 +118,12 @@ test("compiled plans are snapshots, not mutable authoring state", () => {
|
||||
const result = compileWorkspaceRevision(workspace);
|
||||
assert.equal(result.ok, true);
|
||||
if (!result.ok) return;
|
||||
conformance(workspace, fixtureId.projectNamedConformance)
|
||||
.operationBindings[0]!.binding = {
|
||||
kind: "state",
|
||||
slotId: fixtureId.personName,
|
||||
primitive: "read",
|
||||
};
|
||||
const resolved = resolveOperationPlan(
|
||||
result.plan,
|
||||
fixtureId.project,
|
||||
fixtureId.namedV1,
|
||||
fixtureId.namedGet,
|
||||
);
|
||||
conformance(workspace, fixtureId.projectNamedConformance).operationBindings[0]!.binding = {
|
||||
kind: "state",
|
||||
slotId: fixtureId.personName,
|
||||
primitive: "read",
|
||||
};
|
||||
const resolved = resolveOperationPlan(result.plan, fixtureId.project, fixtureId.namedV1, fixtureId.namedGet);
|
||||
assert.equal(resolved?.kind, "state");
|
||||
if (resolved?.kind === "state") {
|
||||
assert.equal(resolved.binding.slotId, fixtureId.projectTitle);
|
||||
@@ -164,20 +136,14 @@ test("a conformance binds every operation exactly once", () => {
|
||||
expectIssue(missing, "missing-operation-binding");
|
||||
|
||||
const duplicate = makeValidCapabilityWorkspace();
|
||||
const bindings = conformance(
|
||||
duplicate,
|
||||
fixtureId.projectNamedConformance,
|
||||
).operationBindings;
|
||||
const bindings = conformance(duplicate, fixtureId.projectNamedConformance).operationBindings;
|
||||
bindings.push(structuredClone(bindings[0]!));
|
||||
expectIssue(duplicate, "duplicate-operation-binding");
|
||||
});
|
||||
|
||||
test("private attachments are visible only to their owning conformance", () => {
|
||||
const workspace = makeValidCapabilityWorkspace();
|
||||
const binding = conformance(
|
||||
workspace,
|
||||
fixtureId.projectNamedConformance,
|
||||
).operationBindings[0]!.binding;
|
||||
const binding = conformance(workspace, fixtureId.projectNamedConformance).operationBindings[0]!.binding;
|
||||
assert.equal(binding.kind, "state");
|
||||
if (binding.kind !== "state") return;
|
||||
binding.slotId = fixtureId.personName;
|
||||
@@ -186,15 +152,10 @@ test("private attachments are visible only to their owning conformance", () => {
|
||||
|
||||
test("related-object dependency views cannot traverse another conformance's private edge", () => {
|
||||
const workspace = makeValidCapabilityWorkspace();
|
||||
const packageBinding = conformance(
|
||||
workspace,
|
||||
fixtureId.projectSummaryConformance,
|
||||
).operationBindings[0]!.binding;
|
||||
const packageBinding = conformance(workspace, fixtureId.projectSummaryConformance).operationBindings[0]!.binding;
|
||||
assert.equal(packageBinding.kind, "package");
|
||||
if (packageBinding.kind !== "package") return;
|
||||
const named = packageBinding.dependencies.find(
|
||||
(dependency) => dependency.portId === fixtureId.namedPort,
|
||||
);
|
||||
const named = packageBinding.dependencies.find((dependency) => dependency.portId === fixtureId.namedPort);
|
||||
assert.ok(named && named.binding.kind === "interface");
|
||||
named.binding.via = {
|
||||
edgeTypeId: fixtureId.projectOwner,
|
||||
@@ -205,20 +166,31 @@ test("related-object dependency views cannot traverse another conformance's priv
|
||||
const edge = owner.privateAttachments.find((entry) => entry.kind === "edge" && entry.id === fixtureId.projectOwner);
|
||||
assert.ok(edge?.kind === "edge");
|
||||
edge.endpoints.find((endpoint) => endpoint.projectionId === fixtureId.projectOwnerProjection)!.publicTraversal = true;
|
||||
assert.equal(validateWorkspaceRevision(workspace).some((entry) => entry.code === "private-attachment-access"), false, "Only an explicitly exported read-only traversal crosses ownership");
|
||||
assert.equal(
|
||||
validateWorkspaceRevision(workspace).some((entry) => entry.code === "private-attachment-access"),
|
||||
false,
|
||||
"Only an explicitly exported read-only traversal crosses ownership",
|
||||
);
|
||||
});
|
||||
|
||||
test("public traversal permits a native inverse read without exporting mutation authority", () => {
|
||||
const workspace = makeValidCapabilityWorkspace();
|
||||
const owned = conformance(workspace, fixtureId.projectOwnedConformance);
|
||||
const index = owned.privateAttachments.findIndex(entry => entry.kind === "edge" && entry.id === fixtureId.projectOwner);
|
||||
const index = owned.privateAttachments.findIndex(
|
||||
(entry) => entry.kind === "edge" && entry.id === fixtureId.projectOwner,
|
||||
);
|
||||
const edge = owned.privateAttachments.splice(index, 1)[0];
|
||||
assert.ok(edge?.kind === "edge");
|
||||
conformance(workspace, fixtureId.projectNamedConformance).privateAttachments.push(edge);
|
||||
expectIssue(workspace, "private-attachment-access");
|
||||
edge.endpoints.find(endpoint => endpoint.projectionId === fixtureId.projectOwnerProjection)!.publicTraversal = true;
|
||||
edge.endpoints.find((endpoint) => endpoint.projectionId === fixtureId.projectOwnerProjection)!.publicTraversal = true;
|
||||
const readPath = `conformances[${workspace.conformances.indexOf(owned)}].operationBindings[0]`;
|
||||
assert.equal(validateWorkspaceRevision(workspace).some(issue => issue.code === "private-attachment-access" && issue.path.startsWith(readPath)), false);
|
||||
assert.equal(
|
||||
validateWorkspaceRevision(workspace).some(
|
||||
(issue) => issue.code === "private-attachment-access" && issue.path.startsWith(readPath),
|
||||
),
|
||||
false,
|
||||
);
|
||||
const binding = owned.operationBindings[0].binding;
|
||||
assert.ok(binding.kind === "edge");
|
||||
binding.primitive = "connect";
|
||||
@@ -227,19 +199,13 @@ test("public traversal permits a native inverse read without exporting mutation
|
||||
|
||||
test("native state and edge providers must match operation shape", () => {
|
||||
const stateWorkspace = makeValidCapabilityWorkspace();
|
||||
const state = conformance(
|
||||
stateWorkspace,
|
||||
fixtureId.projectNamedConformance,
|
||||
).operationBindings[0]!.binding;
|
||||
const state = conformance(stateWorkspace, fixtureId.projectNamedConformance).operationBindings[0]!.binding;
|
||||
assert.equal(state.kind, "state");
|
||||
if (state.kind === "state") state.primitive = "write";
|
||||
expectIssue(stateWorkspace, "invalid-state-binding");
|
||||
|
||||
const edgeWorkspace = makeValidCapabilityWorkspace();
|
||||
const edge = conformance(
|
||||
edgeWorkspace,
|
||||
fixtureId.projectOwnedConformance,
|
||||
).operationBindings[0]!.binding;
|
||||
const edge = conformance(edgeWorkspace, fixtureId.projectOwnedConformance).operationBindings[0]!.binding;
|
||||
assert.equal(edge.kind, "edge");
|
||||
if (edge.kind === "edge") edge.primitive = "connect";
|
||||
expectIssue(edgeWorkspace, "invalid-edge-binding");
|
||||
@@ -247,18 +213,13 @@ test("native state and edge providers must match operation shape", () => {
|
||||
|
||||
test("package dependencies are complete, exact, and explicitly injected", () => {
|
||||
const missing = makeValidCapabilityWorkspace();
|
||||
const packageBinding = conformance(
|
||||
missing,
|
||||
fixtureId.projectSummaryConformance,
|
||||
).operationBindings[0]!.binding;
|
||||
const packageBinding = conformance(missing, fixtureId.projectSummaryConformance).operationBindings[0]!.binding;
|
||||
assert.equal(packageBinding.kind, "package");
|
||||
if (packageBinding.kind === "package") packageBinding.dependencies.pop();
|
||||
expectIssue(missing, "invalid-dependency-binding");
|
||||
|
||||
const wrongType = makeValidCapabilityWorkspace();
|
||||
const summaryExport = wrongType.packageImports[0]!.exports.find(
|
||||
(entry) => entry.id === fixtureId.summaryGetExport,
|
||||
);
|
||||
const summaryExport = wrongType.packageImports[0]!.exports.find((entry) => entry.id === fixtureId.summaryGetExport);
|
||||
assert.ok(summaryExport);
|
||||
summaryExport.dependencyPorts[0]!.requirement = {
|
||||
kind: "state",
|
||||
@@ -270,19 +231,14 @@ test("package dependencies are complete, exact, and explicitly injected", () =>
|
||||
|
||||
test("package receiver requirements cannot depend on themselves", () => {
|
||||
const workspace = makeValidCapabilityWorkspace();
|
||||
const summaryExport = workspace.packageImports[0]!.exports.find(
|
||||
(entry) => entry.id === fixtureId.summaryGetExport,
|
||||
);
|
||||
const summaryExport = workspace.packageImports[0]!.exports.find((entry) => entry.id === fixtureId.summaryGetExport);
|
||||
assert.ok(summaryExport && summaryExport.kind === "operation");
|
||||
summaryExport.receiverRequirement = {
|
||||
kind: "all-interfaces",
|
||||
interfaceRevisionIds: [fixtureId.summaryV1],
|
||||
};
|
||||
summaryExport.dependencyPorts = [];
|
||||
const packageBinding = conformance(
|
||||
workspace,
|
||||
fixtureId.projectSummaryConformance,
|
||||
).operationBindings[0]!.binding;
|
||||
const packageBinding = conformance(workspace, fixtureId.projectSummaryConformance).operationBindings[0]!.binding;
|
||||
assert.equal(packageBinding.kind, "package");
|
||||
if (packageBinding.kind === "package") packageBinding.dependencies = [];
|
||||
expectIssue(workspace, "cyclic-conformance-requirement");
|
||||
|
||||
Reference in New Issue
Block a user