@prisma-next/family-sql 0.3.0-pr.94.2 → 0.3.0-pr.95.2

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.
Files changed (87) hide show
  1. package/dist/chunk-H7CGY6OH.js +611 -0
  2. package/dist/chunk-H7CGY6OH.js.map +1 -0
  3. package/dist/chunk-SU7LN2UH.js +96 -0
  4. package/dist/chunk-SU7LN2UH.js.map +1 -0
  5. package/dist/chunk-XH2Y5NTD.js +715 -0
  6. package/dist/chunk-XH2Y5NTD.js.map +1 -0
  7. package/dist/core/assembly.d.ts +36 -0
  8. package/dist/core/assembly.d.ts.map +1 -0
  9. package/dist/core/control-adapter.d.ts +42 -0
  10. package/dist/core/control-adapter.d.ts.map +1 -0
  11. package/dist/core/descriptor.d.ts +25 -0
  12. package/dist/core/descriptor.d.ts.map +1 -0
  13. package/dist/core/instance.d.ts +140 -0
  14. package/dist/core/instance.d.ts.map +1 -0
  15. package/dist/core/migrations/plan-helpers.d.ts +20 -0
  16. package/dist/core/migrations/plan-helpers.d.ts.map +1 -0
  17. package/dist/core/migrations/policies.d.ts +6 -0
  18. package/dist/core/migrations/policies.d.ts.map +1 -0
  19. package/dist/core/migrations/types.d.ts +280 -0
  20. package/dist/core/migrations/types.d.ts.map +1 -0
  21. package/dist/core/runtime-descriptor.d.ts +19 -0
  22. package/dist/core/runtime-descriptor.d.ts.map +1 -0
  23. package/dist/core/runtime-instance.d.ts +54 -0
  24. package/dist/core/runtime-instance.d.ts.map +1 -0
  25. package/dist/core/schema-verify/verify-helpers.d.ts +96 -0
  26. package/dist/core/schema-verify/verify-helpers.d.ts.map +1 -0
  27. package/dist/core/schema-verify/verify-sql-schema.d.ts +45 -0
  28. package/dist/core/schema-verify/verify-sql-schema.d.ts.map +1 -0
  29. package/dist/core/verify.d.ts +39 -0
  30. package/dist/core/verify.d.ts.map +1 -0
  31. package/dist/exports/control-adapter.d.ts +2 -0
  32. package/dist/exports/control-adapter.d.ts.map +1 -0
  33. package/dist/exports/control-adapter.js +1 -0
  34. package/dist/exports/control-adapter.js.map +1 -0
  35. package/dist/exports/control.d.ts +13 -0
  36. package/dist/exports/control.d.ts.map +1 -0
  37. package/dist/exports/control.js +149 -0
  38. package/dist/exports/control.js.map +1 -0
  39. package/dist/exports/runtime.d.ts +8 -0
  40. package/dist/exports/runtime.d.ts.map +1 -0
  41. package/dist/exports/runtime.js +64 -0
  42. package/dist/exports/runtime.js.map +1 -0
  43. package/dist/exports/schema-verify.d.ts +11 -0
  44. package/dist/exports/schema-verify.d.ts.map +1 -0
  45. package/dist/exports/schema-verify.js +15 -0
  46. package/dist/exports/schema-verify.js.map +1 -0
  47. package/dist/exports/test-utils.d.ts +7 -0
  48. package/dist/exports/test-utils.d.ts.map +1 -0
  49. package/dist/exports/test-utils.js +17 -0
  50. package/dist/exports/test-utils.js.map +1 -0
  51. package/dist/exports/verify.d.ts +2 -0
  52. package/dist/exports/verify.d.ts.map +1 -0
  53. package/dist/exports/verify.js +11 -0
  54. package/dist/exports/verify.js.map +1 -0
  55. package/package.json +44 -31
  56. package/src/core/assembly.ts +48 -0
  57. package/src/core/instance.ts +4 -1
  58. package/dist/control-adapter.d.mts +0 -47
  59. package/dist/control-adapter.d.mts.map +0 -1
  60. package/dist/control-adapter.mjs +0 -1
  61. package/dist/control.d.mts +0 -65
  62. package/dist/control.d.mts.map +0 -1
  63. package/dist/control.mjs +0 -136
  64. package/dist/control.mjs.map +0 -1
  65. package/dist/instance-B_PdDN4y.mjs +0 -525
  66. package/dist/instance-B_PdDN4y.mjs.map +0 -1
  67. package/dist/instance-wm4TrZN0.d.mts +0 -130
  68. package/dist/instance-wm4TrZN0.d.mts.map +0 -1
  69. package/dist/runtime.d.mts +0 -70
  70. package/dist/runtime.d.mts.map +0 -1
  71. package/dist/runtime.mjs +0 -74
  72. package/dist/runtime.mjs.map +0 -1
  73. package/dist/schema-verify.d.mts +0 -85
  74. package/dist/schema-verify.d.mts.map +0 -1
  75. package/dist/schema-verify.mjs +0 -3
  76. package/dist/test-utils.d.mts +0 -31
  77. package/dist/test-utils.d.mts.map +0 -1
  78. package/dist/test-utils.mjs +0 -5
  79. package/dist/types-D5CPT9N4.d.mts +0 -270
  80. package/dist/types-D5CPT9N4.d.mts.map +0 -1
  81. package/dist/verify-DhFytkFC.mjs +0 -108
  82. package/dist/verify-DhFytkFC.mjs.map +0 -1
  83. package/dist/verify-sql-schema-BnLVoeWI.mjs +0 -686
  84. package/dist/verify-sql-schema-BnLVoeWI.mjs.map +0 -1
  85. package/dist/verify.d.mts +0 -31
  86. package/dist/verify.d.mts.map +0 -1
  87. package/dist/verify.mjs +0 -3
@@ -0,0 +1,149 @@
1
+ import {
2
+ createSqlFamilyInstance
3
+ } from "../chunk-H7CGY6OH.js";
4
+ import "../chunk-SU7LN2UH.js";
5
+ import "../chunk-XH2Y5NTD.js";
6
+
7
+ // src/core/descriptor.ts
8
+ import { sqlTargetFamilyHook } from "@prisma-next/sql-contract-emitter";
9
+ var SqlFamilyDescriptor = class {
10
+ kind = "family";
11
+ id = "sql";
12
+ familyId = "sql";
13
+ version = "0.0.1";
14
+ hook = sqlTargetFamilyHook;
15
+ create(stack) {
16
+ return createSqlFamilyInstance({
17
+ target: stack.target,
18
+ adapter: stack.adapter,
19
+ extensionPacks: stack.extensionPacks
20
+ });
21
+ }
22
+ };
23
+
24
+ // src/core/migrations/plan-helpers.ts
25
+ import { notOk, ok } from "@prisma-next/utils/result";
26
+ var readOnlyEmptyObject = Object.freeze({});
27
+ function cloneRecord(value) {
28
+ if (value === readOnlyEmptyObject) {
29
+ return value;
30
+ }
31
+ return Object.freeze({ ...value });
32
+ }
33
+ function freezeSteps(steps) {
34
+ if (steps.length === 0) {
35
+ return Object.freeze([]);
36
+ }
37
+ return Object.freeze(
38
+ steps.map(
39
+ (step) => Object.freeze({
40
+ description: step.description,
41
+ sql: step.sql,
42
+ ...step.meta ? { meta: cloneRecord(step.meta) } : {}
43
+ })
44
+ )
45
+ );
46
+ }
47
+ function freezeDetailsValue(value) {
48
+ if (value === null || value === void 0) {
49
+ return value;
50
+ }
51
+ if (typeof value !== "object") {
52
+ return value;
53
+ }
54
+ if (Array.isArray(value)) {
55
+ return Object.freeze([...value]);
56
+ }
57
+ return Object.freeze({ ...value });
58
+ }
59
+ function freezeTargetDetails(target) {
60
+ return Object.freeze({
61
+ id: target.id,
62
+ ...target.details !== void 0 ? { details: freezeDetailsValue(target.details) } : {}
63
+ });
64
+ }
65
+ function freezeOperation(operation) {
66
+ return Object.freeze({
67
+ id: operation.id,
68
+ label: operation.label,
69
+ ...operation.summary ? { summary: operation.summary } : {},
70
+ operationClass: operation.operationClass,
71
+ target: freezeTargetDetails(operation.target),
72
+ precheck: freezeSteps(operation.precheck),
73
+ execute: freezeSteps(operation.execute),
74
+ postcheck: freezeSteps(operation.postcheck),
75
+ ...operation.meta ? { meta: cloneRecord(operation.meta) } : {}
76
+ });
77
+ }
78
+ function freezeOperations(operations) {
79
+ if (operations.length === 0) {
80
+ return Object.freeze([]);
81
+ }
82
+ return Object.freeze(operations.map((operation) => freezeOperation(operation)));
83
+ }
84
+ function createMigrationPlan(options) {
85
+ return Object.freeze({
86
+ targetId: options.targetId,
87
+ ...options.origin !== void 0 ? { origin: options.origin ? Object.freeze({ ...options.origin }) : null } : {},
88
+ destination: Object.freeze({ ...options.destination }),
89
+ operations: freezeOperations(options.operations),
90
+ ...options.meta ? { meta: cloneRecord(options.meta) } : {}
91
+ });
92
+ }
93
+ function plannerSuccess(plan) {
94
+ return Object.freeze({
95
+ kind: "success",
96
+ plan
97
+ });
98
+ }
99
+ function plannerFailure(conflicts) {
100
+ return Object.freeze({
101
+ kind: "failure",
102
+ conflicts: Object.freeze(
103
+ conflicts.map(
104
+ (conflict) => Object.freeze({
105
+ kind: conflict.kind,
106
+ summary: conflict.summary,
107
+ ...conflict.why ? { why: conflict.why } : {},
108
+ ...conflict.location ? { location: Object.freeze({ ...conflict.location }) } : {},
109
+ ...conflict.meta ? { meta: cloneRecord(conflict.meta) } : {}
110
+ })
111
+ )
112
+ )
113
+ });
114
+ }
115
+ function runnerSuccess(value) {
116
+ return ok(
117
+ Object.freeze({
118
+ operationsPlanned: value.operationsPlanned,
119
+ operationsExecuted: value.operationsExecuted
120
+ })
121
+ );
122
+ }
123
+ function runnerFailure(code, summary, options) {
124
+ const failure = Object.freeze({
125
+ code,
126
+ summary,
127
+ ...options?.why ? { why: options.why } : {},
128
+ ...options?.meta ? { meta: cloneRecord(options.meta) } : {}
129
+ });
130
+ return notOk(failure);
131
+ }
132
+
133
+ // src/core/migrations/policies.ts
134
+ var INIT_ADDITIVE_POLICY = Object.freeze({
135
+ allowedOperationClasses: Object.freeze(["additive"])
136
+ });
137
+
138
+ // src/exports/control.ts
139
+ var control_default = new SqlFamilyDescriptor();
140
+ export {
141
+ INIT_ADDITIVE_POLICY,
142
+ createMigrationPlan,
143
+ control_default as default,
144
+ plannerFailure,
145
+ plannerSuccess,
146
+ runnerFailure,
147
+ runnerSuccess
148
+ };
149
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/descriptor.ts","../../src/core/migrations/plan-helpers.ts","../../src/core/migrations/policies.ts","../../src/exports/control.ts"],"sourcesContent":["import type {\n ControlFamilyDescriptor,\n ControlPlaneStack,\n} from '@prisma-next/core-control-plane/types';\nimport { sqlTargetFamilyHook } from '@prisma-next/sql-contract-emitter';\nimport { createSqlFamilyInstance, type SqlControlFamilyInstance } from './instance';\n\n/**\n * SQL family descriptor implementation.\n * Provides the SQL family hook and factory method.\n */\nexport class SqlFamilyDescriptor\n implements ControlFamilyDescriptor<'sql', SqlControlFamilyInstance>\n{\n readonly kind = 'family' as const;\n readonly id = 'sql';\n readonly familyId = 'sql' as const;\n readonly version = '0.0.1';\n readonly hook = sqlTargetFamilyHook;\n\n create<TTargetId extends string>(\n stack: ControlPlaneStack<'sql', TTargetId>,\n ): SqlControlFamilyInstance {\n // Note: driver is not passed here because SqlFamilyInstance operations\n // (validate, emit, etc.) don't require DB connectivity. Commands that\n // need the driver (verify, introspect) get it directly from the stack.\n return createSqlFamilyInstance({\n target: stack.target,\n adapter: stack.adapter,\n extensionPacks: stack.extensionPacks,\n });\n }\n}\n","import type { NotOk, Ok } from '@prisma-next/utils/result';\nimport { notOk, ok } from '@prisma-next/utils/result';\nimport type {\n AnyRecord,\n CreateSqlMigrationPlanOptions,\n SqlMigrationPlan,\n SqlMigrationPlanOperation,\n SqlMigrationPlanOperationStep,\n SqlMigrationPlanOperationTarget,\n SqlMigrationRunnerErrorCode,\n SqlMigrationRunnerFailure,\n SqlMigrationRunnerSuccessValue,\n SqlPlannerConflict,\n SqlPlannerFailureResult,\n SqlPlannerSuccessResult,\n} from './types';\n\nconst readOnlyEmptyObject: Record<string, never> = Object.freeze({});\n\nfunction cloneRecord<T extends AnyRecord>(value: T): T {\n if (value === readOnlyEmptyObject) {\n return value;\n }\n return Object.freeze({ ...value }) as T;\n}\n\nfunction freezeSteps(\n steps: readonly SqlMigrationPlanOperationStep[],\n): readonly SqlMigrationPlanOperationStep[] {\n if (steps.length === 0) {\n return Object.freeze([]);\n }\n return Object.freeze(\n steps.map((step) =>\n Object.freeze({\n description: step.description,\n sql: step.sql,\n ...(step.meta ? { meta: cloneRecord(step.meta) } : {}),\n }),\n ),\n );\n}\n\nfunction freezeDetailsValue<T>(value: T): T {\n // Primitives and null/undefined are already immutable, return as-is\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value !== 'object') {\n return value;\n }\n // Arrays: shallow clone and freeze\n if (Array.isArray(value)) {\n return Object.freeze([...value]) as T;\n }\n // Objects: shallow clone and freeze (matching cloneRecord pattern)\n return Object.freeze({ ...value }) as T;\n}\n\nfunction freezeTargetDetails<TTargetDetails>(\n target: SqlMigrationPlanOperationTarget<TTargetDetails>,\n): SqlMigrationPlanOperationTarget<TTargetDetails> {\n return Object.freeze({\n id: target.id,\n ...(target.details !== undefined ? { details: freezeDetailsValue(target.details) } : {}),\n });\n}\n\nfunction freezeOperation<TTargetDetails>(\n operation: SqlMigrationPlanOperation<TTargetDetails>,\n): SqlMigrationPlanOperation<TTargetDetails> {\n return Object.freeze({\n id: operation.id,\n label: operation.label,\n ...(operation.summary ? { summary: operation.summary } : {}),\n operationClass: operation.operationClass,\n target: freezeTargetDetails(operation.target),\n precheck: freezeSteps(operation.precheck),\n execute: freezeSteps(operation.execute),\n postcheck: freezeSteps(operation.postcheck),\n ...(operation.meta ? { meta: cloneRecord(operation.meta) } : {}),\n });\n}\n\nfunction freezeOperations<TTargetDetails>(\n operations: readonly SqlMigrationPlanOperation<TTargetDetails>[],\n): readonly SqlMigrationPlanOperation<TTargetDetails>[] {\n if (operations.length === 0) {\n return Object.freeze([]);\n }\n return Object.freeze(operations.map((operation) => freezeOperation(operation)));\n}\n\nexport function createMigrationPlan<TTargetDetails>(\n options: CreateSqlMigrationPlanOptions<TTargetDetails>,\n): SqlMigrationPlan<TTargetDetails> {\n return Object.freeze({\n targetId: options.targetId,\n ...(options.origin !== undefined\n ? { origin: options.origin ? Object.freeze({ ...options.origin }) : null }\n : {}),\n destination: Object.freeze({ ...options.destination }),\n operations: freezeOperations(options.operations),\n ...(options.meta ? { meta: cloneRecord(options.meta) } : {}),\n });\n}\n\nexport function plannerSuccess<TTargetDetails>(\n plan: SqlMigrationPlan<TTargetDetails>,\n): SqlPlannerSuccessResult<TTargetDetails> {\n return Object.freeze({\n kind: 'success',\n plan,\n });\n}\n\nexport function plannerFailure(conflicts: readonly SqlPlannerConflict[]): SqlPlannerFailureResult {\n return Object.freeze({\n kind: 'failure' as const,\n conflicts: Object.freeze(\n conflicts.map((conflict) =>\n Object.freeze({\n kind: conflict.kind,\n summary: conflict.summary,\n ...(conflict.why ? { why: conflict.why } : {}),\n ...(conflict.location ? { location: Object.freeze({ ...conflict.location }) } : {}),\n ...(conflict.meta ? { meta: cloneRecord(conflict.meta) } : {}),\n }),\n ),\n ),\n });\n}\n\n/**\n * Creates a successful migration runner result.\n */\nexport function runnerSuccess(value: {\n operationsPlanned: number;\n operationsExecuted: number;\n}): Ok<SqlMigrationRunnerSuccessValue> {\n return ok(\n Object.freeze({\n operationsPlanned: value.operationsPlanned,\n operationsExecuted: value.operationsExecuted,\n }),\n );\n}\n\n/**\n * Creates a failed migration runner result.\n */\nexport function runnerFailure(\n code: SqlMigrationRunnerErrorCode,\n summary: string,\n options?: { why?: string; meta?: AnyRecord },\n): NotOk<SqlMigrationRunnerFailure> {\n const failure: SqlMigrationRunnerFailure = Object.freeze({\n code,\n summary,\n ...(options?.why ? { why: options.why } : {}),\n ...(options?.meta ? { meta: cloneRecord(options.meta) } : {}),\n });\n return notOk(failure);\n}\n","import type { MigrationOperationPolicy } from '@prisma-next/core-control-plane/types';\n\n/**\n * Policy used by `db init`: additive-only operations, no widening/destructive steps.\n */\nexport const INIT_ADDITIVE_POLICY: MigrationOperationPolicy = Object.freeze({\n allowedOperationClasses: Object.freeze(['additive'] as const),\n});\n","import { SqlFamilyDescriptor } from '../core/descriptor';\n\n// Re-export core types from canonical source\nexport type {\n MigrationOperationClass,\n MigrationOperationPolicy,\n MigrationPlan,\n MigrationPlanner,\n MigrationPlannerConflict,\n MigrationPlannerResult,\n MigrationPlanOperation,\n TargetMigrationsCapability,\n} from '@prisma-next/core-control-plane/types';\nexport type { SchemaVerifyOptions, SqlControlFamilyInstance } from '../core/instance';\nexport {\n createMigrationPlan,\n plannerFailure,\n plannerSuccess,\n runnerFailure,\n runnerSuccess,\n} from '../core/migrations/plan-helpers';\nexport { INIT_ADDITIVE_POLICY } from '../core/migrations/policies';\n// SQL-specific types\nexport type {\n ComponentDatabaseDependencies,\n ComponentDatabaseDependency,\n CreateSqlMigrationPlanOptions,\n SqlControlExtensionDescriptor,\n SqlControlTargetDescriptor,\n SqlMigrationPlan,\n SqlMigrationPlanContractInfo,\n SqlMigrationPlanner,\n SqlMigrationPlannerPlanOptions,\n SqlMigrationPlanOperation,\n SqlMigrationPlanOperationStep,\n SqlMigrationPlanOperationTarget,\n SqlMigrationRunner,\n SqlMigrationRunnerErrorCode,\n SqlMigrationRunnerExecuteCallbacks,\n SqlMigrationRunnerExecuteOptions,\n SqlMigrationRunnerFailure,\n SqlMigrationRunnerResult,\n SqlMigrationRunnerSuccessValue,\n SqlPlannerConflict,\n SqlPlannerConflictKind,\n SqlPlannerConflictLocation,\n SqlPlannerFailureResult,\n SqlPlannerResult,\n SqlPlannerSuccessResult,\n} from '../core/migrations/types';\n\n/**\n * SQL family descriptor for control plane (CLI/config).\n * Provides the SQL family hook and conversion helpers.\n */\nexport default new SqlFamilyDescriptor();\n"],"mappings":"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","names":[]}
@@ -0,0 +1,8 @@
1
+ import { SqlRuntimeFamilyDescriptor } from '../core/runtime-descriptor';
2
+ /**
3
+ * SQL runtime family descriptor for execution/runtime plane.
4
+ * Provides factory method to create SQL runtime family instance.
5
+ */
6
+ declare const _default: SqlRuntimeFamilyDescriptor;
7
+ export default _default;
8
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/exports/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAExE;;;GAGG;;AACH,wBAAgD"}
@@ -0,0 +1,64 @@
1
+ // src/core/runtime-instance.ts
2
+ import { assertRuntimeContractRequirementsSatisfied } from "@prisma-next/core-execution-plane/framework-components";
3
+ import { createRuntime, createRuntimeContext } from "@prisma-next/sql-runtime";
4
+ function createSqlRuntimeFamilyInstance(options) {
5
+ const {
6
+ family: familyDescriptor,
7
+ target: targetDescriptor,
8
+ adapter: adapterDescriptor,
9
+ driver: driverDescriptor,
10
+ extensionPacks: extensionDescriptors = []
11
+ } = options;
12
+ return {
13
+ familyId: "sql",
14
+ createRuntime(runtimeOptions) {
15
+ assertRuntimeContractRequirementsSatisfied({
16
+ contract: runtimeOptions.contract,
17
+ family: familyDescriptor,
18
+ target: targetDescriptor,
19
+ adapter: adapterDescriptor,
20
+ extensionPacks: extensionDescriptors
21
+ });
22
+ const driverInstance = driverDescriptor.create(runtimeOptions.driverOptions);
23
+ const context = createRuntimeContext({
24
+ contract: runtimeOptions.contract,
25
+ target: targetDescriptor,
26
+ adapter: adapterDescriptor,
27
+ extensionPacks: extensionDescriptors
28
+ });
29
+ const runtimeOptions_ = {
30
+ driver: driverInstance,
31
+ verify: runtimeOptions.verify,
32
+ context,
33
+ ...runtimeOptions.plugins ? { plugins: runtimeOptions.plugins } : {},
34
+ ...runtimeOptions.mode ? { mode: runtimeOptions.mode } : {},
35
+ ...runtimeOptions.log ? { log: runtimeOptions.log } : {}
36
+ };
37
+ return createRuntime(runtimeOptions_);
38
+ }
39
+ };
40
+ }
41
+
42
+ // src/core/runtime-descriptor.ts
43
+ var SqlRuntimeFamilyDescriptor = class {
44
+ kind = "family";
45
+ id = "sql";
46
+ familyId = "sql";
47
+ version = "0.0.1";
48
+ create(options) {
49
+ return createSqlRuntimeFamilyInstance({
50
+ family: this,
51
+ target: options.target,
52
+ adapter: options.adapter,
53
+ driver: options.driver,
54
+ extensionPacks: options.extensionPacks
55
+ });
56
+ }
57
+ };
58
+
59
+ // src/exports/runtime.ts
60
+ var runtime_default = new SqlRuntimeFamilyDescriptor();
61
+ export {
62
+ runtime_default as default
63
+ };
64
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/runtime-instance.ts","../../src/core/runtime-descriptor.ts","../../src/exports/runtime.ts"],"sourcesContent":["import { assertRuntimeContractRequirementsSatisfied } from '@prisma-next/core-execution-plane/framework-components';\nimport type {\n RuntimeAdapterDescriptor,\n RuntimeDriverDescriptor,\n RuntimeDriverInstance,\n RuntimeFamilyDescriptor,\n RuntimeFamilyInstance,\n RuntimeTargetDescriptor,\n} from '@prisma-next/core-execution-plane/types';\nimport type { Log, Plugin, RuntimeVerifyOptions } from '@prisma-next/runtime-executor';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n Adapter,\n LoweredStatement,\n SelectAst,\n SqlDriver,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n Runtime,\n RuntimeOptions,\n SqlRuntimeAdapterInstance,\n SqlRuntimeExtensionDescriptor,\n} from '@prisma-next/sql-runtime';\nimport { createRuntime, createRuntimeContext } from '@prisma-next/sql-runtime';\n\n/**\n * SQL runtime driver instance type.\n * Combines identity properties with SQL-specific behavior methods.\n */\nexport type SqlRuntimeDriverInstance<TTargetId extends string = string> = RuntimeDriverInstance<\n 'sql',\n TTargetId\n> &\n SqlDriver;\n\n// Re-export SqlRuntimeAdapterInstance from sql-runtime for consumers\nexport type { SqlRuntimeAdapterInstance } from '@prisma-next/sql-runtime';\n\n/**\n * SQL runtime family instance interface.\n * Extends base RuntimeFamilyInstance with SQL-specific runtime creation method.\n */\nexport interface SqlRuntimeFamilyInstance extends RuntimeFamilyInstance<'sql'> {\n /**\n * Creates a SQL runtime from contract, driver options, and verification settings.\n *\n * Extension packs are routed through composition (at instance creation time),\n * not through this method. This aligns with control-plane composition patterns.\n *\n * @param options - Runtime creation options\n * @param options.contract - SQL contract\n * @param options.driverOptions - Driver options (e.g., PostgresDriverOptions)\n * @param options.verify - Runtime verification options\n * @param options.plugins - Optional plugins\n * @param options.mode - Optional runtime mode\n * @param options.log - Optional log instance\n * @returns Runtime instance\n */\n createRuntime<TContract extends SqlContract<SqlStorage>>(options: {\n readonly contract: TContract;\n readonly driverOptions: unknown;\n readonly verify: RuntimeVerifyOptions;\n readonly plugins?: readonly Plugin<\n TContract,\n Adapter<SelectAst, SqlContract<SqlStorage>, LoweredStatement>,\n SqlDriver\n >[];\n readonly mode?: 'strict' | 'permissive';\n readonly log?: Log;\n }): Runtime;\n}\n\n/**\n * Creates a SQL runtime family instance from runtime descriptors.\n *\n * Routes the same framework composition as control-plane:\n * family, target, adapter, driver, extensionPacks (all as descriptors with IDs).\n */\nexport function createSqlRuntimeFamilyInstance<TTargetId extends string>(options: {\n readonly family: RuntimeFamilyDescriptor<'sql'>;\n readonly target: RuntimeTargetDescriptor<'sql', TTargetId>;\n readonly adapter: RuntimeAdapterDescriptor<\n 'sql',\n TTargetId,\n SqlRuntimeAdapterInstance<TTargetId>\n >;\n readonly driver: RuntimeDriverDescriptor<'sql', TTargetId, SqlRuntimeDriverInstance<TTargetId>>;\n readonly extensionPacks?: readonly SqlRuntimeExtensionDescriptor<TTargetId>[];\n}): SqlRuntimeFamilyInstance {\n const {\n family: familyDescriptor,\n target: targetDescriptor,\n adapter: adapterDescriptor,\n driver: driverDescriptor,\n extensionPacks: extensionDescriptors = [],\n } = options;\n\n return {\n familyId: 'sql' as const,\n createRuntime<TContract extends SqlContract<SqlStorage>>(runtimeOptions: {\n readonly contract: TContract;\n readonly driverOptions: unknown;\n readonly verify: RuntimeVerifyOptions;\n readonly plugins?: readonly Plugin<\n TContract,\n Adapter<SelectAst, SqlContract<SqlStorage>, LoweredStatement>,\n SqlDriver\n >[];\n readonly mode?: 'strict' | 'permissive';\n readonly log?: Log;\n }): Runtime {\n // Validate contract requirements against provided descriptors\n assertRuntimeContractRequirementsSatisfied({\n contract: runtimeOptions.contract,\n family: familyDescriptor,\n target: targetDescriptor,\n adapter: adapterDescriptor,\n extensionPacks: extensionDescriptors,\n });\n\n // Create driver instance\n const driverInstance = driverDescriptor.create(runtimeOptions.driverOptions);\n\n // Create context via descriptor-first API\n const context = createRuntimeContext<TContract, TTargetId>({\n contract: runtimeOptions.contract,\n target: targetDescriptor,\n adapter: adapterDescriptor,\n extensionPacks: extensionDescriptors,\n });\n\n const runtimeOptions_: RuntimeOptions<TContract> = {\n driver: driverInstance,\n verify: runtimeOptions.verify,\n context,\n ...(runtimeOptions.plugins ? { plugins: runtimeOptions.plugins } : {}),\n ...(runtimeOptions.mode ? { mode: runtimeOptions.mode } : {}),\n ...(runtimeOptions.log ? { log: runtimeOptions.log } : {}),\n };\n\n return createRuntime(runtimeOptions_);\n },\n };\n}\n","import type {\n RuntimeAdapterDescriptor,\n RuntimeDriverDescriptor,\n RuntimeExtensionDescriptor,\n RuntimeFamilyDescriptor,\n RuntimeTargetDescriptor,\n} from '@prisma-next/core-execution-plane/types';\nimport {\n createSqlRuntimeFamilyInstance,\n type SqlRuntimeAdapterInstance,\n type SqlRuntimeDriverInstance,\n type SqlRuntimeFamilyInstance,\n} from './runtime-instance';\n\n/**\n * SQL runtime family descriptor implementation.\n * Provides factory method to create SQL runtime family instance.\n */\nexport class SqlRuntimeFamilyDescriptor\n implements RuntimeFamilyDescriptor<'sql', SqlRuntimeFamilyInstance>\n{\n readonly kind = 'family' as const;\n readonly id = 'sql';\n readonly familyId = 'sql' as const;\n readonly version = '0.0.1';\n\n create<TTargetId extends string>(options: {\n readonly target: RuntimeTargetDescriptor<'sql', TTargetId>;\n readonly adapter: RuntimeAdapterDescriptor<\n 'sql',\n TTargetId,\n SqlRuntimeAdapterInstance<TTargetId>\n >;\n readonly driver: RuntimeDriverDescriptor<'sql', TTargetId, SqlRuntimeDriverInstance<TTargetId>>;\n readonly extensionPacks: readonly RuntimeExtensionDescriptor<'sql', TTargetId>[];\n }): SqlRuntimeFamilyInstance {\n return createSqlRuntimeFamilyInstance({\n family: this,\n target: options.target,\n adapter: options.adapter,\n driver: options.driver,\n extensionPacks: options.extensionPacks,\n });\n }\n}\n","import { SqlRuntimeFamilyDescriptor } from '../core/runtime-descriptor';\n\n/**\n * SQL runtime family descriptor for execution/runtime plane.\n * Provides factory method to create SQL runtime family instance.\n */\nexport default new SqlRuntimeFamilyDescriptor();\n"],"mappings":";AAAA,SAAS,kDAAkD;AAuB3D,SAAS,eAAe,4BAA4B;AAuD7C,SAAS,+BAAyD,SAU5C;AAC3B,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,gBAAgB,uBAAuB,CAAC;AAAA,EAC1C,IAAI;AAEJ,SAAO;AAAA,IACL,UAAU;AAAA,IACV,cAAyD,gBAW7C;AAEV,iDAA2C;AAAA,QACzC,UAAU,eAAe;AAAA,QACzB,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB,CAAC;AAGD,YAAM,iBAAiB,iBAAiB,OAAO,eAAe,aAAa;AAG3E,YAAM,UAAU,qBAA2C;AAAA,QACzD,UAAU,eAAe;AAAA,QACzB,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB,CAAC;AAED,YAAM,kBAA6C;AAAA,QACjD,QAAQ;AAAA,QACR,QAAQ,eAAe;AAAA,QACvB;AAAA,QACA,GAAI,eAAe,UAAU,EAAE,SAAS,eAAe,QAAQ,IAAI,CAAC;AAAA,QACpE,GAAI,eAAe,OAAO,EAAE,MAAM,eAAe,KAAK,IAAI,CAAC;AAAA,QAC3D,GAAI,eAAe,MAAM,EAAE,KAAK,eAAe,IAAI,IAAI,CAAC;AAAA,MAC1D;AAEA,aAAO,cAAc,eAAe;AAAA,IACtC;AAAA,EACF;AACF;;;AC7HO,IAAM,6BAAN,MAEP;AAAA,EACW,OAAO;AAAA,EACP,KAAK;AAAA,EACL,WAAW;AAAA,EACX,UAAU;AAAA,EAEnB,OAAiC,SASJ;AAC3B,WAAO,+BAA+B;AAAA,MACpC,QAAQ;AAAA,MACR,QAAQ,QAAQ;AAAA,MAChB,SAAS,QAAQ;AAAA,MACjB,QAAQ,QAAQ;AAAA,MAChB,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;;;ACtCA,IAAO,kBAAQ,IAAI,2BAA2B;","names":[]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Pure schema verification exports.
3
+ *
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.
7
+ */
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"}
@@ -0,0 +1,15 @@
1
+ import {
2
+ arraysEqual,
3
+ isIndexSatisfied,
4
+ isUniqueConstraintSatisfied,
5
+ verifyDatabaseDependencies,
6
+ verifySqlSchema
7
+ } from "../chunk-XH2Y5NTD.js";
8
+ export {
9
+ arraysEqual,
10
+ isIndexSatisfied,
11
+ isUniqueConstraintSatisfied,
12
+ verifyDatabaseDependencies,
13
+ verifySqlSchema
14
+ };
15
+ //# sourceMappingURL=schema-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Test utilities for working with component descriptors.
3
+ * These functions operate on descriptors directly, used in tests and integration tests.
4
+ */
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"}
@@ -0,0 +1,17 @@
1
+ import {
2
+ assembleOperationRegistry,
3
+ convertOperationManifest,
4
+ extractCodecTypeImports,
5
+ extractExtensionIds,
6
+ extractOperationTypeImports
7
+ } from "../chunk-H7CGY6OH.js";
8
+ import "../chunk-SU7LN2UH.js";
9
+ import "../chunk-XH2Y5NTD.js";
10
+ export {
11
+ assembleOperationRegistry,
12
+ convertOperationManifest,
13
+ extractCodecTypeImports,
14
+ extractExtensionIds,
15
+ extractOperationTypeImports
16
+ };
17
+ //# sourceMappingURL=test-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
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"}
@@ -0,0 +1,11 @@
1
+ import {
2
+ parseContractMarkerRow,
3
+ readMarker,
4
+ readMarkerSql
5
+ } from "../chunk-SU7LN2UH.js";
6
+ export {
7
+ parseContractMarkerRow,
8
+ readMarker,
9
+ readMarkerSql
10
+ };
11
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,56 +1,69 @@
1
1
  {
2
2
  "name": "@prisma-next/family-sql",
3
- "version": "0.3.0-pr.94.2",
3
+ "version": "0.3.0-pr.95.2",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
- "engines": {
7
- "node": ">=20"
8
- },
9
6
  "description": "SQL family descriptor for Prisma Next",
10
7
  "dependencies": {
11
8
  "arktype": "^2.0.0",
12
- "@prisma-next/cli": "0.3.0-pr.94.2",
13
- "@prisma-next/contract": "0.3.0-pr.94.2",
14
- "@prisma-next/core-control-plane": "0.3.0-pr.94.2",
15
- "@prisma-next/core-execution-plane": "0.3.0-pr.94.2",
16
- "@prisma-next/operations": "0.3.0-pr.94.2",
17
- "@prisma-next/runtime-executor": "0.3.0-pr.94.2",
18
- "@prisma-next/sql-contract": "0.3.0-pr.94.2",
19
- "@prisma-next/sql-contract-emitter": "0.3.0-pr.94.2",
20
- "@prisma-next/sql-contract-ts": "0.3.0-pr.94.2",
21
- "@prisma-next/sql-operations": "0.3.0-pr.94.2",
22
- "@prisma-next/sql-relational-core": "0.3.0-pr.94.2",
23
- "@prisma-next/sql-runtime": "0.3.0-pr.94.2",
24
- "@prisma-next/sql-schema-ir": "0.3.0-pr.94.2",
25
- "@prisma-next/utils": "0.3.0-pr.94.2"
9
+ "@prisma-next/contract": "0.3.0-pr.95.2",
10
+ "@prisma-next/core-control-plane": "0.3.0-pr.95.2",
11
+ "@prisma-next/cli": "0.3.0-pr.95.2",
12
+ "@prisma-next/core-execution-plane": "0.3.0-pr.95.2",
13
+ "@prisma-next/operations": "0.3.0-pr.95.2",
14
+ "@prisma-next/runtime-executor": "0.3.0-pr.95.2",
15
+ "@prisma-next/sql-contract": "0.3.0-pr.95.2",
16
+ "@prisma-next/sql-contract-emitter": "0.3.0-pr.95.2",
17
+ "@prisma-next/sql-contract-ts": "0.3.0-pr.95.2",
18
+ "@prisma-next/sql-operations": "0.3.0-pr.95.2",
19
+ "@prisma-next/sql-relational-core": "0.3.0-pr.95.2",
20
+ "@prisma-next/sql-runtime": "0.3.0-pr.95.2",
21
+ "@prisma-next/sql-schema-ir": "0.3.0-pr.95.2",
22
+ "@prisma-next/utils": "0.3.0-pr.95.2"
26
23
  },
27
24
  "devDependencies": {
28
- "tsdown": "0.18.4",
25
+ "tsup": "8.5.1",
29
26
  "typescript": "5.9.3",
30
27
  "vitest": "4.0.16",
31
- "@prisma-next/driver-postgres": "0.3.0-pr.94.2",
28
+ "@prisma-next/driver-postgres": "0.3.0-pr.95.2",
32
29
  "@prisma-next/test-utils": "0.0.1",
33
- "@prisma-next/tsconfig": "0.0.0",
34
- "@prisma-next/tsdown": "0.0.0"
30
+ "@prisma-next/tsconfig": "0.0.0"
35
31
  },
36
32
  "files": [
37
33
  "dist",
38
34
  "src"
39
35
  ],
40
36
  "exports": {
41
- "./control": "./dist/control.mjs",
42
- "./control-adapter": "./dist/control-adapter.mjs",
43
- "./runtime": "./dist/runtime.mjs",
44
- "./schema-verify": "./dist/schema-verify.mjs",
45
- "./test-utils": "./dist/test-utils.mjs",
46
- "./verify": "./dist/verify.mjs",
47
- "./package.json": "./package.json"
37
+ "./control": {
38
+ "types": "./dist/exports/control.d.ts",
39
+ "import": "./dist/exports/control.js"
40
+ },
41
+ "./control-adapter": {
42
+ "types": "./dist/exports/control-adapter.d.ts",
43
+ "import": "./dist/exports/control-adapter.js"
44
+ },
45
+ "./runtime": {
46
+ "types": "./dist/exports/runtime.d.ts",
47
+ "import": "./dist/exports/runtime.js"
48
+ },
49
+ "./verify": {
50
+ "types": "./dist/exports/verify.d.ts",
51
+ "import": "./dist/exports/verify.js"
52
+ },
53
+ "./test-utils": {
54
+ "types": "./dist/exports/test-utils.d.ts",
55
+ "import": "./dist/exports/test-utils.js"
56
+ },
57
+ "./schema-verify": {
58
+ "types": "./dist/exports/schema-verify.d.ts",
59
+ "import": "./dist/exports/schema-verify.js"
60
+ }
48
61
  },
49
62
  "scripts": {
50
- "build": "tsdown",
63
+ "build": "tsup --config tsup.config.ts && tsc --project tsconfig.build.json",
51
64
  "test": "vitest run",
52
65
  "test:coverage": "vitest run --coverage",
53
- "typecheck": "tsc --noEmit",
66
+ "typecheck": "tsc --project tsconfig.json --noEmit",
54
67
  "lint": "biome check . --error-on-warnings",
55
68
  "clean": "rm -rf dist coverage .tmp-output"
56
69
  }
@@ -1,3 +1,8 @@
1
+ import type {
2
+ NormalizedTypeRenderer,
3
+ TypeRenderer,
4
+ } from '@prisma-next/contract/framework-components';
5
+ import { normalizeRenderer } from '@prisma-next/contract/framework-components';
1
6
  import type { OperationManifest } from '@prisma-next/contract/pack-manifest-types';
2
7
  import type { TypesImportSpec } from '@prisma-next/contract/types';
3
8
  import type {
@@ -115,3 +120,46 @@ export function extractExtensionIds(
115
120
 
116
121
  return ids;
117
122
  }
123
+
124
+ /**
125
+ * Extracts and normalizes parameterized codec renderers from descriptors.
126
+ * Templates are compiled to functions at this layer.
127
+ *
128
+ * Throws an error if multiple descriptors provide a renderer for the same codecId.
129
+ * This is intentional - duplicate codecId is a hard error, not a silent override.
130
+ *
131
+ * @returns Map from codecId to normalized renderer
132
+ */
133
+ export function extractParameterizedRenderers(
134
+ descriptors: ReadonlyArray<
135
+ | ControlTargetDescriptor<'sql', string>
136
+ | ControlAdapterDescriptor<'sql', string>
137
+ | ControlExtensionDescriptor<'sql', string>
138
+ >,
139
+ ): Map<string, NormalizedTypeRenderer> {
140
+ const renderers = new Map<string, NormalizedTypeRenderer>();
141
+ const owners = new Map<string, string>(); // codecId -> descriptor.id for error messages
142
+
143
+ for (const descriptor of descriptors) {
144
+ const parameterized = descriptor.types?.codecTypes?.parameterized as
145
+ | Record<string, TypeRenderer>
146
+ | undefined;
147
+ if (!parameterized) continue;
148
+
149
+ for (const [codecId, renderer] of Object.entries(parameterized)) {
150
+ const existingOwner = owners.get(codecId);
151
+ if (existingOwner !== undefined) {
152
+ throw new Error(
153
+ `Duplicate parameterized renderer for codecId "${codecId}". ` +
154
+ `Descriptor "${descriptor.id}" conflicts with "${existingOwner}". ` +
155
+ 'Each codecId can only have one renderer.',
156
+ );
157
+ }
158
+
159
+ renderers.set(codecId, normalizeRenderer(codecId, renderer));
160
+ owners.set(codecId, descriptor.id);
161
+ }
162
+ }
163
+
164
+ return renderers;
165
+ }
@@ -33,6 +33,7 @@ import {
33
33
  extractCodecTypeImports,
34
34
  extractExtensionIds,
35
35
  extractOperationTypeImports,
36
+ extractParameterizedRenderers,
36
37
  } from './assembly';
37
38
  import type { SqlControlAdapter } from './control-adapter';
38
39
  import { verifySqlSchema } from './schema-verify/verify-sql-schema';
@@ -404,11 +405,12 @@ export function createSqlFamilyInstance<TTargetId extends string>(
404
405
  // Assembly functions only use manifest and id, so we can pass Control*Descriptor types directly
405
406
  const descriptors = [target, adapter, ...extensions];
406
407
 
407
- // Assemble operation registry, type imports, and extension IDs
408
+ // Assemble operation registry, type imports, extension IDs, and parameterized renderers
408
409
  const operationRegistry = assembleOperationRegistry(descriptors, convertOperationManifest);
409
410
  const codecTypeImports = extractCodecTypeImports(descriptors);
410
411
  const operationTypeImports = extractOperationTypeImports(descriptors);
411
412
  const extensionIds = extractExtensionIds(adapter, target, extensions);
413
+ const parameterizedRenderers = extractParameterizedRenderers(descriptors);
412
414
 
413
415
  // Build type metadata registry from manifests
414
416
  const typeMetadataRegistry = buildSqlTypeMetadataRegistry({
@@ -888,6 +890,7 @@ export function createSqlFamilyInstance<TTargetId extends string>(
888
890
  codecTypeImports,
889
891
  operationTypeImports,
890
892
  extensionIds,
893
+ parameterizedRenderers,
891
894
  },
892
895
  sqlTargetFamilyHook,
893
896
  );
@@ -1,47 +0,0 @@
1
- import { ControlAdapterInstance, ControlDriverInstance } from "@prisma-next/core-control-plane/types";
2
- import { SqlSchemaIR } from "@prisma-next/sql-schema-ir/types";
3
-
4
- //#region src/core/control-adapter.d.ts
5
-
6
- /**
7
- * SQL control adapter interface for control-plane operations.
8
- * Implemented by target-specific adapters (e.g., Postgres, MySQL).
9
- *
10
- * @template TTarget - The target ID (e.g., 'postgres', 'mysql')
11
- */
12
- interface SqlControlAdapter<TTarget extends string = string> extends ControlAdapterInstance<'sql', TTarget> {
13
- /**
14
- * The target ID this adapter implements.
15
- * Used for type tracking and runtime validation.
16
- * @deprecated Use targetId from ControlAdapterInstance instead
17
- */
18
- readonly target: TTarget;
19
- /**
20
- * Introspects a database schema and returns a raw SqlSchemaIR.
21
- *
22
- * This is a pure schema discovery operation that queries the database catalog
23
- * and returns the schema structure without type mapping or contract enrichment.
24
- * Type mapping and enrichment are handled separately by enrichment helpers.
25
- *
26
- * @param driver - ControlDriverInstance instance for executing queries (target-specific)
27
- * @param contractIR - Optional contract IR for contract-guided introspection (filtering, optimization)
28
- * @param schema - Schema name to introspect (defaults to 'public')
29
- * @returns Promise resolving to SqlSchemaIR representing the live database schema
30
- */
31
- introspect(driver: ControlDriverInstance<'sql', TTarget>, contractIR?: unknown, schema?: string): Promise<SqlSchemaIR>;
32
- }
33
- /**
34
- * SQL control adapter descriptor interface.
35
- * Provides a factory method to create control adapter instances.
36
- *
37
- * @template TTarget - The target ID (e.g., 'postgres', 'mysql')
38
- */
39
- interface SqlControlAdapterDescriptor<TTarget extends string = string> {
40
- /**
41
- * Creates a SQL control adapter instance for control-plane operations.
42
- */
43
- create(): SqlControlAdapter<TTarget>;
44
- }
45
- //#endregion
46
- export { type SqlControlAdapter, type SqlControlAdapterDescriptor };
47
- //# sourceMappingURL=control-adapter.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"control-adapter.d.mts","names":[],"sources":["../src/core/control-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;AAYA;;;;AAsBY,UAtBK,iBAsBL,CAAA,gBAAA,MAAA,GAAA,MAAA,CAAA,SArBF,sBAqBE,CAAA,KAAA,EArB4B,OAqB5B,CAAA,CAAA;EAGC;;;;AASb;mBA3BmB;;;;;;;;;;;;;qBAeP,6BAA6B,kDAGpC,QAAQ;;;;;;;;UASI;;;;YAIL,kBAAkB"}
@@ -1 +0,0 @@
1
- export { };