@prisma-next/family-sql 0.3.0-dev.2 → 0.3.0-dev.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{exports/chunk-6P44BVZ4.js → chunk-F27CR6XZ.js} +12 -3
- package/dist/chunk-F27CR6XZ.js.map +1 -0
- package/dist/{exports/chunk-C3GKWCKA.js → chunk-SU7LN2UH.js} +1 -1
- package/dist/chunk-SU7LN2UH.js.map +1 -0
- package/dist/{exports/chunk-F252JMEU.js → chunk-XH2Y5NTD.js} +59 -116
- package/dist/chunk-XH2Y5NTD.js.map +1 -0
- package/dist/core/assembly.d.ts +25 -0
- package/dist/core/assembly.d.ts.map +1 -0
- package/dist/core/control-adapter.d.ts +42 -0
- package/dist/core/control-adapter.d.ts.map +1 -0
- package/dist/core/descriptor.d.ts +24 -0
- package/dist/core/descriptor.d.ts.map +1 -0
- package/dist/{exports/instance-DiZi2k_2.d.ts → core/instance.d.ts} +28 -15
- package/dist/core/instance.d.ts.map +1 -0
- package/dist/core/migrations/plan-helpers.d.ts +20 -0
- package/dist/core/migrations/plan-helpers.d.ts.map +1 -0
- package/dist/core/migrations/policies.d.ts +6 -0
- package/dist/core/migrations/policies.d.ts.map +1 -0
- package/dist/{exports/types-Bh7ftf0Q.d.ts → core/migrations/types.d.ts} +41 -36
- package/dist/core/migrations/types.d.ts.map +1 -0
- package/dist/core/runtime-descriptor.d.ts +19 -0
- package/dist/core/runtime-descriptor.d.ts.map +1 -0
- package/dist/core/runtime-instance.d.ts +54 -0
- package/dist/core/runtime-instance.d.ts.map +1 -0
- package/dist/core/schema-verify/verify-helpers.d.ts +96 -0
- package/dist/core/schema-verify/verify-helpers.d.ts.map +1 -0
- package/dist/core/schema-verify/verify-sql-schema.d.ts +45 -0
- package/dist/core/schema-verify/verify-sql-schema.d.ts.map +1 -0
- package/dist/core/verify.d.ts +39 -0
- package/dist/core/verify.d.ts.map +1 -0
- package/dist/exports/control-adapter.d.ts +2 -44
- package/dist/exports/control-adapter.d.ts.map +1 -0
- package/dist/exports/control.d.ts +8 -160
- package/dist/exports/control.d.ts.map +1 -0
- package/dist/exports/control.js +7 -7
- package/dist/exports/control.js.map +1 -1
- package/dist/exports/runtime.d.ts +3 -61
- package/dist/exports/runtime.d.ts.map +1 -0
- package/dist/exports/schema-verify.d.ts +8 -72
- package/dist/exports/schema-verify.d.ts.map +1 -0
- package/dist/exports/schema-verify.js +5 -1
- package/dist/exports/test-utils.d.ts +5 -31
- package/dist/exports/test-utils.d.ts.map +1 -0
- package/dist/exports/test-utils.js +3 -3
- package/dist/exports/verify.d.ts +2 -28
- package/dist/exports/verify.d.ts.map +1 -0
- package/dist/exports/verify.js +1 -1
- package/package.json +24 -25
- package/src/core/assembly.ts +117 -0
- package/src/core/control-adapter.ts +52 -0
- package/src/core/descriptor.ts +33 -0
- package/src/core/instance.ts +903 -0
- package/src/core/migrations/plan-helpers.ts +164 -0
- package/src/core/migrations/policies.ts +8 -0
- package/src/core/migrations/types.ts +380 -0
- package/src/core/runtime-descriptor.ts +45 -0
- package/src/core/runtime-instance.ts +144 -0
- package/src/core/schema-verify/verify-helpers.ts +532 -0
- package/src/core/schema-verify/verify-sql-schema.ts +588 -0
- package/src/core/verify.ts +177 -0
- package/src/exports/control-adapter.ts +1 -0
- package/src/exports/control.ts +56 -0
- package/src/exports/runtime.ts +7 -0
- package/src/exports/schema-verify.ts +16 -0
- package/src/exports/test-utils.ts +11 -0
- package/src/exports/verify.ts +1 -0
- package/dist/exports/chunk-6P44BVZ4.js.map +0 -1
- package/dist/exports/chunk-C3GKWCKA.js.map +0 -1
- package/dist/exports/chunk-F252JMEU.js.map +0 -1
|
@@ -1,75 +1,11 @@
|
|
|
1
|
-
import { SchemaIssue, SchemaVerificationNode, OperationContext, VerifyDatabaseSchemaResult } from '@prisma-next/core-control-plane/types';
|
|
2
|
-
import { SqlSchemaIR } from '@prisma-next/sql-schema-ir/types';
|
|
3
|
-
import { i as ComponentDatabaseDependency } from './types-Bh7ftf0Q.js';
|
|
4
|
-
import { TargetBoundComponentDescriptor } from '@prisma-next/contract/framework-components';
|
|
5
|
-
import { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';
|
|
6
|
-
import '@prisma-next/utils/result';
|
|
7
|
-
import './instance-DiZi2k_2.js';
|
|
8
|
-
import '@prisma-next/contract/ir';
|
|
9
|
-
import '@prisma-next/contract/pack-manifest-types';
|
|
10
|
-
import '@prisma-next/contract/types';
|
|
11
|
-
import '@prisma-next/core-control-plane/schema-view';
|
|
12
|
-
import '@prisma-next/operations';
|
|
13
|
-
import '@prisma-next/sql-operations';
|
|
14
|
-
|
|
15
1
|
/**
|
|
16
|
-
* Pure
|
|
17
|
-
* These functions verify schema IR against contract requirements.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Compares two arrays of strings for equality (order-sensitive).
|
|
22
|
-
*/
|
|
23
|
-
declare function arraysEqual(a: readonly string[], b: readonly string[]): boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Verifies database dependencies are installed using component-owned verification hooks.
|
|
26
|
-
* Each dependency provides a pure verifyDatabaseDependencyInstalled function that checks
|
|
27
|
-
* whether the dependency is satisfied based on the in-memory schema IR (no DB I/O).
|
|
28
|
-
*
|
|
29
|
-
* Returns verification nodes for the tree.
|
|
30
|
-
*/
|
|
31
|
-
declare function verifyDatabaseDependencies(dependencies: ReadonlyArray<ComponentDatabaseDependency<unknown>>, schema: SqlSchemaIR, issues: SchemaIssue[]): SchemaVerificationNode[];
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Pure SQL schema verification function.
|
|
35
|
-
*
|
|
36
|
-
* This module provides a pure function that verifies a SqlSchemaIR against
|
|
37
|
-
* a SqlContract without requiring a database connection. It can be reused
|
|
38
|
-
* by migration planners and other tools that need to compare schema states.
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Options for the pure schema verification function.
|
|
43
|
-
*/
|
|
44
|
-
interface VerifySqlSchemaOptions {
|
|
45
|
-
/** The validated SQL contract to verify against */
|
|
46
|
-
readonly contract: SqlContract<SqlStorage>;
|
|
47
|
-
/** The schema IR from introspection (or another source) */
|
|
48
|
-
readonly schema: SqlSchemaIR;
|
|
49
|
-
/** Whether to run in strict mode (detects extra tables/columns) */
|
|
50
|
-
readonly strict: boolean;
|
|
51
|
-
/** Optional operation context for metadata */
|
|
52
|
-
readonly context?: OperationContext;
|
|
53
|
-
/** Type metadata registry for codec consistency warnings */
|
|
54
|
-
readonly typeMetadataRegistry: ReadonlyMap<string, {
|
|
55
|
-
nativeType?: string;
|
|
56
|
-
}>;
|
|
57
|
-
/**
|
|
58
|
-
* Active framework components participating in this composition.
|
|
59
|
-
* All components must have matching familyId ('sql') and targetId.
|
|
60
|
-
*/
|
|
61
|
-
readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'sql', string>>;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Verifies that a SqlSchemaIR matches a SqlContract.
|
|
65
|
-
*
|
|
66
|
-
* This is a pure function that does NOT perform any database I/O.
|
|
67
|
-
* It takes an already-introspected schema IR and compares it against
|
|
68
|
-
* the contract requirements.
|
|
2
|
+
* Pure schema verification exports.
|
|
69
3
|
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
4
|
+
* This module exports the pure schema verification function that can be used
|
|
5
|
+
* without a database connection. It's suitable for migration planning and
|
|
6
|
+
* other tools that need to compare schema states.
|
|
72
7
|
*/
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
export {
|
|
8
|
+
export { arraysEqual, isIndexSatisfied, isUniqueConstraintSatisfied, verifyDatabaseDependencies, } from '../core/schema-verify/verify-helpers';
|
|
9
|
+
export type { VerifySqlSchemaOptions } from '../core/schema-verify/verify-sql-schema';
|
|
10
|
+
export { verifySqlSchema } from '../core/schema-verify/verify-sql-schema';
|
|
11
|
+
//# sourceMappingURL=schema-verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-verify.d.ts","sourceRoot":"","sources":["../../src/exports/schema-verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
arraysEqual,
|
|
3
|
+
isIndexSatisfied,
|
|
4
|
+
isUniqueConstraintSatisfied,
|
|
3
5
|
verifyDatabaseDependencies,
|
|
4
6
|
verifySqlSchema
|
|
5
|
-
} from "
|
|
7
|
+
} from "../chunk-XH2Y5NTD.js";
|
|
6
8
|
export {
|
|
7
9
|
arraysEqual,
|
|
10
|
+
isIndexSatisfied,
|
|
11
|
+
isUniqueConstraintSatisfied,
|
|
8
12
|
verifyDatabaseDependencies,
|
|
9
13
|
verifySqlSchema
|
|
10
14
|
};
|
|
@@ -1,33 +1,7 @@
|
|
|
1
|
-
import { OperationManifest } from '@prisma-next/contract/pack-manifest-types';
|
|
2
|
-
import { TypesImportSpec } from '@prisma-next/contract/types';
|
|
3
|
-
import { ControlTargetDescriptor, ControlAdapterDescriptor, ControlExtensionDescriptor } from '@prisma-next/core-control-plane/types';
|
|
4
|
-
import { OperationSignature, OperationRegistry } from '@prisma-next/operations';
|
|
5
|
-
export { c as convertOperationManifest } from './instance-DiZi2k_2.js';
|
|
6
|
-
import '@prisma-next/contract/framework-components';
|
|
7
|
-
import '@prisma-next/contract/ir';
|
|
8
|
-
import '@prisma-next/core-control-plane/schema-view';
|
|
9
|
-
import '@prisma-next/sql-operations';
|
|
10
|
-
import '@prisma-next/sql-schema-ir/types';
|
|
11
|
-
|
|
12
1
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* conversion function, and registers them in a new registry.
|
|
2
|
+
* Test utilities for working with component descriptors.
|
|
3
|
+
* These functions operate on descriptors directly, used in tests and integration tests.
|
|
16
4
|
*/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*/
|
|
21
|
-
declare function extractCodecTypeImports(descriptors: ReadonlyArray<ControlTargetDescriptor<'sql', string> | ControlAdapterDescriptor<'sql', string> | ControlExtensionDescriptor<'sql', string>>): ReadonlyArray<TypesImportSpec>;
|
|
22
|
-
/**
|
|
23
|
-
* Extracts operation type imports from descriptors for contract.d.ts generation.
|
|
24
|
-
*/
|
|
25
|
-
declare function extractOperationTypeImports(descriptors: ReadonlyArray<ControlTargetDescriptor<'sql', string> | ControlAdapterDescriptor<'sql', string> | ControlExtensionDescriptor<'sql', string>>): ReadonlyArray<TypesImportSpec>;
|
|
26
|
-
/**
|
|
27
|
-
* Extracts extension IDs from descriptors in deterministic order:
|
|
28
|
-
* [adapter.id, target.id, ...extensions.map(e => e.id)]
|
|
29
|
-
* Deduplicates while preserving stable order.
|
|
30
|
-
*/
|
|
31
|
-
declare function extractExtensionIds(adapter: ControlAdapterDescriptor<'sql', string>, target: ControlTargetDescriptor<'sql', string>, extensions: ReadonlyArray<ControlExtensionDescriptor<'sql', string>>): ReadonlyArray<string>;
|
|
32
|
-
|
|
33
|
-
export { assembleOperationRegistry, extractCodecTypeImports, extractExtensionIds, extractOperationTypeImports };
|
|
5
|
+
export { assembleOperationRegistry, extractCodecTypeImports, extractExtensionIds, extractOperationTypeImports, } from '../core/assembly';
|
|
6
|
+
export { convertOperationManifest } from '../core/instance';
|
|
7
|
+
//# sourceMappingURL=test-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/exports/test-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
extractCodecTypeImports,
|
|
5
5
|
extractExtensionIds,
|
|
6
6
|
extractOperationTypeImports
|
|
7
|
-
} from "
|
|
8
|
-
import "
|
|
9
|
-
import "
|
|
7
|
+
} from "../chunk-F27CR6XZ.js";
|
|
8
|
+
import "../chunk-SU7LN2UH.js";
|
|
9
|
+
import "../chunk-XH2Y5NTD.js";
|
|
10
10
|
export {
|
|
11
11
|
assembleOperationRegistry,
|
|
12
12
|
convertOperationManifest,
|
package/dist/exports/verify.d.ts
CHANGED
|
@@ -1,28 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Parses a contract marker row from database query result.
|
|
6
|
-
* This is SQL-specific parsing logic (handles SQL row structure with snake_case columns).
|
|
7
|
-
*/
|
|
8
|
-
declare function parseContractMarkerRow(row: unknown): ContractMarkerRecord;
|
|
9
|
-
/**
|
|
10
|
-
* Returns the SQL statement to read the contract marker.
|
|
11
|
-
* This is a migration-plane helper (no runtime imports).
|
|
12
|
-
* @internal - Used internally by readMarker(). Prefer readMarker() for Control Plane usage.
|
|
13
|
-
*/
|
|
14
|
-
declare function readMarkerSql(): {
|
|
15
|
-
readonly sql: string;
|
|
16
|
-
readonly params: readonly unknown[];
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Reads the contract marker from the database using the provided driver.
|
|
20
|
-
* Returns the parsed marker record or null if no marker is found.
|
|
21
|
-
* This abstracts SQL-specific details from the Control Plane.
|
|
22
|
-
*
|
|
23
|
-
* @param driver - ControlDriverInstance instance for executing queries
|
|
24
|
-
* @returns Promise resolving to ContractMarkerRecord or null if marker not found
|
|
25
|
-
*/
|
|
26
|
-
declare function readMarker(driver: ControlDriverInstance<'sql', string>): Promise<ContractMarkerRecord | null>;
|
|
27
|
-
|
|
28
|
-
export { parseContractMarkerRow, readMarker, readMarkerSql };
|
|
1
|
+
export { parseContractMarkerRow, readMarker, readMarkerSql } from '../core/verify';
|
|
2
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/exports/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/exports/verify.js
CHANGED
package/package.json
CHANGED
|
@@ -1,37 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/family-sql",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
3
|
+
"version": "0.3.0-dev.21",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "SQL family descriptor for Prisma Next",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"arktype": "^2.0.0",
|
|
9
|
-
"@prisma-next/contract": "0.3.0-dev.
|
|
10
|
-
"@prisma-next/
|
|
11
|
-
"@prisma-next/
|
|
12
|
-
"@prisma-next/
|
|
13
|
-
"@prisma-next/
|
|
14
|
-
"@prisma-next/
|
|
15
|
-
"@prisma-next/sql-contract": "0.3.0-dev.
|
|
16
|
-
"@prisma-next/sql-
|
|
17
|
-
"@prisma-next/sql-
|
|
18
|
-
"@prisma-next/sql-
|
|
19
|
-
"@prisma-next/sql-
|
|
20
|
-
"@prisma-next/
|
|
21
|
-
"@prisma-next/
|
|
22
|
-
"@prisma-next/
|
|
9
|
+
"@prisma-next/contract": "0.3.0-dev.21",
|
|
10
|
+
"@prisma-next/cli": "0.3.0-dev.21",
|
|
11
|
+
"@prisma-next/core-control-plane": "0.3.0-dev.21",
|
|
12
|
+
"@prisma-next/core-execution-plane": "0.3.0-dev.21",
|
|
13
|
+
"@prisma-next/operations": "0.3.0-dev.21",
|
|
14
|
+
"@prisma-next/runtime-executor": "0.3.0-dev.21",
|
|
15
|
+
"@prisma-next/sql-contract": "0.3.0-dev.21",
|
|
16
|
+
"@prisma-next/sql-contract-emitter": "0.3.0-dev.21",
|
|
17
|
+
"@prisma-next/sql-contract-ts": "0.3.0-dev.21",
|
|
18
|
+
"@prisma-next/sql-operations": "0.3.0-dev.21",
|
|
19
|
+
"@prisma-next/sql-relational-core": "0.3.0-dev.21",
|
|
20
|
+
"@prisma-next/sql-schema-ir": "0.3.0-dev.21",
|
|
21
|
+
"@prisma-next/sql-runtime": "0.3.0-dev.21",
|
|
22
|
+
"@prisma-next/utils": "0.3.0-dev.21"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"vitest": "^4.0.16",
|
|
30
|
-
"@prisma-next/driver-postgres": "0.3.0-dev.2",
|
|
25
|
+
"tsup": "8.5.1",
|
|
26
|
+
"typescript": "5.9.3",
|
|
27
|
+
"vitest": "4.0.16",
|
|
28
|
+
"@prisma-next/driver-postgres": "0.3.0-dev.21",
|
|
31
29
|
"@prisma-next/test-utils": "0.0.1"
|
|
32
30
|
},
|
|
33
31
|
"files": [
|
|
34
|
-
"dist"
|
|
32
|
+
"dist",
|
|
33
|
+
"src"
|
|
35
34
|
],
|
|
36
35
|
"exports": {
|
|
37
36
|
"./control": {
|
|
@@ -60,11 +59,11 @@
|
|
|
60
59
|
}
|
|
61
60
|
},
|
|
62
61
|
"scripts": {
|
|
63
|
-
"build": "tsup --config tsup.config.ts",
|
|
62
|
+
"build": "tsup --config tsup.config.ts && tsc --project tsconfig.build.json",
|
|
64
63
|
"test": "vitest run",
|
|
65
64
|
"test:coverage": "vitest run --coverage",
|
|
66
65
|
"typecheck": "tsc --project tsconfig.json --noEmit",
|
|
67
|
-
"lint": "biome check . --
|
|
68
|
-
"clean": "
|
|
66
|
+
"lint": "biome check . --error-on-warnings",
|
|
67
|
+
"clean": "rm -rf dist coverage .tmp-output"
|
|
69
68
|
}
|
|
70
69
|
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { OperationManifest } from '@prisma-next/contract/pack-manifest-types';
|
|
2
|
+
import type { TypesImportSpec } from '@prisma-next/contract/types';
|
|
3
|
+
import type {
|
|
4
|
+
ControlAdapterDescriptor,
|
|
5
|
+
ControlExtensionDescriptor,
|
|
6
|
+
ControlTargetDescriptor,
|
|
7
|
+
} from '@prisma-next/core-control-plane/types';
|
|
8
|
+
import type { OperationRegistry, OperationSignature } from '@prisma-next/operations';
|
|
9
|
+
import { createOperationRegistry } from '@prisma-next/operations';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Assembles an operation registry from descriptors (adapter, target, extensions).
|
|
13
|
+
* Loops over descriptors, extracts operations, converts them using the provided
|
|
14
|
+
* conversion function, and registers them in a new registry.
|
|
15
|
+
*/
|
|
16
|
+
export function assembleOperationRegistry(
|
|
17
|
+
descriptors: ReadonlyArray<
|
|
18
|
+
| ControlTargetDescriptor<'sql', string>
|
|
19
|
+
| ControlAdapterDescriptor<'sql', string>
|
|
20
|
+
| ControlExtensionDescriptor<'sql', string>
|
|
21
|
+
>,
|
|
22
|
+
convertOperationManifest: (manifest: OperationManifest) => OperationSignature,
|
|
23
|
+
): OperationRegistry {
|
|
24
|
+
const registry = createOperationRegistry();
|
|
25
|
+
|
|
26
|
+
for (const descriptor of descriptors) {
|
|
27
|
+
const operations = descriptor.operations ?? [];
|
|
28
|
+
for (const operationManifest of operations as ReadonlyArray<OperationManifest>) {
|
|
29
|
+
const signature = convertOperationManifest(operationManifest);
|
|
30
|
+
registry.register(signature);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return registry;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Extracts codec type imports from descriptors for contract.d.ts generation.
|
|
39
|
+
*/
|
|
40
|
+
export function extractCodecTypeImports(
|
|
41
|
+
descriptors: ReadonlyArray<
|
|
42
|
+
| ControlTargetDescriptor<'sql', string>
|
|
43
|
+
| ControlAdapterDescriptor<'sql', string>
|
|
44
|
+
| ControlExtensionDescriptor<'sql', string>
|
|
45
|
+
>,
|
|
46
|
+
): ReadonlyArray<TypesImportSpec> {
|
|
47
|
+
const imports: TypesImportSpec[] = [];
|
|
48
|
+
|
|
49
|
+
for (const descriptor of descriptors) {
|
|
50
|
+
const types = descriptor.types;
|
|
51
|
+
const codecTypes = types?.codecTypes;
|
|
52
|
+
if (codecTypes?.import) {
|
|
53
|
+
imports.push(codecTypes.import);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return imports;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Extracts operation type imports from descriptors for contract.d.ts generation.
|
|
62
|
+
*/
|
|
63
|
+
export function extractOperationTypeImports(
|
|
64
|
+
descriptors: ReadonlyArray<
|
|
65
|
+
| ControlTargetDescriptor<'sql', string>
|
|
66
|
+
| ControlAdapterDescriptor<'sql', string>
|
|
67
|
+
| ControlExtensionDescriptor<'sql', string>
|
|
68
|
+
>,
|
|
69
|
+
): ReadonlyArray<TypesImportSpec> {
|
|
70
|
+
const imports: TypesImportSpec[] = [];
|
|
71
|
+
|
|
72
|
+
for (const descriptor of descriptors) {
|
|
73
|
+
const types = descriptor.types;
|
|
74
|
+
const operationTypes = types?.operationTypes;
|
|
75
|
+
if (operationTypes?.import) {
|
|
76
|
+
imports.push(operationTypes.import);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return imports;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Extracts extension IDs from descriptors in deterministic order:
|
|
85
|
+
* [adapter.id, target.id, ...extensions.map(e => e.id)]
|
|
86
|
+
* Deduplicates while preserving stable order.
|
|
87
|
+
*/
|
|
88
|
+
export function extractExtensionIds(
|
|
89
|
+
adapter: ControlAdapterDescriptor<'sql', string>,
|
|
90
|
+
target: ControlTargetDescriptor<'sql', string>,
|
|
91
|
+
extensions: ReadonlyArray<ControlExtensionDescriptor<'sql', string>>,
|
|
92
|
+
): ReadonlyArray<string> {
|
|
93
|
+
const ids: string[] = [];
|
|
94
|
+
const seen = new Set<string>();
|
|
95
|
+
|
|
96
|
+
// Add adapter first
|
|
97
|
+
if (!seen.has(adapter.id)) {
|
|
98
|
+
ids.push(adapter.id);
|
|
99
|
+
seen.add(adapter.id);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Add target second
|
|
103
|
+
if (!seen.has(target.id)) {
|
|
104
|
+
ids.push(target.id);
|
|
105
|
+
seen.add(target.id);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Add extensions in order
|
|
109
|
+
for (const ext of extensions) {
|
|
110
|
+
if (!seen.has(ext.id)) {
|
|
111
|
+
ids.push(ext.id);
|
|
112
|
+
seen.add(ext.id);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return ids;
|
|
117
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ControlAdapterInstance,
|
|
3
|
+
ControlDriverInstance,
|
|
4
|
+
} from '@prisma-next/core-control-plane/types';
|
|
5
|
+
import type { SqlSchemaIR } from '@prisma-next/sql-schema-ir/types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* SQL control adapter interface for control-plane operations.
|
|
9
|
+
* Implemented by target-specific adapters (e.g., Postgres, MySQL).
|
|
10
|
+
*
|
|
11
|
+
* @template TTarget - The target ID (e.g., 'postgres', 'mysql')
|
|
12
|
+
*/
|
|
13
|
+
export interface SqlControlAdapter<TTarget extends string = string>
|
|
14
|
+
extends ControlAdapterInstance<'sql', TTarget> {
|
|
15
|
+
/**
|
|
16
|
+
* The target ID this adapter implements.
|
|
17
|
+
* Used for type tracking and runtime validation.
|
|
18
|
+
* @deprecated Use targetId from ControlAdapterInstance instead
|
|
19
|
+
*/
|
|
20
|
+
readonly target: TTarget;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Introspects a database schema and returns a raw SqlSchemaIR.
|
|
24
|
+
*
|
|
25
|
+
* This is a pure schema discovery operation that queries the database catalog
|
|
26
|
+
* and returns the schema structure without type mapping or contract enrichment.
|
|
27
|
+
* Type mapping and enrichment are handled separately by enrichment helpers.
|
|
28
|
+
*
|
|
29
|
+
* @param driver - ControlDriverInstance instance for executing queries (target-specific)
|
|
30
|
+
* @param contractIR - Optional contract IR for contract-guided introspection (filtering, optimization)
|
|
31
|
+
* @param schema - Schema name to introspect (defaults to 'public')
|
|
32
|
+
* @returns Promise resolving to SqlSchemaIR representing the live database schema
|
|
33
|
+
*/
|
|
34
|
+
introspect(
|
|
35
|
+
driver: ControlDriverInstance<'sql', TTarget>,
|
|
36
|
+
contractIR?: unknown,
|
|
37
|
+
schema?: string,
|
|
38
|
+
): Promise<SqlSchemaIR>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* SQL control adapter descriptor interface.
|
|
43
|
+
* Provides a factory method to create control adapter instances.
|
|
44
|
+
*
|
|
45
|
+
* @template TTarget - The target ID (e.g., 'postgres', 'mysql')
|
|
46
|
+
*/
|
|
47
|
+
export interface SqlControlAdapterDescriptor<TTarget extends string = string> {
|
|
48
|
+
/**
|
|
49
|
+
* Creates a SQL control adapter instance for control-plane operations.
|
|
50
|
+
*/
|
|
51
|
+
create(): SqlControlAdapter<TTarget>;
|
|
52
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ControlFamilyDescriptor,
|
|
3
|
+
ControlPlaneStack,
|
|
4
|
+
} from '@prisma-next/core-control-plane/types';
|
|
5
|
+
import { sqlTargetFamilyHook } from '@prisma-next/sql-contract-emitter';
|
|
6
|
+
import { createSqlFamilyInstance, type SqlControlFamilyInstance } from './instance';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* SQL family descriptor implementation.
|
|
10
|
+
* Provides the SQL family hook and factory method.
|
|
11
|
+
*/
|
|
12
|
+
export class SqlFamilyDescriptor
|
|
13
|
+
implements ControlFamilyDescriptor<'sql', SqlControlFamilyInstance>
|
|
14
|
+
{
|
|
15
|
+
readonly kind = 'family' as const;
|
|
16
|
+
readonly id = 'sql';
|
|
17
|
+
readonly familyId = 'sql' as const;
|
|
18
|
+
readonly version = '0.0.1';
|
|
19
|
+
readonly hook = sqlTargetFamilyHook;
|
|
20
|
+
|
|
21
|
+
create<TTargetId extends string>(
|
|
22
|
+
stack: ControlPlaneStack<'sql', TTargetId>,
|
|
23
|
+
): SqlControlFamilyInstance {
|
|
24
|
+
// Note: driver is not passed here because SqlFamilyInstance operations
|
|
25
|
+
// (validate, emit, etc.) don't require DB connectivity. Commands that
|
|
26
|
+
// need the driver (verify, introspect) get it directly from the stack.
|
|
27
|
+
return createSqlFamilyInstance({
|
|
28
|
+
target: stack.target,
|
|
29
|
+
adapter: stack.adapter,
|
|
30
|
+
extensionPacks: stack.extensionPacks,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|