🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@prisma-next/framework-components

Package Overview
Dependencies
Maintainers
4
Versions
503
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@prisma-next/framework-components - npm Package Compare versions

Comparing version
0.15.0-dev.2
to
0.15.0-dev.5
+155
src/control/order-issues-by-dependencies.ts
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

@@ -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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"}

@@ -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
{
"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