@prisma-next/family-sql 0.3.0-pr.98.4 → 0.3.0-pr.98.6
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/{chunk-6WJ6XD5J.js → chunk-GYEG3I7U.js} +4 -3
- package/dist/chunk-GYEG3I7U.js.map +1 -0
- package/dist/core/assembly.d.ts.map +1 -1
- package/dist/exports/control.js +1 -1
- package/dist/exports/test-utils.js +1 -1
- package/package.json +16 -16
- package/src/core/assembly.ts +3 -4
- package/dist/chunk-6WJ6XD5J.js.map +0 -1
|
@@ -65,8 +65,9 @@ function extractParameterizedRenderers(descriptors) {
|
|
|
65
65
|
const renderers = /* @__PURE__ */ new Map();
|
|
66
66
|
const owners = /* @__PURE__ */ new Map();
|
|
67
67
|
for (const descriptor of descriptors) {
|
|
68
|
-
const
|
|
69
|
-
if (!parameterized) continue;
|
|
68
|
+
const codecTypes = descriptor.types?.codecTypes;
|
|
69
|
+
if (!codecTypes?.parameterized) continue;
|
|
70
|
+
const parameterized = codecTypes.parameterized;
|
|
70
71
|
for (const [codecId, renderer] of Object.entries(parameterized)) {
|
|
71
72
|
const existingOwner = owners.get(codecId);
|
|
72
73
|
if (existingOwner !== void 0) {
|
|
@@ -620,4 +621,4 @@ export {
|
|
|
620
621
|
convertOperationManifest,
|
|
621
622
|
createSqlFamilyInstance
|
|
622
623
|
};
|
|
623
|
-
//# sourceMappingURL=chunk-
|
|
624
|
+
//# sourceMappingURL=chunk-GYEG3I7U.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/assembly.ts","../src/core/instance.ts"],"sourcesContent":["import type {\n NormalizedTypeRenderer,\n TypeRenderer,\n} from '@prisma-next/contract/framework-components';\nimport { normalizeRenderer } from '@prisma-next/contract/framework-components';\nimport type { OperationManifest } from '@prisma-next/contract/pack-manifest-types';\nimport type { TypesImportSpec } from '@prisma-next/contract/types';\nimport type {\n ControlAdapterDescriptor,\n ControlExtensionDescriptor,\n ControlTargetDescriptor,\n} from '@prisma-next/core-control-plane/types';\nimport type { OperationRegistry, OperationSignature } from '@prisma-next/operations';\nimport { createOperationRegistry } from '@prisma-next/operations';\n\n/**\n * Assembles an operation registry from descriptors (adapter, target, extensions).\n * Loops over descriptors, extracts operations, converts them using the provided\n * conversion function, and registers them in a new registry.\n */\nexport function assembleOperationRegistry(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n convertOperationManifest: (manifest: OperationManifest) => OperationSignature,\n): OperationRegistry {\n const registry = createOperationRegistry();\n\n for (const descriptor of descriptors) {\n const operations = descriptor.operations ?? [];\n for (const operationManifest of operations as ReadonlyArray<OperationManifest>) {\n const signature = convertOperationManifest(operationManifest);\n registry.register(signature);\n }\n }\n\n return registry;\n}\n\n/**\n * Extracts codec type imports from descriptors for contract.d.ts generation.\n */\nexport function extractCodecTypeImports(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const types = descriptor.types;\n const codecTypes = types?.codecTypes;\n if (codecTypes?.import) {\n imports.push(codecTypes.import);\n }\n }\n\n return imports;\n}\n\n/**\n * Extracts operation type imports from descriptors for contract.d.ts generation.\n */\nexport function extractOperationTypeImports(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const types = descriptor.types;\n const operationTypes = types?.operationTypes;\n if (operationTypes?.import) {\n imports.push(operationTypes.import);\n }\n }\n\n return imports;\n}\n\n/**\n * Extracts extension IDs from descriptors in deterministic order:\n * [adapter.id, target.id, ...extensions.map(e => e.id)]\n * Deduplicates while preserving stable order.\n */\nexport function extractExtensionIds(\n adapter: ControlAdapterDescriptor<'sql', string>,\n target: ControlTargetDescriptor<'sql', string>,\n extensions: ReadonlyArray<ControlExtensionDescriptor<'sql', string>>,\n): ReadonlyArray<string> {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n // Add adapter first\n if (!seen.has(adapter.id)) {\n ids.push(adapter.id);\n seen.add(adapter.id);\n }\n\n // Add target second\n if (!seen.has(target.id)) {\n ids.push(target.id);\n seen.add(target.id);\n }\n\n // Add extensions in order\n for (const ext of extensions) {\n if (!seen.has(ext.id)) {\n ids.push(ext.id);\n seen.add(ext.id);\n }\n }\n\n return ids;\n}\n\n/**\n * Extracts and normalizes parameterized codec renderers from descriptors.\n * Templates are compiled to functions at this layer.\n *\n * Throws an error if multiple descriptors provide a renderer for the same codecId.\n * This is intentional - duplicate codecId is a hard error, not a silent override.\n *\n * @returns Map from codecId to normalized renderer\n */\nexport function extractParameterizedRenderers(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n): Map<string, NormalizedTypeRenderer> {\n const renderers = new Map<string, NormalizedTypeRenderer>();\n const owners = new Map<string, string>(); // codecId -> descriptor.id for error messages\n\n for (const descriptor of descriptors) {\n const codecTypes = descriptor.types?.codecTypes;\n if (!codecTypes?.parameterized) continue;\n\n const parameterized: Record<string, TypeRenderer> = codecTypes.parameterized;\n for (const [codecId, renderer] of Object.entries(parameterized)) {\n const existingOwner = owners.get(codecId);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate parameterized renderer for codecId \"${codecId}\". ` +\n `Descriptor \"${descriptor.id}\" conflicts with \"${existingOwner}\". ` +\n 'Each codecId can only have one renderer.',\n );\n }\n\n renderers.set(codecId, normalizeRenderer(codecId, renderer));\n owners.set(codecId, descriptor.id);\n }\n }\n\n return renderers;\n}\n\n/**\n * Extracts parameterized type imports from descriptors for contract.d.ts generation.\n * These are type imports needed by parameterized codec renderers.\n *\n * @returns Array of type import specs (may contain duplicates; caller should deduplicate)\n */\nexport function extractParameterizedTypeImports(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const parameterizedImports = descriptor.types?.codecTypes?.parameterizedImports;\n if (parameterizedImports) {\n imports.push(...parameterizedImports);\n }\n }\n\n return imports;\n}\n","import type { TargetBoundComponentDescriptor } from '@prisma-next/contract/framework-components';\nimport type { ContractIR } from '@prisma-next/contract/ir';\nimport type { OperationManifest } from '@prisma-next/contract/pack-manifest-types';\nimport type { ContractMarkerRecord, TypesImportSpec } from '@prisma-next/contract/types';\nimport { emit } from '@prisma-next/core-control-plane/emission';\nimport type { CoreSchemaView, SchemaTreeNode } from '@prisma-next/core-control-plane/schema-view';\nimport type {\n ControlAdapterDescriptor,\n ControlDriverInstance,\n ControlExtensionDescriptor,\n ControlFamilyInstance,\n ControlTargetDescriptor,\n EmitContractResult,\n OperationContext,\n SignDatabaseResult,\n VerifyDatabaseResult,\n VerifyDatabaseSchemaResult,\n} from '@prisma-next/core-control-plane/types';\nimport type { OperationRegistry } from '@prisma-next/operations';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { sqlTargetFamilyHook } from '@prisma-next/sql-contract-emitter';\nimport { validateContract } from '@prisma-next/sql-contract-ts/contract';\nimport type { SqlOperationSignature } from '@prisma-next/sql-operations';\nimport {\n ensureSchemaStatement,\n ensureTableStatement,\n writeContractMarker,\n} from '@prisma-next/sql-runtime';\nimport type { SqlSchemaIR, SqlTableIR } from '@prisma-next/sql-schema-ir/types';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport {\n assembleOperationRegistry,\n extractCodecTypeImports,\n extractExtensionIds,\n extractOperationTypeImports,\n extractParameterizedRenderers,\n extractParameterizedTypeImports,\n} from './assembly';\nimport type { SqlControlAdapter } from './control-adapter';\nimport { verifySqlSchema } from './schema-verify/verify-sql-schema';\nimport { collectSupportedCodecTypeIds, readMarker } from './verify';\n\n/**\n * Converts an OperationManifest (descriptor declarative data) to a SqlOperationSignature.\n * This is SQL-family-specific conversion logic used by instance creation and test utilities.\n */\nexport function convertOperationManifest(manifest: OperationManifest): SqlOperationSignature {\n return {\n forTypeId: manifest.for,\n method: manifest.method,\n args: manifest.args.map((arg: OperationManifest['args'][number]) => {\n if (arg.kind === 'typeId') {\n if (!arg.type) {\n throw new Error('typeId arg must have type property');\n }\n return { kind: 'typeId' as const, type: arg.type };\n }\n if (arg.kind === 'param') {\n return { kind: 'param' as const };\n }\n if (arg.kind === 'literal') {\n return { kind: 'literal' as const };\n }\n throw new Error(`Invalid arg kind: ${(arg as { kind: unknown }).kind}`);\n }),\n returns: (() => {\n if (manifest.returns.kind === 'typeId') {\n return { kind: 'typeId' as const, type: manifest.returns.type };\n }\n if (manifest.returns.kind === 'builtin') {\n return {\n kind: 'builtin' as const,\n type: manifest.returns.type as 'number' | 'boolean' | 'string',\n };\n }\n throw new Error(`Invalid return kind: ${(manifest.returns as { kind: unknown }).kind}`);\n })(),\n lowering: {\n targetFamily: 'sql',\n strategy: manifest.lowering.strategy,\n template: manifest.lowering.template,\n },\n ...(manifest.capabilities ? { capabilities: manifest.capabilities } : {}),\n };\n}\n\n/**\n * Extracts codec type IDs used in contract storage tables.\n * Uses type guards to safely access SQL-specific structure without importing SQL types.\n */\nfunction extractCodecTypeIdsFromContract(contract: unknown): readonly string[] {\n const typeIds = new Set<string>();\n\n // Type guard for SQL contract structure\n if (\n typeof contract === 'object' &&\n contract !== null &&\n 'storage' in contract &&\n typeof contract.storage === 'object' &&\n contract.storage !== null &&\n 'tables' in contract.storage\n ) {\n const storage = contract.storage as { tables?: Record<string, unknown> };\n if (storage.tables && typeof storage.tables === 'object') {\n for (const table of Object.values(storage.tables)) {\n if (\n typeof table === 'object' &&\n table !== null &&\n 'columns' in table &&\n typeof table.columns === 'object' &&\n table.columns !== null\n ) {\n const columns = table.columns as Record<string, { codecId: string } | undefined>;\n for (const column of Object.values(columns)) {\n if (\n column &&\n typeof column === 'object' &&\n 'codecId' in column &&\n typeof column.codecId === 'string'\n ) {\n typeIds.add(column.codecId);\n }\n }\n }\n }\n }\n }\n\n return Array.from(typeIds).sort();\n}\n\n/**\n * Creates a VerifyDatabaseResult object with common structure.\n */\nfunction createVerifyResult(options: {\n ok: boolean;\n code?: string;\n summary: string;\n contractCoreHash: string;\n contractProfileHash?: string;\n marker?: ContractMarkerRecord;\n expectedTargetId: string;\n actualTargetId?: string;\n missingCodecs?: readonly string[];\n codecCoverageSkipped?: boolean;\n configPath?: string;\n contractPath: string;\n totalTime: number;\n}): VerifyDatabaseResult {\n const contract: { coreHash: string; profileHash?: string } = {\n coreHash: options.contractCoreHash,\n };\n if (options.contractProfileHash) {\n contract.profileHash = options.contractProfileHash;\n }\n\n const target: { expected: string; actual?: string } = {\n expected: options.expectedTargetId,\n };\n if (options.actualTargetId) {\n target.actual = options.actualTargetId;\n }\n\n const meta: { contractPath: string; configPath?: string } = {\n contractPath: options.contractPath,\n };\n if (options.configPath) {\n meta.configPath = options.configPath;\n }\n\n const result: VerifyDatabaseResult = {\n ok: options.ok,\n summary: options.summary,\n contract,\n target,\n meta,\n timings: {\n total: options.totalTime,\n },\n };\n\n if (options.code) {\n (result as { code?: string }).code = options.code;\n }\n\n if (options.marker) {\n (result as { marker?: { coreHash: string; profileHash: string } }).marker = {\n coreHash: options.marker.coreHash,\n profileHash: options.marker.profileHash,\n };\n }\n\n if (options.missingCodecs) {\n (result as { missingCodecs?: readonly string[] }).missingCodecs = options.missingCodecs;\n }\n\n if (options.codecCoverageSkipped) {\n (result as { codecCoverageSkipped?: boolean }).codecCoverageSkipped =\n options.codecCoverageSkipped;\n }\n\n return result;\n}\n\n/**\n * Type metadata for SQL storage types.\n * Maps contract storage type IDs to native database types.\n */\ninterface SqlTypeMetadata {\n readonly typeId: string;\n readonly familyId: 'sql';\n readonly targetId: string;\n readonly nativeType?: string;\n}\n\n/**\n * Registry mapping type IDs to their metadata.\n * Keyed by contract storage type ID (e.g., 'pg/int4@1').\n */\ntype SqlTypeMetadataRegistry = Map<string, SqlTypeMetadata>;\n\n/**\n * State fields for SQL family instance that hold assembly data.\n */\ninterface SqlFamilyInstanceState {\n readonly operationRegistry: OperationRegistry;\n readonly codecTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly operationTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly extensionIds: ReadonlyArray<string>;\n readonly typeMetadataRegistry: SqlTypeMetadataRegistry;\n}\n\n/**\n * Options for schema verification.\n */\nexport interface SchemaVerifyOptions {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly strict: boolean;\n readonly context?: OperationContext;\n /**\n * Active framework components participating in this composition.\n * All components must have matching familyId ('sql') and targetId.\n */\n readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'sql', string>>;\n}\n\n/**\n * SQL control family instance interface.\n * Extends ControlFamilyInstance with SQL-specific domain actions.\n */\nexport interface SqlControlFamilyInstance\n extends ControlFamilyInstance<'sql'>,\n SqlFamilyInstanceState {\n /**\n * Validates a contract JSON and returns a validated ContractIR (without mappings).\n * Mappings are runtime-only and should not be part of ContractIR.\n */\n validateContractIR(contractJson: unknown): ContractIR;\n\n /**\n * Verifies the database marker against the contract.\n * Compares target, coreHash, and profileHash.\n */\n verify(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly expectedTargetId: string;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<VerifyDatabaseResult>;\n\n /**\n * Verifies the database schema against the contract.\n * Compares contract requirements against live database schema.\n */\n schemaVerify(options: SchemaVerifyOptions): Promise<VerifyDatabaseSchemaResult>;\n\n /**\n * Signs the database with the contract marker.\n * Writes or updates the contract marker if schema verification passes.\n * This operation is idempotent - if the marker already matches, no changes are made.\n */\n sign(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<SignDatabaseResult>;\n\n /**\n * Introspects the database schema and returns a family-specific schema IR.\n *\n * This is a read-only operation that returns a snapshot of the live database schema.\n * The method is family-owned and delegates to target/adapter-specific introspectors\n * to perform the actual schema introspection.\n *\n * @param options - Introspection options\n * @param options.driver - Control plane driver for database connection\n * @param options.contractIR - Optional contract IR for contract-guided introspection.\n * When provided, families may use it for filtering, optimization, or validation\n * during introspection. The contract IR does not change the meaning of \"what exists\"\n * in the database - it only guides how introspection is performed.\n * @returns Promise resolving to the family-specific Schema IR (e.g., `SqlSchemaIR` for SQL).\n * The IR represents the complete schema snapshot at the time of introspection.\n */\n introspect(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR?: unknown;\n }): Promise<SqlSchemaIR>;\n\n /**\n * Projects a SQL Schema IR into a core schema view for CLI visualization.\n * Converts SqlSchemaIR (tables, columns, indexes, extensions) into a tree structure.\n */\n toSchemaView(schema: SqlSchemaIR): CoreSchemaView;\n\n /**\n * Emits contract JSON and DTS as strings.\n * Uses the instance's preassembled state (operation registry, type imports, extension IDs).\n * Handles stripping mappings and validation internally.\n */\n emitContract(options: { readonly contractIR: ContractIR | unknown }): Promise<EmitContractResult>;\n}\n\n/**\n * SQL family instance type.\n * Maintains backward compatibility with FamilyInstance while implementing SqlControlFamilyInstance.\n */\nexport type SqlFamilyInstance = SqlControlFamilyInstance;\n\ninterface CreateSqlFamilyInstanceOptions<TTargetId extends string> {\n readonly target: ControlTargetDescriptor<'sql', TTargetId>;\n readonly adapter: ControlAdapterDescriptor<'sql', TTargetId>;\n readonly extensionPacks: readonly ControlExtensionDescriptor<'sql', TTargetId>[];\n}\n\nfunction isSqlControlAdapter<TTargetId extends string>(\n value: unknown,\n): value is SqlControlAdapter<TTargetId> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'introspect' in value &&\n typeof (value as { introspect: unknown }).introspect === 'function'\n );\n}\n\n/**\n * Builds a SQL type metadata registry from extension pack manifests.\n * Collects type metadata from target, adapter, and extension pack manifests.\n *\n * @param options - Descriptors for target, adapter, and extensions\n * @returns Registry mapping type IDs to their metadata, filtered by targetId\n */\nfunction buildSqlTypeMetadataRegistry(options: {\n readonly target: ControlTargetDescriptor<'sql', string>;\n readonly adapter: ControlAdapterDescriptor<'sql', string>;\n readonly extensionPacks: readonly ControlExtensionDescriptor<'sql', string>[];\n}): SqlTypeMetadataRegistry {\n const { target, adapter, extensionPacks: extensions } = options;\n const registry = new Map<string, SqlTypeMetadata>();\n\n // Get targetId from adapter (they should match)\n const targetId = adapter.targetId;\n\n // Collect descriptors to iterate over\n const descriptors = [target, adapter, ...extensions];\n\n // Iterate over each descriptor's types\n for (const descriptor of descriptors) {\n const types = descriptor.types;\n const storageTypes = types?.storage;\n\n if (!storageTypes) {\n continue;\n }\n\n // Filter for SQL family and matching targetId\n for (const storageType of storageTypes) {\n if (storageType.familyId === 'sql' && storageType.targetId === targetId) {\n // Use existing entry if present, otherwise create new one\n // Later entries (extensions) can override earlier ones (adapter/target)\n registry.set(storageType.typeId, {\n typeId: storageType.typeId,\n familyId: 'sql',\n targetId: storageType.targetId,\n ...(storageType.nativeType !== undefined ? { nativeType: storageType.nativeType } : {}),\n });\n }\n }\n }\n\n return registry;\n}\n\n/**\n * Creates a SQL family instance for control-plane operations.\n */\nexport function createSqlFamilyInstance<TTargetId extends string>(\n options: CreateSqlFamilyInstanceOptions<TTargetId>,\n): SqlFamilyInstance {\n const { target, adapter, extensionPacks: extensions = [] } = options;\n\n // Build descriptors array for assembly\n // Assembly functions only use manifest and id, so we can pass Control*Descriptor types directly\n const descriptors = [target, adapter, ...extensions];\n\n // Assemble operation registry, type imports, extension IDs, and parameterized renderers\n const operationRegistry = assembleOperationRegistry(descriptors, convertOperationManifest);\n const codecTypeImports = extractCodecTypeImports(descriptors);\n const operationTypeImports = extractOperationTypeImports(descriptors);\n const extensionIds = extractExtensionIds(adapter, target, extensions);\n const parameterizedRenderers = extractParameterizedRenderers(descriptors);\n const parameterizedTypeImports = extractParameterizedTypeImports(descriptors);\n\n // Build type metadata registry from manifests\n const typeMetadataRegistry = buildSqlTypeMetadataRegistry({\n target,\n adapter,\n extensionPacks: extensions,\n });\n\n /**\n * Strips mappings from a contract (mappings are runtime-only).\n */\n function stripMappings(contract: unknown): unknown {\n // Type guard to check if contract has mappings\n if (typeof contract === 'object' && contract !== null && 'mappings' in contract) {\n const { mappings: _mappings, ...contractIR } = contract as {\n mappings?: unknown;\n [key: string]: unknown;\n };\n return contractIR;\n }\n return contract;\n }\n\n return {\n familyId: 'sql',\n operationRegistry,\n codecTypeImports,\n operationTypeImports,\n extensionIds,\n typeMetadataRegistry,\n\n validateContractIR(contractJson: unknown): ContractIR {\n // Validate the contract (this normalizes and validates structure/logic)\n const validated = validateContract<SqlContract<SqlStorage>>(contractJson);\n // Strip mappings before returning ContractIR (mappings are runtime-only)\n // The validated contract has all required ContractIR properties\n const { mappings: _mappings, ...contractIR } = validated;\n return contractIR as ContractIR;\n },\n\n async verify(verifyOptions: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly expectedTargetId: string;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<VerifyDatabaseResult> {\n const { driver, contractIR, expectedTargetId, contractPath, configPath } = verifyOptions;\n const startTime = Date.now();\n\n // Type guard to ensure contract has required properties\n if (\n typeof contractIR !== 'object' ||\n contractIR === null ||\n !('coreHash' in contractIR) ||\n !('target' in contractIR) ||\n typeof contractIR.coreHash !== 'string' ||\n typeof contractIR.target !== 'string'\n ) {\n throw new Error('Contract is missing required fields: coreHash or target');\n }\n\n // Extract contract hashes and target\n const contractCoreHash = contractIR.coreHash;\n const contractProfileHash =\n 'profileHash' in contractIR && typeof contractIR.profileHash === 'string'\n ? contractIR.profileHash\n : undefined;\n const contractTarget = contractIR.target;\n\n // Read marker from database\n const marker = await readMarker(driver);\n\n // Compute codec coverage (optional)\n let missingCodecs: readonly string[] | undefined;\n let codecCoverageSkipped = false;\n const supportedTypeIds = collectSupportedCodecTypeIds<'sql', string>([\n adapter,\n target,\n ...extensions,\n ]);\n if (supportedTypeIds.length === 0) {\n // Helper is present but returns empty (MVP behavior)\n // Coverage check is skipped - missingCodecs remains undefined\n codecCoverageSkipped = true;\n } else {\n const supportedSet = new Set(supportedTypeIds);\n const usedTypeIds = extractCodecTypeIdsFromContract(contractIR);\n const missing = usedTypeIds.filter((id) => !supportedSet.has(id));\n if (missing.length > 0) {\n missingCodecs = missing;\n }\n }\n\n // Check marker presence\n if (!marker) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3001',\n summary: 'Marker missing',\n contractCoreHash,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n // Compare target\n if (contractTarget !== expectedTargetId) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3003',\n summary: 'Target mismatch',\n contractCoreHash,\n marker,\n expectedTargetId,\n actualTargetId: contractTarget,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n // Compare hashes\n if (marker.coreHash !== contractCoreHash) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3002',\n summary: 'Hash mismatch',\n contractCoreHash,\n marker,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n // Compare profile hash if present\n if (contractProfileHash && marker.profileHash !== contractProfileHash) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3002',\n summary: 'Hash mismatch',\n contractCoreHash,\n contractProfileHash,\n marker,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n // Success - all checks passed\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: true,\n summary: 'Database matches contract',\n contractCoreHash,\n marker,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n },\n\n async schemaVerify(options: SchemaVerifyOptions): Promise<VerifyDatabaseSchemaResult> {\n const { driver, contractIR, strict, context, frameworkComponents } = options;\n\n // Validate contractIR as SqlContract<SqlStorage>\n const contract = validateContract<SqlContract<SqlStorage>>(contractIR);\n\n // Introspect live schema (DB I/O)\n const controlAdapter = adapter.create();\n if (!isSqlControlAdapter(controlAdapter)) {\n throw new Error('Adapter does not implement SqlControlAdapter.introspect()');\n }\n const schemaIR = await controlAdapter.introspect(driver, contractIR);\n\n // Pure verification (no I/O) - delegates to extracted pure function\n return verifySqlSchema({\n contract,\n schema: schemaIR,\n strict,\n ...ifDefined('context', context),\n typeMetadataRegistry,\n frameworkComponents,\n });\n },\n async sign(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<SignDatabaseResult> {\n const { driver, contractIR, contractPath, configPath } = options;\n const startTime = Date.now();\n\n // Validate contractIR as SqlContract<SqlStorage>\n const contract = validateContract<SqlContract<SqlStorage>>(contractIR);\n\n // Extract contract hashes and target\n const contractCoreHash = contract.coreHash;\n const contractProfileHash =\n 'profileHash' in contract && typeof contract.profileHash === 'string'\n ? contract.profileHash\n : contractCoreHash;\n const contractTarget = contract.target;\n\n // Ensure marker schema and table exist\n await driver.query(ensureSchemaStatement.sql, ensureSchemaStatement.params);\n await driver.query(ensureTableStatement.sql, ensureTableStatement.params);\n\n // Read existing marker\n const existingMarker = await readMarker(driver);\n\n // Determine if we need to write/update marker\n let markerCreated = false;\n let markerUpdated = false;\n let previousHashes: { coreHash?: string; profileHash?: string } | undefined;\n\n if (!existingMarker) {\n // No marker exists - insert new one\n const write = writeContractMarker({\n coreHash: contractCoreHash,\n profileHash: contractProfileHash,\n contractJson: contractIR,\n canonicalVersion: 1,\n });\n await driver.query(write.insert.sql, write.insert.params);\n markerCreated = true;\n } else {\n // Marker exists - check if hashes differ\n const existingCoreHash = existingMarker.coreHash;\n const existingProfileHash = existingMarker.profileHash;\n\n // Compare hashes (use strict equality to ensure exact match)\n const coreHashMatches = existingCoreHash === contractCoreHash;\n const profileHashMatches = existingProfileHash === contractProfileHash;\n\n if (!coreHashMatches || !profileHashMatches) {\n // Hashes differ - update marker and capture previous hashes for output\n previousHashes = {\n coreHash: existingCoreHash,\n profileHash: existingProfileHash,\n };\n const write = writeContractMarker({\n coreHash: contractCoreHash,\n profileHash: contractProfileHash,\n contractJson: contractIR,\n canonicalVersion: existingMarker.canonicalVersion ?? 1,\n });\n await driver.query(write.update.sql, write.update.params);\n markerUpdated = true;\n }\n // If hashes match, no-op (idempotent) - previousHashes remains undefined\n }\n\n // Build summary message\n let summary: string;\n if (markerCreated) {\n summary = 'Database signed (marker created)';\n } else if (markerUpdated) {\n summary = `Database signed (marker updated from ${previousHashes?.coreHash ?? 'unknown'})`;\n } else {\n summary = 'Database already signed with this contract';\n }\n\n const totalTime = Date.now() - startTime;\n\n return {\n ok: true,\n summary,\n contract: {\n coreHash: contractCoreHash,\n profileHash: contractProfileHash,\n },\n target: {\n expected: contractTarget,\n actual: contractTarget,\n },\n marker: {\n created: markerCreated,\n updated: markerUpdated,\n ...(previousHashes ? { previous: previousHashes } : {}),\n },\n meta: {\n contractPath,\n ...(configPath ? { configPath } : {}),\n },\n timings: {\n total: totalTime,\n },\n };\n },\n async readMarker(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n }): Promise<ContractMarkerRecord | null> {\n return readMarker(options.driver);\n },\n async introspect(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR?: unknown;\n }): Promise<SqlSchemaIR> {\n const { driver, contractIR } = options;\n\n const controlAdapter = adapter.create();\n if (!isSqlControlAdapter(controlAdapter)) {\n throw new Error('Adapter does not implement SqlControlAdapter.introspect()');\n }\n return controlAdapter.introspect(driver, contractIR);\n },\n\n toSchemaView(schema: SqlSchemaIR): CoreSchemaView {\n const rootLabel = 'contract';\n\n // Build table nodes\n const tableNodes: readonly SchemaTreeNode[] = Object.entries(schema.tables).map(\n ([tableName, table]: [string, SqlTableIR]) => {\n const children: SchemaTreeNode[] = [];\n\n // Add column nodes grouped under \"columns\"\n const columnNodes: SchemaTreeNode[] = [];\n for (const [columnName, column] of Object.entries(table.columns)) {\n const nullableText = column.nullable ? '(nullable)' : '(not nullable)';\n // Always display nativeType for introspection (database state)\n const typeDisplay = column.nativeType;\n const label = `${columnName}: ${typeDisplay} ${nullableText}`;\n columnNodes.push({\n kind: 'field',\n id: `column-${tableName}-${columnName}`,\n label,\n meta: {\n nativeType: column.nativeType,\n nullable: column.nullable,\n },\n });\n }\n\n // Add \"columns\" grouping node if there are columns\n if (columnNodes.length > 0) {\n children.push({\n kind: 'collection',\n id: `columns-${tableName}`,\n label: 'columns',\n children: columnNodes,\n });\n }\n\n // Add primary key node if present\n if (table.primaryKey) {\n const pkColumns = table.primaryKey.columns.join(', ');\n children.push({\n kind: 'index',\n id: `primary-key-${tableName}`,\n label: `primary key: ${pkColumns}`,\n meta: {\n columns: table.primaryKey.columns,\n ...(table.primaryKey.name ? { name: table.primaryKey.name } : {}),\n },\n });\n }\n\n // Add unique constraint nodes\n for (const unique of table.uniques) {\n const name = unique.name ?? `${tableName}_${unique.columns.join('_')}_unique`;\n const label = `unique ${name}`;\n children.push({\n kind: 'index',\n id: `unique-${tableName}-${name}`,\n label,\n meta: {\n columns: unique.columns,\n unique: true,\n },\n });\n }\n\n // Add index nodes\n for (const index of table.indexes) {\n const name = index.name ?? `${tableName}_${index.columns.join('_')}_idx`;\n const label = index.unique ? `unique index ${name}` : `index ${name}`;\n children.push({\n kind: 'index',\n id: `index-${tableName}-${name}`,\n label,\n meta: {\n columns: index.columns,\n unique: index.unique,\n },\n });\n }\n\n // Build table meta\n const tableMeta: Record<string, unknown> = {};\n if (table.primaryKey) {\n tableMeta['primaryKey'] = table.primaryKey.columns;\n if (table.primaryKey.name) {\n tableMeta['primaryKeyName'] = table.primaryKey.name;\n }\n }\n if (table.foreignKeys.length > 0) {\n tableMeta['foreignKeys'] = table.foreignKeys.map((fk) => ({\n columns: fk.columns,\n referencedTable: fk.referencedTable,\n referencedColumns: fk.referencedColumns,\n ...(fk.name ? { name: fk.name } : {}),\n }));\n }\n\n const node: SchemaTreeNode = {\n kind: 'entity',\n id: `table-${tableName}`,\n label: `table ${tableName}`,\n ...(Object.keys(tableMeta).length > 0 ? { meta: tableMeta } : {}),\n ...(children.length > 0 ? { children: children as readonly SchemaTreeNode[] } : {}),\n };\n return node;\n },\n );\n\n // Add extension nodes (format: \"extensionName extension is enabled\")\n const extensionNodes: readonly SchemaTreeNode[] = schema.extensions.map((extName) => ({\n kind: 'extension',\n id: `extension-${extName}`,\n label: `${extName} extension is enabled`,\n }));\n\n // Combine all children\n const rootChildren = [...tableNodes, ...extensionNodes];\n\n const rootNode: SchemaTreeNode = {\n kind: 'root',\n id: 'sql-schema',\n label: rootLabel,\n ...(rootChildren.length > 0 ? { children: rootChildren } : {}),\n };\n\n return {\n root: rootNode,\n };\n },\n\n async emitContract({ contractIR }): Promise<EmitContractResult> {\n // Strip mappings if present (mappings are runtime-only)\n const contractWithoutMappings = stripMappings(contractIR);\n\n // Validate and normalize the contract\n const validatedIR = this.validateContractIR(contractWithoutMappings);\n\n const result = await emit(\n validatedIR,\n {\n outputDir: '',\n operationRegistry,\n codecTypeImports,\n operationTypeImports,\n extensionIds,\n parameterizedRenderers,\n parameterizedTypeImports,\n },\n sqlTargetFamilyHook,\n );\n\n return {\n contractJson: result.contractJson,\n contractDts: result.contractDts,\n coreHash: result.coreHash,\n profileHash: result.profileHash,\n };\n },\n };\n}\n"],"mappings":"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","names":["convertOperationManifest","totalTime","options"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assembly.d.ts","sourceRoot":"","sources":["../../src/core/assembly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGrF;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,aAAa,CACtB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GACtC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GACvC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC5C,EACD,wBAAwB,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,kBAAkB,GAC5E,iBAAiB,CAYnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,aAAa,CACtB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GACtC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GACvC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC5C,GACA,aAAa,CAAC,eAAe,CAAC,CAYhC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,aAAa,CACtB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GACtC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GACvC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC5C,GACA,aAAa,CAAC,eAAe,CAAC,CAYhC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,EAChD,MAAM,EAAE,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,EAC9C,UAAU,EAAE,aAAa,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GACnE,aAAa,CAAC,MAAM,CAAC,CAyBvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,aAAa,CACtB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GACtC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GACvC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC5C,GACA,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"assembly.d.ts","sourceRoot":"","sources":["../../src/core/assembly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGrF;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,aAAa,CACtB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GACtC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GACvC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC5C,EACD,wBAAwB,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,kBAAkB,GAC5E,iBAAiB,CAYnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,aAAa,CACtB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GACtC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GACvC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC5C,GACA,aAAa,CAAC,eAAe,CAAC,CAYhC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,aAAa,CACtB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GACtC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GACvC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC5C,GACA,aAAa,CAAC,eAAe,CAAC,CAYhC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,EAChD,MAAM,EAAE,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,EAC9C,UAAU,EAAE,aAAa,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GACnE,aAAa,CAAC,MAAM,CAAC,CAyBvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,aAAa,CACtB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GACtC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GACvC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC5C,GACA,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAyBrC;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,aAAa,CACtB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GACtC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GACvC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC5C,GACA,aAAa,CAAC,eAAe,CAAC,CAWhC"}
|
package/dist/exports/control.js
CHANGED
package/package.json
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/family-sql",
|
|
3
|
-
"version": "0.3.0-pr.98.
|
|
3
|
+
"version": "0.3.0-pr.98.6",
|
|
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/cli": "0.3.0-pr.98.
|
|
10
|
-
"@prisma-next/contract": "0.3.0-pr.98.
|
|
11
|
-
"@prisma-next/core-control-plane": "0.3.0-pr.98.
|
|
12
|
-
"@prisma-next/core-execution-plane": "0.3.0-pr.98.
|
|
13
|
-
"@prisma-next/
|
|
14
|
-
"@prisma-next/
|
|
15
|
-
"@prisma-next/sql-contract": "0.3.0-pr.98.
|
|
16
|
-
"@prisma-next/sql-contract-emitter": "0.3.0-pr.98.
|
|
17
|
-
"@prisma-next/sql-contract-ts": "0.3.0-pr.98.
|
|
18
|
-
"@prisma-next/sql-
|
|
19
|
-
"@prisma-next/sql-
|
|
20
|
-
"@prisma-next/
|
|
21
|
-
"@prisma-next/sql-schema-ir": "0.3.0-pr.98.
|
|
22
|
-
"@prisma-next/
|
|
9
|
+
"@prisma-next/cli": "0.3.0-pr.98.6",
|
|
10
|
+
"@prisma-next/contract": "0.3.0-pr.98.6",
|
|
11
|
+
"@prisma-next/core-control-plane": "0.3.0-pr.98.6",
|
|
12
|
+
"@prisma-next/core-execution-plane": "0.3.0-pr.98.6",
|
|
13
|
+
"@prisma-next/operations": "0.3.0-pr.98.6",
|
|
14
|
+
"@prisma-next/runtime-executor": "0.3.0-pr.98.6",
|
|
15
|
+
"@prisma-next/sql-contract": "0.3.0-pr.98.6",
|
|
16
|
+
"@prisma-next/sql-contract-emitter": "0.3.0-pr.98.6",
|
|
17
|
+
"@prisma-next/sql-contract-ts": "0.3.0-pr.98.6",
|
|
18
|
+
"@prisma-next/sql-operations": "0.3.0-pr.98.6",
|
|
19
|
+
"@prisma-next/sql-relational-core": "0.3.0-pr.98.6",
|
|
20
|
+
"@prisma-next/sql-runtime": "0.3.0-pr.98.6",
|
|
21
|
+
"@prisma-next/sql-schema-ir": "0.3.0-pr.98.6",
|
|
22
|
+
"@prisma-next/utils": "0.3.0-pr.98.6"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"tsup": "8.5.1",
|
|
26
26
|
"typescript": "5.9.3",
|
|
27
27
|
"vitest": "4.0.16",
|
|
28
|
-
"@prisma-next/driver-postgres": "0.3.0-pr.98.
|
|
28
|
+
"@prisma-next/driver-postgres": "0.3.0-pr.98.6",
|
|
29
29
|
"@prisma-next/test-utils": "0.0.1",
|
|
30
30
|
"@prisma-next/tsconfig": "0.0.0"
|
|
31
31
|
},
|
package/src/core/assembly.ts
CHANGED
|
@@ -141,11 +141,10 @@ export function extractParameterizedRenderers(
|
|
|
141
141
|
const owners = new Map<string, string>(); // codecId -> descriptor.id for error messages
|
|
142
142
|
|
|
143
143
|
for (const descriptor of descriptors) {
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
| undefined;
|
|
147
|
-
if (!parameterized) continue;
|
|
144
|
+
const codecTypes = descriptor.types?.codecTypes;
|
|
145
|
+
if (!codecTypes?.parameterized) continue;
|
|
148
146
|
|
|
147
|
+
const parameterized: Record<string, TypeRenderer> = codecTypes.parameterized;
|
|
149
148
|
for (const [codecId, renderer] of Object.entries(parameterized)) {
|
|
150
149
|
const existingOwner = owners.get(codecId);
|
|
151
150
|
if (existingOwner !== undefined) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/assembly.ts","../src/core/instance.ts"],"sourcesContent":["import type {\n NormalizedTypeRenderer,\n TypeRenderer,\n} from '@prisma-next/contract/framework-components';\nimport { normalizeRenderer } from '@prisma-next/contract/framework-components';\nimport type { OperationManifest } from '@prisma-next/contract/pack-manifest-types';\nimport type { TypesImportSpec } from '@prisma-next/contract/types';\nimport type {\n ControlAdapterDescriptor,\n ControlExtensionDescriptor,\n ControlTargetDescriptor,\n} from '@prisma-next/core-control-plane/types';\nimport type { OperationRegistry, OperationSignature } from '@prisma-next/operations';\nimport { createOperationRegistry } from '@prisma-next/operations';\n\n/**\n * Assembles an operation registry from descriptors (adapter, target, extensions).\n * Loops over descriptors, extracts operations, converts them using the provided\n * conversion function, and registers them in a new registry.\n */\nexport function assembleOperationRegistry(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n convertOperationManifest: (manifest: OperationManifest) => OperationSignature,\n): OperationRegistry {\n const registry = createOperationRegistry();\n\n for (const descriptor of descriptors) {\n const operations = descriptor.operations ?? [];\n for (const operationManifest of operations as ReadonlyArray<OperationManifest>) {\n const signature = convertOperationManifest(operationManifest);\n registry.register(signature);\n }\n }\n\n return registry;\n}\n\n/**\n * Extracts codec type imports from descriptors for contract.d.ts generation.\n */\nexport function extractCodecTypeImports(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const types = descriptor.types;\n const codecTypes = types?.codecTypes;\n if (codecTypes?.import) {\n imports.push(codecTypes.import);\n }\n }\n\n return imports;\n}\n\n/**\n * Extracts operation type imports from descriptors for contract.d.ts generation.\n */\nexport function extractOperationTypeImports(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const types = descriptor.types;\n const operationTypes = types?.operationTypes;\n if (operationTypes?.import) {\n imports.push(operationTypes.import);\n }\n }\n\n return imports;\n}\n\n/**\n * Extracts extension IDs from descriptors in deterministic order:\n * [adapter.id, target.id, ...extensions.map(e => e.id)]\n * Deduplicates while preserving stable order.\n */\nexport function extractExtensionIds(\n adapter: ControlAdapterDescriptor<'sql', string>,\n target: ControlTargetDescriptor<'sql', string>,\n extensions: ReadonlyArray<ControlExtensionDescriptor<'sql', string>>,\n): ReadonlyArray<string> {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n // Add adapter first\n if (!seen.has(adapter.id)) {\n ids.push(adapter.id);\n seen.add(adapter.id);\n }\n\n // Add target second\n if (!seen.has(target.id)) {\n ids.push(target.id);\n seen.add(target.id);\n }\n\n // Add extensions in order\n for (const ext of extensions) {\n if (!seen.has(ext.id)) {\n ids.push(ext.id);\n seen.add(ext.id);\n }\n }\n\n return ids;\n}\n\n/**\n * Extracts and normalizes parameterized codec renderers from descriptors.\n * Templates are compiled to functions at this layer.\n *\n * Throws an error if multiple descriptors provide a renderer for the same codecId.\n * This is intentional - duplicate codecId is a hard error, not a silent override.\n *\n * @returns Map from codecId to normalized renderer\n */\nexport function extractParameterizedRenderers(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n): Map<string, NormalizedTypeRenderer> {\n const renderers = new Map<string, NormalizedTypeRenderer>();\n const owners = new Map<string, string>(); // codecId -> descriptor.id for error messages\n\n for (const descriptor of descriptors) {\n const parameterized = descriptor.types?.codecTypes?.parameterized as\n | Record<string, TypeRenderer>\n | undefined;\n if (!parameterized) continue;\n\n for (const [codecId, renderer] of Object.entries(parameterized)) {\n const existingOwner = owners.get(codecId);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate parameterized renderer for codecId \"${codecId}\". ` +\n `Descriptor \"${descriptor.id}\" conflicts with \"${existingOwner}\". ` +\n 'Each codecId can only have one renderer.',\n );\n }\n\n renderers.set(codecId, normalizeRenderer(codecId, renderer));\n owners.set(codecId, descriptor.id);\n }\n }\n\n return renderers;\n}\n\n/**\n * Extracts parameterized type imports from descriptors for contract.d.ts generation.\n * These are type imports needed by parameterized codec renderers.\n *\n * @returns Array of type import specs (may contain duplicates; caller should deduplicate)\n */\nexport function extractParameterizedTypeImports(\n descriptors: ReadonlyArray<\n | ControlTargetDescriptor<'sql', string>\n | ControlAdapterDescriptor<'sql', string>\n | ControlExtensionDescriptor<'sql', string>\n >,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const parameterizedImports = descriptor.types?.codecTypes?.parameterizedImports;\n if (parameterizedImports) {\n imports.push(...parameterizedImports);\n }\n }\n\n return imports;\n}\n","import type { TargetBoundComponentDescriptor } from '@prisma-next/contract/framework-components';\nimport type { ContractIR } from '@prisma-next/contract/ir';\nimport type { OperationManifest } from '@prisma-next/contract/pack-manifest-types';\nimport type { ContractMarkerRecord, TypesImportSpec } from '@prisma-next/contract/types';\nimport { emit } from '@prisma-next/core-control-plane/emission';\nimport type { CoreSchemaView, SchemaTreeNode } from '@prisma-next/core-control-plane/schema-view';\nimport type {\n ControlAdapterDescriptor,\n ControlDriverInstance,\n ControlExtensionDescriptor,\n ControlFamilyInstance,\n ControlTargetDescriptor,\n EmitContractResult,\n OperationContext,\n SignDatabaseResult,\n VerifyDatabaseResult,\n VerifyDatabaseSchemaResult,\n} from '@prisma-next/core-control-plane/types';\nimport type { OperationRegistry } from '@prisma-next/operations';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { sqlTargetFamilyHook } from '@prisma-next/sql-contract-emitter';\nimport { validateContract } from '@prisma-next/sql-contract-ts/contract';\nimport type { SqlOperationSignature } from '@prisma-next/sql-operations';\nimport {\n ensureSchemaStatement,\n ensureTableStatement,\n writeContractMarker,\n} from '@prisma-next/sql-runtime';\nimport type { SqlSchemaIR, SqlTableIR } from '@prisma-next/sql-schema-ir/types';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport {\n assembleOperationRegistry,\n extractCodecTypeImports,\n extractExtensionIds,\n extractOperationTypeImports,\n extractParameterizedRenderers,\n extractParameterizedTypeImports,\n} from './assembly';\nimport type { SqlControlAdapter } from './control-adapter';\nimport { verifySqlSchema } from './schema-verify/verify-sql-schema';\nimport { collectSupportedCodecTypeIds, readMarker } from './verify';\n\n/**\n * Converts an OperationManifest (descriptor declarative data) to a SqlOperationSignature.\n * This is SQL-family-specific conversion logic used by instance creation and test utilities.\n */\nexport function convertOperationManifest(manifest: OperationManifest): SqlOperationSignature {\n return {\n forTypeId: manifest.for,\n method: manifest.method,\n args: manifest.args.map((arg: OperationManifest['args'][number]) => {\n if (arg.kind === 'typeId') {\n if (!arg.type) {\n throw new Error('typeId arg must have type property');\n }\n return { kind: 'typeId' as const, type: arg.type };\n }\n if (arg.kind === 'param') {\n return { kind: 'param' as const };\n }\n if (arg.kind === 'literal') {\n return { kind: 'literal' as const };\n }\n throw new Error(`Invalid arg kind: ${(arg as { kind: unknown }).kind}`);\n }),\n returns: (() => {\n if (manifest.returns.kind === 'typeId') {\n return { kind: 'typeId' as const, type: manifest.returns.type };\n }\n if (manifest.returns.kind === 'builtin') {\n return {\n kind: 'builtin' as const,\n type: manifest.returns.type as 'number' | 'boolean' | 'string',\n };\n }\n throw new Error(`Invalid return kind: ${(manifest.returns as { kind: unknown }).kind}`);\n })(),\n lowering: {\n targetFamily: 'sql',\n strategy: manifest.lowering.strategy,\n template: manifest.lowering.template,\n },\n ...(manifest.capabilities ? { capabilities: manifest.capabilities } : {}),\n };\n}\n\n/**\n * Extracts codec type IDs used in contract storage tables.\n * Uses type guards to safely access SQL-specific structure without importing SQL types.\n */\nfunction extractCodecTypeIdsFromContract(contract: unknown): readonly string[] {\n const typeIds = new Set<string>();\n\n // Type guard for SQL contract structure\n if (\n typeof contract === 'object' &&\n contract !== null &&\n 'storage' in contract &&\n typeof contract.storage === 'object' &&\n contract.storage !== null &&\n 'tables' in contract.storage\n ) {\n const storage = contract.storage as { tables?: Record<string, unknown> };\n if (storage.tables && typeof storage.tables === 'object') {\n for (const table of Object.values(storage.tables)) {\n if (\n typeof table === 'object' &&\n table !== null &&\n 'columns' in table &&\n typeof table.columns === 'object' &&\n table.columns !== null\n ) {\n const columns = table.columns as Record<string, { codecId: string } | undefined>;\n for (const column of Object.values(columns)) {\n if (\n column &&\n typeof column === 'object' &&\n 'codecId' in column &&\n typeof column.codecId === 'string'\n ) {\n typeIds.add(column.codecId);\n }\n }\n }\n }\n }\n }\n\n return Array.from(typeIds).sort();\n}\n\n/**\n * Creates a VerifyDatabaseResult object with common structure.\n */\nfunction createVerifyResult(options: {\n ok: boolean;\n code?: string;\n summary: string;\n contractCoreHash: string;\n contractProfileHash?: string;\n marker?: ContractMarkerRecord;\n expectedTargetId: string;\n actualTargetId?: string;\n missingCodecs?: readonly string[];\n codecCoverageSkipped?: boolean;\n configPath?: string;\n contractPath: string;\n totalTime: number;\n}): VerifyDatabaseResult {\n const contract: { coreHash: string; profileHash?: string } = {\n coreHash: options.contractCoreHash,\n };\n if (options.contractProfileHash) {\n contract.profileHash = options.contractProfileHash;\n }\n\n const target: { expected: string; actual?: string } = {\n expected: options.expectedTargetId,\n };\n if (options.actualTargetId) {\n target.actual = options.actualTargetId;\n }\n\n const meta: { contractPath: string; configPath?: string } = {\n contractPath: options.contractPath,\n };\n if (options.configPath) {\n meta.configPath = options.configPath;\n }\n\n const result: VerifyDatabaseResult = {\n ok: options.ok,\n summary: options.summary,\n contract,\n target,\n meta,\n timings: {\n total: options.totalTime,\n },\n };\n\n if (options.code) {\n (result as { code?: string }).code = options.code;\n }\n\n if (options.marker) {\n (result as { marker?: { coreHash: string; profileHash: string } }).marker = {\n coreHash: options.marker.coreHash,\n profileHash: options.marker.profileHash,\n };\n }\n\n if (options.missingCodecs) {\n (result as { missingCodecs?: readonly string[] }).missingCodecs = options.missingCodecs;\n }\n\n if (options.codecCoverageSkipped) {\n (result as { codecCoverageSkipped?: boolean }).codecCoverageSkipped =\n options.codecCoverageSkipped;\n }\n\n return result;\n}\n\n/**\n * Type metadata for SQL storage types.\n * Maps contract storage type IDs to native database types.\n */\ninterface SqlTypeMetadata {\n readonly typeId: string;\n readonly familyId: 'sql';\n readonly targetId: string;\n readonly nativeType?: string;\n}\n\n/**\n * Registry mapping type IDs to their metadata.\n * Keyed by contract storage type ID (e.g., 'pg/int4@1').\n */\ntype SqlTypeMetadataRegistry = Map<string, SqlTypeMetadata>;\n\n/**\n * State fields for SQL family instance that hold assembly data.\n */\ninterface SqlFamilyInstanceState {\n readonly operationRegistry: OperationRegistry;\n readonly codecTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly operationTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly extensionIds: ReadonlyArray<string>;\n readonly typeMetadataRegistry: SqlTypeMetadataRegistry;\n}\n\n/**\n * Options for schema verification.\n */\nexport interface SchemaVerifyOptions {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly strict: boolean;\n readonly context?: OperationContext;\n /**\n * Active framework components participating in this composition.\n * All components must have matching familyId ('sql') and targetId.\n */\n readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'sql', string>>;\n}\n\n/**\n * SQL control family instance interface.\n * Extends ControlFamilyInstance with SQL-specific domain actions.\n */\nexport interface SqlControlFamilyInstance\n extends ControlFamilyInstance<'sql'>,\n SqlFamilyInstanceState {\n /**\n * Validates a contract JSON and returns a validated ContractIR (without mappings).\n * Mappings are runtime-only and should not be part of ContractIR.\n */\n validateContractIR(contractJson: unknown): ContractIR;\n\n /**\n * Verifies the database marker against the contract.\n * Compares target, coreHash, and profileHash.\n */\n verify(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly expectedTargetId: string;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<VerifyDatabaseResult>;\n\n /**\n * Verifies the database schema against the contract.\n * Compares contract requirements against live database schema.\n */\n schemaVerify(options: SchemaVerifyOptions): Promise<VerifyDatabaseSchemaResult>;\n\n /**\n * Signs the database with the contract marker.\n * Writes or updates the contract marker if schema verification passes.\n * This operation is idempotent - if the marker already matches, no changes are made.\n */\n sign(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<SignDatabaseResult>;\n\n /**\n * Introspects the database schema and returns a family-specific schema IR.\n *\n * This is a read-only operation that returns a snapshot of the live database schema.\n * The method is family-owned and delegates to target/adapter-specific introspectors\n * to perform the actual schema introspection.\n *\n * @param options - Introspection options\n * @param options.driver - Control plane driver for database connection\n * @param options.contractIR - Optional contract IR for contract-guided introspection.\n * When provided, families may use it for filtering, optimization, or validation\n * during introspection. The contract IR does not change the meaning of \"what exists\"\n * in the database - it only guides how introspection is performed.\n * @returns Promise resolving to the family-specific Schema IR (e.g., `SqlSchemaIR` for SQL).\n * The IR represents the complete schema snapshot at the time of introspection.\n */\n introspect(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR?: unknown;\n }): Promise<SqlSchemaIR>;\n\n /**\n * Projects a SQL Schema IR into a core schema view for CLI visualization.\n * Converts SqlSchemaIR (tables, columns, indexes, extensions) into a tree structure.\n */\n toSchemaView(schema: SqlSchemaIR): CoreSchemaView;\n\n /**\n * Emits contract JSON and DTS as strings.\n * Uses the instance's preassembled state (operation registry, type imports, extension IDs).\n * Handles stripping mappings and validation internally.\n */\n emitContract(options: { readonly contractIR: ContractIR | unknown }): Promise<EmitContractResult>;\n}\n\n/**\n * SQL family instance type.\n * Maintains backward compatibility with FamilyInstance while implementing SqlControlFamilyInstance.\n */\nexport type SqlFamilyInstance = SqlControlFamilyInstance;\n\ninterface CreateSqlFamilyInstanceOptions<TTargetId extends string> {\n readonly target: ControlTargetDescriptor<'sql', TTargetId>;\n readonly adapter: ControlAdapterDescriptor<'sql', TTargetId>;\n readonly extensionPacks: readonly ControlExtensionDescriptor<'sql', TTargetId>[];\n}\n\nfunction isSqlControlAdapter<TTargetId extends string>(\n value: unknown,\n): value is SqlControlAdapter<TTargetId> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'introspect' in value &&\n typeof (value as { introspect: unknown }).introspect === 'function'\n );\n}\n\n/**\n * Builds a SQL type metadata registry from extension pack manifests.\n * Collects type metadata from target, adapter, and extension pack manifests.\n *\n * @param options - Descriptors for target, adapter, and extensions\n * @returns Registry mapping type IDs to their metadata, filtered by targetId\n */\nfunction buildSqlTypeMetadataRegistry(options: {\n readonly target: ControlTargetDescriptor<'sql', string>;\n readonly adapter: ControlAdapterDescriptor<'sql', string>;\n readonly extensionPacks: readonly ControlExtensionDescriptor<'sql', string>[];\n}): SqlTypeMetadataRegistry {\n const { target, adapter, extensionPacks: extensions } = options;\n const registry = new Map<string, SqlTypeMetadata>();\n\n // Get targetId from adapter (they should match)\n const targetId = adapter.targetId;\n\n // Collect descriptors to iterate over\n const descriptors = [target, adapter, ...extensions];\n\n // Iterate over each descriptor's types\n for (const descriptor of descriptors) {\n const types = descriptor.types;\n const storageTypes = types?.storage;\n\n if (!storageTypes) {\n continue;\n }\n\n // Filter for SQL family and matching targetId\n for (const storageType of storageTypes) {\n if (storageType.familyId === 'sql' && storageType.targetId === targetId) {\n // Use existing entry if present, otherwise create new one\n // Later entries (extensions) can override earlier ones (adapter/target)\n registry.set(storageType.typeId, {\n typeId: storageType.typeId,\n familyId: 'sql',\n targetId: storageType.targetId,\n ...(storageType.nativeType !== undefined ? { nativeType: storageType.nativeType } : {}),\n });\n }\n }\n }\n\n return registry;\n}\n\n/**\n * Creates a SQL family instance for control-plane operations.\n */\nexport function createSqlFamilyInstance<TTargetId extends string>(\n options: CreateSqlFamilyInstanceOptions<TTargetId>,\n): SqlFamilyInstance {\n const { target, adapter, extensionPacks: extensions = [] } = options;\n\n // Build descriptors array for assembly\n // Assembly functions only use manifest and id, so we can pass Control*Descriptor types directly\n const descriptors = [target, adapter, ...extensions];\n\n // Assemble operation registry, type imports, extension IDs, and parameterized renderers\n const operationRegistry = assembleOperationRegistry(descriptors, convertOperationManifest);\n const codecTypeImports = extractCodecTypeImports(descriptors);\n const operationTypeImports = extractOperationTypeImports(descriptors);\n const extensionIds = extractExtensionIds(adapter, target, extensions);\n const parameterizedRenderers = extractParameterizedRenderers(descriptors);\n const parameterizedTypeImports = extractParameterizedTypeImports(descriptors);\n\n // Build type metadata registry from manifests\n const typeMetadataRegistry = buildSqlTypeMetadataRegistry({\n target,\n adapter,\n extensionPacks: extensions,\n });\n\n /**\n * Strips mappings from a contract (mappings are runtime-only).\n */\n function stripMappings(contract: unknown): unknown {\n // Type guard to check if contract has mappings\n if (typeof contract === 'object' && contract !== null && 'mappings' in contract) {\n const { mappings: _mappings, ...contractIR } = contract as {\n mappings?: unknown;\n [key: string]: unknown;\n };\n return contractIR;\n }\n return contract;\n }\n\n return {\n familyId: 'sql',\n operationRegistry,\n codecTypeImports,\n operationTypeImports,\n extensionIds,\n typeMetadataRegistry,\n\n validateContractIR(contractJson: unknown): ContractIR {\n // Validate the contract (this normalizes and validates structure/logic)\n const validated = validateContract<SqlContract<SqlStorage>>(contractJson);\n // Strip mappings before returning ContractIR (mappings are runtime-only)\n // The validated contract has all required ContractIR properties\n const { mappings: _mappings, ...contractIR } = validated;\n return contractIR as ContractIR;\n },\n\n async verify(verifyOptions: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly expectedTargetId: string;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<VerifyDatabaseResult> {\n const { driver, contractIR, expectedTargetId, contractPath, configPath } = verifyOptions;\n const startTime = Date.now();\n\n // Type guard to ensure contract has required properties\n if (\n typeof contractIR !== 'object' ||\n contractIR === null ||\n !('coreHash' in contractIR) ||\n !('target' in contractIR) ||\n typeof contractIR.coreHash !== 'string' ||\n typeof contractIR.target !== 'string'\n ) {\n throw new Error('Contract is missing required fields: coreHash or target');\n }\n\n // Extract contract hashes and target\n const contractCoreHash = contractIR.coreHash;\n const contractProfileHash =\n 'profileHash' in contractIR && typeof contractIR.profileHash === 'string'\n ? contractIR.profileHash\n : undefined;\n const contractTarget = contractIR.target;\n\n // Read marker from database\n const marker = await readMarker(driver);\n\n // Compute codec coverage (optional)\n let missingCodecs: readonly string[] | undefined;\n let codecCoverageSkipped = false;\n const supportedTypeIds = collectSupportedCodecTypeIds<'sql', string>([\n adapter,\n target,\n ...extensions,\n ]);\n if (supportedTypeIds.length === 0) {\n // Helper is present but returns empty (MVP behavior)\n // Coverage check is skipped - missingCodecs remains undefined\n codecCoverageSkipped = true;\n } else {\n const supportedSet = new Set(supportedTypeIds);\n const usedTypeIds = extractCodecTypeIdsFromContract(contractIR);\n const missing = usedTypeIds.filter((id) => !supportedSet.has(id));\n if (missing.length > 0) {\n missingCodecs = missing;\n }\n }\n\n // Check marker presence\n if (!marker) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3001',\n summary: 'Marker missing',\n contractCoreHash,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n // Compare target\n if (contractTarget !== expectedTargetId) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3003',\n summary: 'Target mismatch',\n contractCoreHash,\n marker,\n expectedTargetId,\n actualTargetId: contractTarget,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n // Compare hashes\n if (marker.coreHash !== contractCoreHash) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3002',\n summary: 'Hash mismatch',\n contractCoreHash,\n marker,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n // Compare profile hash if present\n if (contractProfileHash && marker.profileHash !== contractProfileHash) {\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: false,\n code: 'PN-RTM-3002',\n summary: 'Hash mismatch',\n contractCoreHash,\n contractProfileHash,\n marker,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n }\n\n // Success - all checks passed\n const totalTime = Date.now() - startTime;\n return createVerifyResult({\n ok: true,\n summary: 'Database matches contract',\n contractCoreHash,\n marker,\n expectedTargetId,\n contractPath,\n totalTime,\n ...(contractProfileHash ? { contractProfileHash } : {}),\n ...(missingCodecs ? { missingCodecs } : {}),\n ...(codecCoverageSkipped ? { codecCoverageSkipped } : {}),\n ...(configPath ? { configPath } : {}),\n });\n },\n\n async schemaVerify(options: SchemaVerifyOptions): Promise<VerifyDatabaseSchemaResult> {\n const { driver, contractIR, strict, context, frameworkComponents } = options;\n\n // Validate contractIR as SqlContract<SqlStorage>\n const contract = validateContract<SqlContract<SqlStorage>>(contractIR);\n\n // Introspect live schema (DB I/O)\n const controlAdapter = adapter.create();\n if (!isSqlControlAdapter(controlAdapter)) {\n throw new Error('Adapter does not implement SqlControlAdapter.introspect()');\n }\n const schemaIR = await controlAdapter.introspect(driver, contractIR);\n\n // Pure verification (no I/O) - delegates to extracted pure function\n return verifySqlSchema({\n contract,\n schema: schemaIR,\n strict,\n ...ifDefined('context', context),\n typeMetadataRegistry,\n frameworkComponents,\n });\n },\n async sign(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR: unknown;\n readonly contractPath: string;\n readonly configPath?: string;\n }): Promise<SignDatabaseResult> {\n const { driver, contractIR, contractPath, configPath } = options;\n const startTime = Date.now();\n\n // Validate contractIR as SqlContract<SqlStorage>\n const contract = validateContract<SqlContract<SqlStorage>>(contractIR);\n\n // Extract contract hashes and target\n const contractCoreHash = contract.coreHash;\n const contractProfileHash =\n 'profileHash' in contract && typeof contract.profileHash === 'string'\n ? contract.profileHash\n : contractCoreHash;\n const contractTarget = contract.target;\n\n // Ensure marker schema and table exist\n await driver.query(ensureSchemaStatement.sql, ensureSchemaStatement.params);\n await driver.query(ensureTableStatement.sql, ensureTableStatement.params);\n\n // Read existing marker\n const existingMarker = await readMarker(driver);\n\n // Determine if we need to write/update marker\n let markerCreated = false;\n let markerUpdated = false;\n let previousHashes: { coreHash?: string; profileHash?: string } | undefined;\n\n if (!existingMarker) {\n // No marker exists - insert new one\n const write = writeContractMarker({\n coreHash: contractCoreHash,\n profileHash: contractProfileHash,\n contractJson: contractIR,\n canonicalVersion: 1,\n });\n await driver.query(write.insert.sql, write.insert.params);\n markerCreated = true;\n } else {\n // Marker exists - check if hashes differ\n const existingCoreHash = existingMarker.coreHash;\n const existingProfileHash = existingMarker.profileHash;\n\n // Compare hashes (use strict equality to ensure exact match)\n const coreHashMatches = existingCoreHash === contractCoreHash;\n const profileHashMatches = existingProfileHash === contractProfileHash;\n\n if (!coreHashMatches || !profileHashMatches) {\n // Hashes differ - update marker and capture previous hashes for output\n previousHashes = {\n coreHash: existingCoreHash,\n profileHash: existingProfileHash,\n };\n const write = writeContractMarker({\n coreHash: contractCoreHash,\n profileHash: contractProfileHash,\n contractJson: contractIR,\n canonicalVersion: existingMarker.canonicalVersion ?? 1,\n });\n await driver.query(write.update.sql, write.update.params);\n markerUpdated = true;\n }\n // If hashes match, no-op (idempotent) - previousHashes remains undefined\n }\n\n // Build summary message\n let summary: string;\n if (markerCreated) {\n summary = 'Database signed (marker created)';\n } else if (markerUpdated) {\n summary = `Database signed (marker updated from ${previousHashes?.coreHash ?? 'unknown'})`;\n } else {\n summary = 'Database already signed with this contract';\n }\n\n const totalTime = Date.now() - startTime;\n\n return {\n ok: true,\n summary,\n contract: {\n coreHash: contractCoreHash,\n profileHash: contractProfileHash,\n },\n target: {\n expected: contractTarget,\n actual: contractTarget,\n },\n marker: {\n created: markerCreated,\n updated: markerUpdated,\n ...(previousHashes ? { previous: previousHashes } : {}),\n },\n meta: {\n contractPath,\n ...(configPath ? { configPath } : {}),\n },\n timings: {\n total: totalTime,\n },\n };\n },\n async readMarker(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n }): Promise<ContractMarkerRecord | null> {\n return readMarker(options.driver);\n },\n async introspect(options: {\n readonly driver: ControlDriverInstance<'sql', string>;\n readonly contractIR?: unknown;\n }): Promise<SqlSchemaIR> {\n const { driver, contractIR } = options;\n\n const controlAdapter = adapter.create();\n if (!isSqlControlAdapter(controlAdapter)) {\n throw new Error('Adapter does not implement SqlControlAdapter.introspect()');\n }\n return controlAdapter.introspect(driver, contractIR);\n },\n\n toSchemaView(schema: SqlSchemaIR): CoreSchemaView {\n const rootLabel = 'contract';\n\n // Build table nodes\n const tableNodes: readonly SchemaTreeNode[] = Object.entries(schema.tables).map(\n ([tableName, table]: [string, SqlTableIR]) => {\n const children: SchemaTreeNode[] = [];\n\n // Add column nodes grouped under \"columns\"\n const columnNodes: SchemaTreeNode[] = [];\n for (const [columnName, column] of Object.entries(table.columns)) {\n const nullableText = column.nullable ? '(nullable)' : '(not nullable)';\n // Always display nativeType for introspection (database state)\n const typeDisplay = column.nativeType;\n const label = `${columnName}: ${typeDisplay} ${nullableText}`;\n columnNodes.push({\n kind: 'field',\n id: `column-${tableName}-${columnName}`,\n label,\n meta: {\n nativeType: column.nativeType,\n nullable: column.nullable,\n },\n });\n }\n\n // Add \"columns\" grouping node if there are columns\n if (columnNodes.length > 0) {\n children.push({\n kind: 'collection',\n id: `columns-${tableName}`,\n label: 'columns',\n children: columnNodes,\n });\n }\n\n // Add primary key node if present\n if (table.primaryKey) {\n const pkColumns = table.primaryKey.columns.join(', ');\n children.push({\n kind: 'index',\n id: `primary-key-${tableName}`,\n label: `primary key: ${pkColumns}`,\n meta: {\n columns: table.primaryKey.columns,\n ...(table.primaryKey.name ? { name: table.primaryKey.name } : {}),\n },\n });\n }\n\n // Add unique constraint nodes\n for (const unique of table.uniques) {\n const name = unique.name ?? `${tableName}_${unique.columns.join('_')}_unique`;\n const label = `unique ${name}`;\n children.push({\n kind: 'index',\n id: `unique-${tableName}-${name}`,\n label,\n meta: {\n columns: unique.columns,\n unique: true,\n },\n });\n }\n\n // Add index nodes\n for (const index of table.indexes) {\n const name = index.name ?? `${tableName}_${index.columns.join('_')}_idx`;\n const label = index.unique ? `unique index ${name}` : `index ${name}`;\n children.push({\n kind: 'index',\n id: `index-${tableName}-${name}`,\n label,\n meta: {\n columns: index.columns,\n unique: index.unique,\n },\n });\n }\n\n // Build table meta\n const tableMeta: Record<string, unknown> = {};\n if (table.primaryKey) {\n tableMeta['primaryKey'] = table.primaryKey.columns;\n if (table.primaryKey.name) {\n tableMeta['primaryKeyName'] = table.primaryKey.name;\n }\n }\n if (table.foreignKeys.length > 0) {\n tableMeta['foreignKeys'] = table.foreignKeys.map((fk) => ({\n columns: fk.columns,\n referencedTable: fk.referencedTable,\n referencedColumns: fk.referencedColumns,\n ...(fk.name ? { name: fk.name } : {}),\n }));\n }\n\n const node: SchemaTreeNode = {\n kind: 'entity',\n id: `table-${tableName}`,\n label: `table ${tableName}`,\n ...(Object.keys(tableMeta).length > 0 ? { meta: tableMeta } : {}),\n ...(children.length > 0 ? { children: children as readonly SchemaTreeNode[] } : {}),\n };\n return node;\n },\n );\n\n // Add extension nodes (format: \"extensionName extension is enabled\")\n const extensionNodes: readonly SchemaTreeNode[] = schema.extensions.map((extName) => ({\n kind: 'extension',\n id: `extension-${extName}`,\n label: `${extName} extension is enabled`,\n }));\n\n // Combine all children\n const rootChildren = [...tableNodes, ...extensionNodes];\n\n const rootNode: SchemaTreeNode = {\n kind: 'root',\n id: 'sql-schema',\n label: rootLabel,\n ...(rootChildren.length > 0 ? { children: rootChildren } : {}),\n };\n\n return {\n root: rootNode,\n };\n },\n\n async emitContract({ contractIR }): Promise<EmitContractResult> {\n // Strip mappings if present (mappings are runtime-only)\n const contractWithoutMappings = stripMappings(contractIR);\n\n // Validate and normalize the contract\n const validatedIR = this.validateContractIR(contractWithoutMappings);\n\n const result = await emit(\n validatedIR,\n {\n outputDir: '',\n operationRegistry,\n codecTypeImports,\n operationTypeImports,\n extensionIds,\n parameterizedRenderers,\n parameterizedTypeImports,\n },\n sqlTargetFamilyHook,\n );\n\n return {\n contractJson: result.contractJson,\n contractDts: result.contractDts,\n coreHash: result.coreHash,\n profileHash: result.profileHash,\n };\n },\n };\n}\n"],"mappings":"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","names":["convertOperationManifest","totalTime","options"]}
|