@prisma-next/framework-components
Advanced tools
| import type { DiffableNode, SchemaDiffIssue } from './schema-diff'; | ||
| const PATH_DELIMITER = ' '; | ||
| function pathKey(path: readonly string[]): string { | ||
| return path.join(PATH_DELIMITER); | ||
| } | ||
| /** | ||
| * Whether an issue's op builds its subject up (create or alter) rather than | ||
| * only tearing it down. The differ sets `expected` on every create (`not-found`) | ||
| * and alter (`not-equal`) issue and leaves it absent on a pure drop | ||
| * (`not-expected`). This is the single signal the ordering law reads for edge | ||
| * direction — never `reason`. | ||
| */ | ||
| function buildsUp(issue: SchemaDiffIssue): boolean { | ||
| return issue.expected !== undefined; | ||
| } | ||
| /** | ||
| * The nearest strict-ancestor bucket of `path` — the surviving parent entity a | ||
| * child is contained by. Walks the path's proper prefixes from longest to | ||
| * shortest and returns the first prefix that maps to a bucket; a gap (a prefix | ||
| * with no bucket) is skipped so containment always attaches to the closest real | ||
| * parent. | ||
| * | ||
| * Returns a list because a path prefix can be shared by two siblings of | ||
| * different `nodeKind` (a role and a namespace named alike); linking the child | ||
| * to every candidate over-constrains safely (the extra edge points at a same- | ||
| * direction op and never forms a cycle, since a parent never depends on its | ||
| * child) rather than risk picking the wrong one. | ||
| */ | ||
| function nearestAncestors<T>( | ||
| path: readonly string[], | ||
| byPath: ReadonlyMap<string, readonly T[]>, | ||
| ): readonly T[] { | ||
| for (let end = path.length - 1; end >= 1; end -= 1) { | ||
| const bucket = byPath.get(pathKey(path.slice(0, end))); | ||
| if (bucket !== undefined) return bucket; | ||
| } | ||
| return []; | ||
| } | ||
| /** | ||
| * Orders schema-diff issues so that every dependency's op precedes its | ||
| * dependent on the way up and follows it on the way down, breaking ties | ||
| * deterministically by path. | ||
| * | ||
| * Edges come from two sources: | ||
| * - **`dependsOn` cross-links** — the resolved issue-to-issue paths the differ | ||
| * mirrors onto each issue (a node's declared structural prerequisites). A | ||
| * path that resolves to no issue in this list is skipped (the dependency is | ||
| * satisfied by reality); a path shared by two same-id/different-kind siblings | ||
| * links to every match, over-constraining safely. | ||
| * - **containment** — every issue depends on its nearest strict-ancestor issue | ||
| * (a child entity on the parent entity that owns it). Subtree coalescing has | ||
| * already removed the descendants of a whole create/drop, so this only links | ||
| * the parent/child pairs that legitimately survive together. | ||
| * | ||
| * The ordering law reads each dependent's presence for direction: an issue that | ||
| * builds up (`expected` present — a create or alter) needs its dependency | ||
| * first; a pure drop needs its dependent removed first, so the edge reverses. | ||
| * The graph is a DAG by construction (dependencies point from dependents to | ||
| * their prerequisites, and prerequisites never point back), so a cycle is a | ||
| * derivation or authoring bug: the topological sort asserts acyclicity and | ||
| * throws, naming the issues it could not place. | ||
| */ | ||
| export function orderIssuesByDependencies<TNode extends DiffableNode = DiffableNode>( | ||
| issues: readonly SchemaDiffIssue<TNode>[], | ||
| ): readonly SchemaDiffIssue<TNode>[] { | ||
| if (issues.length <= 1) return issues; | ||
| // Work with node records rather than parallel arrays indexed by number, so no | ||
| // step needs an unchecked array-index read. | ||
| type OrderNode = { | ||
| readonly issue: SchemaDiffIssue<TNode>; | ||
| /** Path key, used as the deterministic tiebreak among ready nodes. */ | ||
| readonly key: string; | ||
| /** Whether this issue builds up (create/alter) — the ordering law's direction signal. */ | ||
| readonly buildsUp: boolean; | ||
| /** Nodes that must be emitted after this one. */ | ||
| readonly outgoing: Set<OrderNode>; | ||
| inDegree: number; | ||
| }; | ||
| const nodes: OrderNode[] = issues.map((issue) => ({ | ||
| issue, | ||
| key: pathKey(issue.path), | ||
| buildsUp: buildsUp(issue), | ||
| outgoing: new Set<OrderNode>(), | ||
| inDegree: 0, | ||
| })); | ||
| const nodesByPath = new Map<string, OrderNode[]>(); | ||
| for (const node of nodes) { | ||
| const bucket = nodesByPath.get(node.key); | ||
| if (bucket === undefined) nodesByPath.set(node.key, [node]); | ||
| else bucket.push(node); | ||
| } | ||
| const addEdge = (before: OrderNode, after: OrderNode): void => { | ||
| if (before.outgoing.has(after)) return; | ||
| before.outgoing.add(after); | ||
| after.inDegree += 1; | ||
| }; | ||
| // `dependent` requires `dependency` to exist. Up (dependent builds up): the | ||
| // dependency's op runs first; down (a pure drop): the dependent's op runs | ||
| // first, so the edge reverses. | ||
| const addDependency = (dependent: OrderNode, dependency: OrderNode): void => { | ||
| if (dependent === dependency) return; | ||
| if (dependent.buildsUp) addEdge(dependency, dependent); | ||
| else addEdge(dependent, dependency); | ||
| }; | ||
| for (const node of nodes) { | ||
| for (const targetPath of node.issue.dependsOn ?? []) { | ||
| for (const target of nodesByPath.get(pathKey(targetPath)) ?? []) { | ||
| addDependency(node, target); | ||
| } | ||
| } | ||
| for (const ancestor of nearestAncestors(node.issue.path, nodesByPath)) { | ||
| addDependency(node, ancestor); | ||
| } | ||
| } | ||
| const ready: OrderNode[] = nodes.filter((node) => node.inDegree === 0); | ||
| const order: OrderNode[] = []; | ||
| while (ready.length > 0) { | ||
| // Kahn's algorithm: emit the ready node with the smallest path key, so | ||
| // independent issues come out in a stable, deterministic order. | ||
| let best: OrderNode | undefined; | ||
| for (const candidate of ready) { | ||
| if (best === undefined || candidate.key < best.key) best = candidate; | ||
| } | ||
| if (best === undefined) break; | ||
| ready.splice(ready.indexOf(best), 1); | ||
| order.push(best); | ||
| for (const next of best.outgoing) { | ||
| next.inDegree -= 1; | ||
| if (next.inDegree === 0) ready.push(next); | ||
| } | ||
| } | ||
| if (order.length !== nodes.length) { | ||
| const placed = new Set(order); | ||
| const unresolved = nodes | ||
| .filter((node) => !placed.has(node)) | ||
| .map((node) => node.issue.path.join('/')); | ||
| throw new Error( | ||
| `orderIssuesByDependencies: dependency cycle among schema-diff issues (unresolved: ${unresolved.join(', ')})`, | ||
| ); | ||
| } | ||
| return order.map((node) => node.issue); | ||
| } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"control.d.mts","names":[],"sources":["../src/control/contract-serializer.ts","../src/control/schema-diff.ts","../src/control/control-operation-results.ts","../src/control/control-instances.ts","../src/control/control-migration-types.ts","../src/control/control-spaces.ts","../src/control/control-stack.ts","../src/control/control-descriptors.ts","../src/control/control-operation-preview.ts","../src/control/control-schema-view.ts","../src/control/control-capabilities.ts","../src/control/schema-verifier.ts","../src/control/verifier-disposition.ts"],"mappings":"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"} | ||
| {"version":3,"file":"control.d.mts","names":[],"sources":["../src/control/contract-serializer.ts","../src/control/schema-diff.ts","../src/control/control-operation-results.ts","../src/control/control-instances.ts","../src/control/control-migration-types.ts","../src/control/control-spaces.ts","../src/control/control-stack.ts","../src/control/control-descriptors.ts","../src/control/control-operation-preview.ts","../src/control/control-schema-view.ts","../src/control/control-capabilities.ts","../src/control/order-issues-by-dependencies.ts","../src/control/schema-verifier.ts","../src/control/verifier-disposition.ts"],"mappings":"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"} |
+171
-5
@@ -334,3 +334,126 @@ import { n as materializeCodec, r as resolveCodecDescriptorOrThrow, t as CONTRACT_CODEC_DESCRIPTOR_MISSING } from "./resolve-codec-D8EPZosv.mjs"; | ||
| //#endregion | ||
| //#region src/control/order-issues-by-dependencies.ts | ||
| const PATH_DELIMITER = " "; | ||
| function pathKey(path) { | ||
| return path.join(PATH_DELIMITER); | ||
| } | ||
| /** | ||
| * Whether an issue's op builds its subject up (create or alter) rather than | ||
| * only tearing it down. The differ sets `expected` on every create (`not-found`) | ||
| * and alter (`not-equal`) issue and leaves it absent on a pure drop | ||
| * (`not-expected`). This is the single signal the ordering law reads for edge | ||
| * direction — never `reason`. | ||
| */ | ||
| function buildsUp(issue) { | ||
| return issue.expected !== void 0; | ||
| } | ||
| /** | ||
| * The nearest strict-ancestor bucket of `path` — the surviving parent entity a | ||
| * child is contained by. Walks the path's proper prefixes from longest to | ||
| * shortest and returns the first prefix that maps to a bucket; a gap (a prefix | ||
| * with no bucket) is skipped so containment always attaches to the closest real | ||
| * parent. | ||
| * | ||
| * Returns a list because a path prefix can be shared by two siblings of | ||
| * different `nodeKind` (a role and a namespace named alike); linking the child | ||
| * to every candidate over-constrains safely (the extra edge points at a same- | ||
| * direction op and never forms a cycle, since a parent never depends on its | ||
| * child) rather than risk picking the wrong one. | ||
| */ | ||
| function nearestAncestors(path, byPath) { | ||
| for (let end = path.length - 1; end >= 1; end -= 1) { | ||
| const bucket = byPath.get(pathKey(path.slice(0, end))); | ||
| if (bucket !== void 0) return bucket; | ||
| } | ||
| return []; | ||
| } | ||
| /** | ||
| * Orders schema-diff issues so that every dependency's op precedes its | ||
| * dependent on the way up and follows it on the way down, breaking ties | ||
| * deterministically by path. | ||
| * | ||
| * Edges come from two sources: | ||
| * - **`dependsOn` cross-links** — the resolved issue-to-issue paths the differ | ||
| * mirrors onto each issue (a node's declared structural prerequisites). A | ||
| * path that resolves to no issue in this list is skipped (the dependency is | ||
| * satisfied by reality); a path shared by two same-id/different-kind siblings | ||
| * links to every match, over-constraining safely. | ||
| * - **containment** — every issue depends on its nearest strict-ancestor issue | ||
| * (a child entity on the parent entity that owns it). Subtree coalescing has | ||
| * already removed the descendants of a whole create/drop, so this only links | ||
| * the parent/child pairs that legitimately survive together. | ||
| * | ||
| * The ordering law reads each dependent's presence for direction: an issue that | ||
| * builds up (`expected` present — a create or alter) needs its dependency | ||
| * first; a pure drop needs its dependent removed first, so the edge reverses. | ||
| * The graph is a DAG by construction (dependencies point from dependents to | ||
| * their prerequisites, and prerequisites never point back), so a cycle is a | ||
| * derivation or authoring bug: the topological sort asserts acyclicity and | ||
| * throws, naming the issues it could not place. | ||
| */ | ||
| function orderIssuesByDependencies(issues) { | ||
| if (issues.length <= 1) return issues; | ||
| const nodes = issues.map((issue) => ({ | ||
| issue, | ||
| key: pathKey(issue.path), | ||
| buildsUp: buildsUp(issue), | ||
| outgoing: /* @__PURE__ */ new Set(), | ||
| inDegree: 0 | ||
| })); | ||
| const nodesByPath = /* @__PURE__ */ new Map(); | ||
| for (const node of nodes) { | ||
| const bucket = nodesByPath.get(node.key); | ||
| if (bucket === void 0) nodesByPath.set(node.key, [node]); | ||
| else bucket.push(node); | ||
| } | ||
| const addEdge = (before, after) => { | ||
| if (before.outgoing.has(after)) return; | ||
| before.outgoing.add(after); | ||
| after.inDegree += 1; | ||
| }; | ||
| const addDependency = (dependent, dependency) => { | ||
| if (dependent === dependency) return; | ||
| if (dependent.buildsUp) addEdge(dependency, dependent); | ||
| else addEdge(dependent, dependency); | ||
| }; | ||
| for (const node of nodes) { | ||
| for (const targetPath of node.issue.dependsOn ?? []) for (const target of nodesByPath.get(pathKey(targetPath)) ?? []) addDependency(node, target); | ||
| for (const ancestor of nearestAncestors(node.issue.path, nodesByPath)) addDependency(node, ancestor); | ||
| } | ||
| const ready = nodes.filter((node) => node.inDegree === 0); | ||
| const order = []; | ||
| while (ready.length > 0) { | ||
| let best; | ||
| for (const candidate of ready) if (best === void 0 || candidate.key < best.key) best = candidate; | ||
| if (best === void 0) break; | ||
| ready.splice(ready.indexOf(best), 1); | ||
| order.push(best); | ||
| for (const next of best.outgoing) { | ||
| next.inDegree -= 1; | ||
| if (next.inDegree === 0) ready.push(next); | ||
| } | ||
| } | ||
| if (order.length !== nodes.length) { | ||
| const placed = new Set(order); | ||
| const unresolved = nodes.filter((node) => !placed.has(node)).map((node) => node.issue.path.join("/")); | ||
| throw new Error(`orderIssuesByDependencies: dependency cycle among schema-diff issues (unresolved: ${unresolved.join(", ")})`); | ||
| } | ||
| return order.map((node) => node.issue); | ||
| } | ||
| //#endregion | ||
| //#region src/control/schema-diff.ts | ||
| /** | ||
| * The outcome an issue represents, discriminated by presence rather than any | ||
| * stored field — the single source of truth every consumer reads. An issue | ||
| * always carries at least one side by construction; neither is a malformed | ||
| * issue and throws. | ||
| */ | ||
| function issueOutcome(issue) { | ||
| const hasExpected = issue.expected !== void 0; | ||
| const hasActual = issue.actual !== void 0; | ||
| if (hasExpected && hasActual) return "not-equal"; | ||
| if (hasExpected) return "not-found"; | ||
| if (hasActual) return "not-expected"; | ||
| throw new Error(`issueOutcome: issue at "${issue.path.join("/")}" carries neither an expected nor an actual node`); | ||
| } | ||
| /** Delimiter joining `nodeKind` and `id` into one sibling-map key. Every `nodeKind` is a code-defined literal (kebab-case-style), so a null character can never appear in one. */ | ||
@@ -350,3 +473,2 @@ const SIBLING_KEY_DELIMITER = "\0"; | ||
| path, | ||
| reason: "not-found", | ||
| expected: node | ||
@@ -359,3 +481,2 @@ }, ...node.children().flatMap((c) => emitMissingSubtree(c, path))]; | ||
| path, | ||
| reason: "not-expected", | ||
| actual: node | ||
@@ -374,4 +495,50 @@ }, ...node.children().flatMap((c) => emitExtraSubtree(c, path))]; | ||
| function diffSchemas(expected, actual) { | ||
| return diffPair(expected, actual, []); | ||
| return mirrorDependsOnOntoIssues(diffPair(expected, actual, [])); | ||
| } | ||
| function schemaNodeRefKey(ref) { | ||
| return ref.map((step) => step.id).join(SIBLING_KEY_DELIMITER); | ||
| } | ||
| function issuePathKey(path) { | ||
| return path.join(SIBLING_KEY_DELIMITER); | ||
| } | ||
| function terminalNodeKind(issue) { | ||
| return (issue.expected ?? issue.actual)?.nodeKind; | ||
| } | ||
| /** | ||
| * Copies each issue's node's `dependsOn` refs onto the issue itself, as | ||
| * issue-to-issue path references. A ref is kept only when some emitted issue | ||
| * sits at that exact path AND that issue's node `nodeKind` matches the ref's | ||
| * last step — otherwise the ref is dropped (its target either didn't | ||
| * change, or was never part of either tree; either way the dependency is | ||
| * satisfied by reality, not by an operation this diff will produce). | ||
| * | ||
| * The path index is a multimap: two siblings may share an `id` under | ||
| * different `nodeKind`s (a role and a namespace named alike), so an id-path | ||
| * alone is ambiguous. The ref's terminal `nodeKind` disambiguates — the ref | ||
| * resolves only against a same-path issue whose own node carries that kind. | ||
| */ | ||
| function mirrorDependsOnOntoIssues(issues) { | ||
| const issuesByPath = /* @__PURE__ */ new Map(); | ||
| for (const issue of issues) { | ||
| const key = issuePathKey(issue.path); | ||
| const bucket = issuesByPath.get(key); | ||
| if (bucket === void 0) issuesByPath.set(key, [issue]); | ||
| else bucket.push(issue); | ||
| } | ||
| return issues.map((issue) => { | ||
| const refs = (issue.expected ?? issue.actual)?.dependsOn; | ||
| if (refs === void 0 || refs.length === 0) return issue; | ||
| const dependsOn = refs.flatMap((ref) => { | ||
| const lastStep = ref[ref.length - 1]; | ||
| if (lastStep === void 0) return []; | ||
| if (!(issuesByPath.get(schemaNodeRefKey(ref)) ?? []).some((c) => terminalNodeKind(c) === lastStep.nodeKind)) return []; | ||
| return [ref.map((step) => step.id)]; | ||
| }); | ||
| if (dependsOn.length === 0) return issue; | ||
| return { | ||
| ...issue, | ||
| dependsOn | ||
| }; | ||
| }); | ||
| } | ||
| function diffPair(expected, actual, parentPath) { | ||
@@ -382,3 +549,2 @@ const path = [...parentPath, expected.id]; | ||
| path, | ||
| reason: "not-equal", | ||
| expected, | ||
@@ -453,4 +619,4 @@ actual | ||
| //#endregion | ||
| export { APP_SPACE_ID, SchemaDiff, SchemaTreeNode, VERIFY_CODE_HASH_MISMATCH, VERIFY_CODE_MARKER_MISSING, VERIFY_CODE_SCHEMA_FAILURE, VERIFY_CODE_TARGET_MISMATCH, assembleAuthoringContributions, assembleControlMutationDefaults, assembleScalarTypeDescriptors, assertUniqueCodecOwner, buildExtensionLoadOrder, createControlStack, diffSchemas, dispositionForCategory, extractCodecLookup, extractCodecTypeImports, extractComponentIds, extractQueryOperationTypeImports, hasMigrations, hasOperationPreview, hasPslContractInfer, hasSchemaSubjectClassifier, hasSchemaView }; | ||
| export { APP_SPACE_ID, SchemaDiff, SchemaTreeNode, VERIFY_CODE_HASH_MISMATCH, VERIFY_CODE_MARKER_MISSING, VERIFY_CODE_SCHEMA_FAILURE, VERIFY_CODE_TARGET_MISMATCH, assembleAuthoringContributions, assembleControlMutationDefaults, assembleScalarTypeDescriptors, assertUniqueCodecOwner, buildExtensionLoadOrder, createControlStack, diffSchemas, dispositionForCategory, extractCodecLookup, extractCodecTypeImports, extractComponentIds, extractQueryOperationTypeImports, hasMigrations, hasOperationPreview, hasPslContractInfer, hasSchemaSubjectClassifier, hasSchemaView, issueOutcome, orderIssuesByDependencies }; | ||
| //# sourceMappingURL=control.mjs.map |
+7
-7
| { | ||
| "name": "@prisma-next/framework-components", | ||
| "version": "0.15.0-dev.2", | ||
| "version": "0.15.0-dev.5", | ||
| "license": "Apache-2.0", | ||
@@ -9,6 +9,6 @@ "type": "module", | ||
| "dependencies": { | ||
| "@prisma-next/contract": "0.15.0-dev.2", | ||
| "@prisma-next/operations": "0.15.0-dev.2", | ||
| "@prisma-next/ts-render": "0.15.0-dev.2", | ||
| "@prisma-next/utils": "0.15.0-dev.2", | ||
| "@prisma-next/contract": "0.15.0-dev.5", | ||
| "@prisma-next/operations": "0.15.0-dev.5", | ||
| "@prisma-next/ts-render": "0.15.0-dev.5", | ||
| "@prisma-next/utils": "0.15.0-dev.5", | ||
| "@standard-schema/spec": "^1.1.0", | ||
@@ -18,4 +18,4 @@ "arktype": "^2.2.2" | ||
| "devDependencies": { | ||
| "@prisma-next/tsconfig": "0.15.0-dev.2", | ||
| "@prisma-next/tsdown": "0.15.0-dev.2", | ||
| "@prisma-next/tsconfig": "0.15.0-dev.5", | ||
| "@prisma-next/tsdown": "0.15.0-dev.5", | ||
| "tsdown": "0.22.3", | ||
@@ -22,0 +22,0 @@ "typescript": "5.9.3", |
@@ -42,16 +42,2 @@ import type { SchemaDiffIssue } from './schema-diff'; | ||
| /** | ||
| * The three ways an actual state can fail an expectation: it contains a node | ||
| * that was not expected, lacks a node that was expected, or holds a node that | ||
| * is not equal to the expected one. Expected is the desired side and actual the | ||
| * current side of whatever comparison produced the issue — contract-vs-database, | ||
| * or contract-vs-contract in an offline plan — so the vocabulary is | ||
| * comparison-relative and never ambiguous about a base. | ||
| * | ||
| * The failure reason is a structural characteristic carried as a declared | ||
| * field: consumers filter on `reason`, never by enumerating kind strings or | ||
| * family-invented node codes. | ||
| */ | ||
| export type ExpectationFailureReason = 'not-expected' | 'not-found' | 'not-equal'; | ||
| /** | ||
| * The issue-based schema-verify result. `ok` derives from the FAILURE list | ||
@@ -58,0 +44,0 @@ * only: a verify passes exactly when `schema.issues` is empty, post |
@@ -1,2 +0,9 @@ | ||
| import type { ExpectationFailureReason } from './control-operation-results'; | ||
| /** | ||
| * A root-anchored chain of `(nodeKind, id)` steps identifying a node in a | ||
| * schema tree — the same vocabulary the differ pairs siblings with. Used by | ||
| * `DiffableNode.dependsOn` to name a node's structural prerequisites without | ||
| * holding a reference to the node itself (the target may live on the other | ||
| * diff side, or not exist at all). | ||
| */ | ||
| export type SchemaNodeRef = readonly { readonly nodeKind: string; readonly id: string }[]; | ||
@@ -6,11 +13,50 @@ export interface SchemaDiffIssue<TNode extends DiffableNode = DiffableNode> { | ||
| readonly path: readonly string[]; | ||
| /** Why the actual state fails the expectation. Consumers filter on this field. */ | ||
| readonly reason: ExpectationFailureReason; | ||
| /** The expected (desired-side) node, when available. Absent for `not-expected` issues. */ | ||
| /** The expected (desired-side) node, when available. Absent for a drop. */ | ||
| readonly expected?: TNode; | ||
| /** The actual (current-side) node, when available. Absent for `not-found` issues. */ | ||
| /** The actual (current-side) node, when available. Absent for a create. */ | ||
| readonly actual?: TNode; | ||
| /** | ||
| * Paths of the other in-diff issues this issue depends on. Mirrored by | ||
| * `diffSchemas` from the node's own `dependsOn` refs: a ref resolves to a | ||
| * path only when some emitted issue sits at that exact path with a | ||
| * matching `nodeKind` — a ref whose target produced no issue is dropped | ||
| * (the dependency is satisfied by reality). | ||
| */ | ||
| readonly dependsOn?: readonly (readonly string[])[]; | ||
| } | ||
| /** | ||
| * The three ways an actual state can fail an expectation: it lacks a node that | ||
| * was expected (`not-found`), holds a node that was not expected | ||
| * (`not-expected`), or holds a node not equal to the expected one | ||
| * (`not-equal`). Expected is the desired side, actual the current side, of | ||
| * whatever comparison produced the issue (contract-vs-database, or | ||
| * contract-vs-contract in an offline plan), so the vocabulary is | ||
| * comparison-relative and never ambiguous about a base — and reads cleanly for | ||
| * both the planner and `db verify`. | ||
| * | ||
| * This is the RETURN TYPE of the derived {@link issueOutcome} helper, not a | ||
| * stored field: presence is the single source of truth, and the outcome is | ||
| * computed from it on demand. | ||
| */ | ||
| export type ExpectationFailureReason = 'not-found' | 'not-expected' | 'not-equal'; | ||
| /** | ||
| * The outcome an issue represents, discriminated by presence rather than any | ||
| * stored field — the single source of truth every consumer reads. An issue | ||
| * always carries at least one side by construction; neither is a malformed | ||
| * issue and throws. | ||
| */ | ||
| export function issueOutcome(issue: SchemaDiffIssue): ExpectationFailureReason { | ||
| const hasExpected = issue.expected !== undefined; | ||
| const hasActual = issue.actual !== undefined; | ||
| if (hasExpected && hasActual) return 'not-equal'; | ||
| if (hasExpected) return 'not-found'; | ||
| if (hasActual) return 'not-expected'; | ||
| throw new Error( | ||
| `issueOutcome: issue at "${issue.path.join('/')}" carries neither an expected nor an actual node`, | ||
| ); | ||
| } | ||
| /** | ||
| * A node in the schema tree. Every node in the tree implements this interface. | ||
@@ -32,2 +78,9 @@ * | ||
| readonly nodeKind: string; | ||
| /** | ||
| * The nodes this node structurally depends on — resolved references to the | ||
| * prerequisites that must exist before it. Stamped by the derivation that | ||
| * holds the parent context; both the expected and the actual derivation | ||
| * stamp it by the same structural rules. Never compared by `isEqualTo`. | ||
| */ | ||
| readonly dependsOn?: readonly SchemaNodeRef[]; | ||
| isEqualTo(other: DiffableNode): boolean; | ||
@@ -57,3 +110,2 @@ children(): readonly DiffableNode[]; | ||
| path, | ||
| reason: 'not-found', | ||
| expected: node, | ||
@@ -70,3 +122,2 @@ }, | ||
| path, | ||
| reason: 'not-expected', | ||
| actual: node, | ||
@@ -91,5 +142,58 @@ }, | ||
| ): readonly SchemaDiffIssue[] { | ||
| return diffPair(expected, actual, []); | ||
| return mirrorDependsOnOntoIssues(diffPair(expected, actual, [])); | ||
| } | ||
| function schemaNodeRefKey(ref: SchemaNodeRef): string { | ||
| return ref.map((step) => step.id).join(SIBLING_KEY_DELIMITER); | ||
| } | ||
| function issuePathKey(path: readonly string[]): string { | ||
| return path.join(SIBLING_KEY_DELIMITER); | ||
| } | ||
| function terminalNodeKind(issue: SchemaDiffIssue): string | undefined { | ||
| return (issue.expected ?? issue.actual)?.nodeKind; | ||
| } | ||
| /** | ||
| * Copies each issue's node's `dependsOn` refs onto the issue itself, as | ||
| * issue-to-issue path references. A ref is kept only when some emitted issue | ||
| * sits at that exact path AND that issue's node `nodeKind` matches the ref's | ||
| * last step — otherwise the ref is dropped (its target either didn't | ||
| * change, or was never part of either tree; either way the dependency is | ||
| * satisfied by reality, not by an operation this diff will produce). | ||
| * | ||
| * The path index is a multimap: two siblings may share an `id` under | ||
| * different `nodeKind`s (a role and a namespace named alike), so an id-path | ||
| * alone is ambiguous. The ref's terminal `nodeKind` disambiguates — the ref | ||
| * resolves only against a same-path issue whose own node carries that kind. | ||
| */ | ||
| function mirrorDependsOnOntoIssues(issues: readonly SchemaDiffIssue[]): readonly SchemaDiffIssue[] { | ||
| const issuesByPath = new Map<string, SchemaDiffIssue[]>(); | ||
| for (const issue of issues) { | ||
| const key = issuePathKey(issue.path); | ||
| const bucket = issuesByPath.get(key); | ||
| if (bucket === undefined) issuesByPath.set(key, [issue]); | ||
| else bucket.push(issue); | ||
| } | ||
| return issues.map((issue) => { | ||
| const node = issue.expected ?? issue.actual; | ||
| const refs = node?.dependsOn; | ||
| if (refs === undefined || refs.length === 0) return issue; | ||
| const dependsOn = refs.flatMap((ref) => { | ||
| const lastStep = ref[ref.length - 1]; | ||
| if (lastStep === undefined) return []; | ||
| const candidates = issuesByPath.get(schemaNodeRefKey(ref)) ?? []; | ||
| const resolved = candidates.some((c) => terminalNodeKind(c) === lastStep.nodeKind); | ||
| if (!resolved) return []; | ||
| return [ref.map((step) => step.id)]; | ||
| }); | ||
| if (dependsOn.length === 0) return issue; | ||
| return { ...issue, dependsOn }; | ||
| }); | ||
| } | ||
| function diffPair( | ||
@@ -105,3 +209,2 @@ expected: DiffableNode, | ||
| path, | ||
| reason: 'not-equal', | ||
| expected, | ||
@@ -108,0 +211,0 @@ actual, |
@@ -63,3 +63,2 @@ export type { ImportRequirement } from '@prisma-next/ts-render'; | ||
| EmitContractResult, | ||
| ExpectationFailureReason, | ||
| IntrospectSchemaResult, | ||
@@ -107,5 +106,11 @@ OperationContext, | ||
| } from '../control/control-stack'; | ||
| export type { DiffableNode, SchemaDiffIssue } from '../control/schema-diff'; | ||
| export { diffSchemas, SchemaDiff } from '../control/schema-diff'; | ||
| export { orderIssuesByDependencies } from '../control/order-issues-by-dependencies'; | ||
| export type { | ||
| DiffableNode, | ||
| ExpectationFailureReason, | ||
| SchemaDiffIssue, | ||
| SchemaNodeRef, | ||
| } from '../control/schema-diff'; | ||
| export { diffSchemas, issueOutcome, SchemaDiff } from '../control/schema-diff'; | ||
| export type { | ||
| SchemaVerifier, | ||
@@ -112,0 +117,0 @@ SchemaVerifyOptions, |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
1103992
3.19%123
0.82%10474
3.91%+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed