@prisma-next/framework-components 0.5.0-dev.6 → 0.5.0-dev.61

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 (92) hide show
  1. package/README.md +63 -3
  2. package/dist/authoring.d.mts +2 -2
  3. package/dist/authoring.mjs +2 -121
  4. package/dist/codec-BUBJeOk4.d.mts +168 -0
  5. package/dist/codec-BUBJeOk4.d.mts.map +1 -0
  6. package/dist/codec.d.mts +49 -2
  7. package/dist/codec.d.mts.map +1 -0
  8. package/dist/codec.mjs +68 -3
  9. package/dist/codec.mjs.map +1 -1
  10. package/dist/components.d.mts +3 -1
  11. package/dist/components.mjs +1 -1
  12. package/dist/control.d.mts +110 -71
  13. package/dist/control.d.mts.map +1 -1
  14. package/dist/control.mjs +47 -45
  15. package/dist/control.mjs.map +1 -1
  16. package/dist/emission-types-DzNgwiFC.d.mts +39 -0
  17. package/dist/emission-types-DzNgwiFC.d.mts.map +1 -0
  18. package/dist/emission.d.mts +2 -2
  19. package/dist/execution.d.mts +7 -5
  20. package/dist/execution.d.mts.map +1 -1
  21. package/dist/execution.mjs +3 -3
  22. package/dist/execution.mjs.map +1 -1
  23. package/dist/{framework-authoring-D1-JZ37B.d.mts → framework-authoring-DJbiXhmf.d.mts} +41 -12
  24. package/dist/framework-authoring-DJbiXhmf.d.mts.map +1 -0
  25. package/dist/framework-authoring-gi_BJlNO.mjs +206 -0
  26. package/dist/framework-authoring-gi_BJlNO.mjs.map +1 -0
  27. package/dist/{framework-components-EJXe-pum.d.mts → framework-components-BVqm1I48.d.mts} +45 -55
  28. package/dist/framework-components-BVqm1I48.d.mts.map +1 -0
  29. package/dist/{framework-components-C8ZhSwXe.mjs → framework-components-BsWST1Rn.mjs} +2 -2
  30. package/dist/framework-components-BsWST1Rn.mjs.map +1 -0
  31. package/dist/psl-ast-BlDveJZ4.d.mts +159 -0
  32. package/dist/psl-ast-BlDveJZ4.d.mts.map +1 -0
  33. package/dist/psl-ast.d.mts +2 -0
  34. package/dist/psl-ast.mjs +1 -0
  35. package/dist/runtime.d.mts +346 -19
  36. package/dist/runtime.d.mts.map +1 -1
  37. package/dist/runtime.mjs +256 -4
  38. package/dist/runtime.mjs.map +1 -1
  39. package/dist/{types-import-spec-C4sc7wbb.d.mts → types-import-spec-CPhrNJIV.d.mts} +2 -2
  40. package/dist/types-import-spec-CPhrNJIV.d.mts.map +1 -0
  41. package/package.json +7 -4
  42. package/src/control/control-capabilities.ts +71 -0
  43. package/src/{control-descriptors.ts → control/control-descriptors.ts} +7 -7
  44. package/src/{control-instances.ts → control/control-instances.ts} +6 -6
  45. package/src/{control-migration-types.ts → control/control-migration-types.ts} +57 -60
  46. package/src/control/control-operation-preview.ts +23 -0
  47. package/src/{control-stack.ts → control/control-stack.ts} +77 -94
  48. package/src/control/emission-types.ts +49 -0
  49. package/src/control/psl-ast.ts +193 -0
  50. package/src/{execution-descriptors.ts → execution/execution-descriptors.ts} +7 -7
  51. package/src/{execution-instances.ts → execution/execution-instances.ts} +1 -1
  52. package/src/{execution-requirements.ts → execution/execution-requirements.ts} +1 -1
  53. package/src/execution/query-plan.ts +53 -0
  54. package/src/execution/race-against-abort.ts +85 -0
  55. package/src/execution/run-with-middleware.ts +132 -0
  56. package/src/execution/runtime-core.ts +133 -0
  57. package/src/execution/runtime-error.ts +83 -0
  58. package/src/execution/runtime-middleware.ts +182 -0
  59. package/src/exports/authoring.ts +5 -2
  60. package/src/exports/codec.ts +27 -2
  61. package/src/exports/components.ts +2 -2
  62. package/src/exports/control.ts +26 -13
  63. package/src/exports/emission.ts +2 -2
  64. package/src/exports/execution.ts +5 -5
  65. package/src/exports/psl-ast.ts +1 -0
  66. package/src/exports/runtime.ts +17 -5
  67. package/src/shared/codec-descriptor.ts +87 -0
  68. package/src/shared/codec-types.ts +79 -0
  69. package/src/shared/codec.ts +80 -0
  70. package/src/shared/column-spec.ts +83 -0
  71. package/src/{framework-authoring.ts → shared/framework-authoring.ts} +202 -23
  72. package/src/{framework-components.ts → shared/framework-components.ts} +22 -48
  73. package/src/{mutation-default-types.ts → shared/mutation-default-types.ts} +22 -2
  74. package/dist/authoring.mjs.map +0 -1
  75. package/dist/codec-types-B58nCJiu.d.mts +0 -40
  76. package/dist/codec-types-B58nCJiu.d.mts.map +0 -1
  77. package/dist/emission-types-BPAALJbF.d.mts +0 -24
  78. package/dist/emission-types-BPAALJbF.d.mts.map +0 -1
  79. package/dist/framework-authoring-D1-JZ37B.d.mts.map +0 -1
  80. package/dist/framework-components-C8ZhSwXe.mjs.map +0 -1
  81. package/dist/framework-components-EJXe-pum.d.mts.map +0 -1
  82. package/dist/types-import-spec-C4sc7wbb.d.mts.map +0 -1
  83. package/src/codec-types.ts +0 -46
  84. package/src/control-capabilities.ts +0 -34
  85. package/src/emission-types.ts +0 -28
  86. package/src/runtime-error.ts +0 -39
  87. package/src/runtime-middleware.ts +0 -83
  88. /package/src/{control-result-types.ts → control/control-result-types.ts} +0 -0
  89. /package/src/{control-schema-view.ts → control/control-schema-view.ts} +0 -0
  90. /package/src/{async-iterable-result.ts → execution/async-iterable-result.ts} +0 -0
  91. /package/src/{execution-stack.ts → execution/execution-stack.ts} +0 -0
  92. /package/src/{types-import-spec.ts → shared/types-import-spec.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"control.mjs","names":["imports: TypesImportSpec[]","ids: string[]"],"sources":["../src/control-capabilities.ts","../src/control-result-types.ts","../src/control-schema-view.ts","../src/control-stack.ts"],"sourcesContent":["import type { ControlTargetDescriptor } from './control-descriptors';\nimport type { ControlFamilyInstance } from './control-instances';\nimport type { TargetMigrationsCapability } from './control-migration-types';\nimport type { CoreSchemaView } from './control-schema-view';\n\nexport interface MigratableTargetDescriptor<\n TFamilyId extends string,\n TTargetId extends string,\n TFamilyInstance extends ControlFamilyInstance<TFamilyId, unknown> = ControlFamilyInstance<\n TFamilyId,\n unknown\n >,\n> extends ControlTargetDescriptor<TFamilyId, TTargetId> {\n readonly migrations: TargetMigrationsCapability<TFamilyId, TTargetId, TFamilyInstance>;\n}\n\nexport function hasMigrations<TFamilyId extends string, TTargetId extends string>(\n target: ControlTargetDescriptor<TFamilyId, TTargetId>,\n): target is MigratableTargetDescriptor<TFamilyId, TTargetId> {\n return 'migrations' in target && !!(target as Record<string, unknown>)['migrations'];\n}\n\nexport interface SchemaViewCapable<TSchemaIR = unknown> {\n toSchemaView(schema: TSchemaIR): CoreSchemaView;\n}\n\nexport function hasSchemaView<TFamilyId extends string, TSchemaIR>(\n instance: ControlFamilyInstance<TFamilyId, TSchemaIR>,\n): instance is ControlFamilyInstance<TFamilyId, TSchemaIR> & SchemaViewCapable<TSchemaIR> {\n return (\n 'toSchemaView' in instance &&\n typeof (instance as Record<string, unknown>)['toSchemaView'] === 'function'\n );\n}\n","export const VERIFY_CODE_MARKER_MISSING = 'PN-RUN-3001';\nexport const VERIFY_CODE_HASH_MISMATCH = 'PN-RUN-3002';\nexport const VERIFY_CODE_TARGET_MISMATCH = 'PN-RUN-3003';\nexport const VERIFY_CODE_SCHEMA_FAILURE = 'PN-RUN-3010';\n\nexport interface OperationContext {\n readonly contractPath?: string;\n readonly configPath?: string;\n readonly meta?: Readonly<Record<string, unknown>>;\n}\n\nexport interface VerifyDatabaseResult {\n readonly ok: boolean;\n readonly code?: string;\n readonly summary: string;\n readonly contract: {\n readonly storageHash: string;\n readonly profileHash?: string;\n };\n readonly marker?: {\n readonly storageHash?: string;\n readonly profileHash?: string;\n };\n readonly target: {\n readonly expected: string;\n readonly actual?: string;\n };\n readonly missingCodecs?: readonly string[];\n readonly codecCoverageSkipped?: boolean;\n readonly meta?: {\n readonly configPath?: string;\n readonly contractPath: string;\n };\n readonly timings: {\n readonly total: number;\n };\n}\n\nexport interface BaseSchemaIssue {\n readonly kind:\n | 'missing_table'\n | 'missing_column'\n | 'extra_table'\n | 'extra_column'\n | 'extra_primary_key'\n | 'extra_foreign_key'\n | 'extra_unique_constraint'\n | 'extra_index'\n | 'extra_validator'\n | 'type_mismatch'\n | 'type_missing'\n | 'type_values_mismatch'\n | 'nullability_mismatch'\n | 'primary_key_mismatch'\n | 'foreign_key_mismatch'\n | 'unique_constraint_mismatch'\n | 'index_mismatch'\n | 'dependency_missing'\n | 'default_missing'\n | 'default_mismatch'\n | 'extra_default';\n readonly table?: string;\n readonly column?: string;\n readonly indexOrConstraint?: string;\n readonly typeName?: string;\n readonly dependencyId?: string;\n readonly expected?: string;\n readonly actual?: string;\n readonly message: string;\n}\n\nexport interface EnumValuesChangedIssue {\n readonly kind: 'enum_values_changed';\n readonly typeName: string;\n readonly addedValues: readonly string[];\n readonly removedValues: readonly string[];\n readonly message: string;\n}\n\nexport type SchemaIssue = BaseSchemaIssue | EnumValuesChangedIssue;\n\nexport interface SchemaVerificationNode {\n readonly status: 'pass' | 'warn' | 'fail';\n readonly kind: string;\n readonly name: string;\n readonly contractPath: string;\n readonly code: string;\n readonly message: string;\n readonly expected: unknown;\n readonly actual: unknown;\n readonly children: readonly SchemaVerificationNode[];\n}\n\nexport interface VerifyDatabaseSchemaResult {\n readonly ok: boolean;\n readonly code?: string;\n readonly summary: string;\n readonly contract: {\n readonly storageHash: string;\n readonly profileHash?: string;\n };\n readonly target: {\n readonly expected: string;\n readonly actual?: string;\n };\n readonly schema: {\n readonly issues: readonly SchemaIssue[];\n readonly root: SchemaVerificationNode;\n readonly counts: {\n readonly pass: number;\n readonly warn: number;\n readonly fail: number;\n readonly totalNodes: number;\n };\n };\n readonly meta?: {\n readonly configPath?: string;\n readonly contractPath?: string;\n readonly strict: boolean;\n };\n readonly timings: {\n readonly total: number;\n };\n}\n\nexport interface EmitContractResult {\n readonly contractJson: string;\n readonly contractDts: string;\n readonly storageHash: string;\n readonly executionHash?: string;\n readonly profileHash: string;\n}\n\nexport interface IntrospectSchemaResult<TSchemaIR> {\n readonly ok: true;\n readonly summary: string;\n readonly target: {\n readonly familyId: string;\n readonly id: string;\n };\n readonly schema: TSchemaIR;\n readonly meta?: {\n readonly configPath?: string;\n readonly dbUrl?: string;\n };\n readonly timings: {\n readonly total: number;\n };\n}\n\nexport interface SignDatabaseResult {\n readonly ok: boolean;\n readonly summary: string;\n readonly contract: {\n readonly storageHash: string;\n readonly profileHash?: string;\n };\n readonly target: {\n readonly expected: string;\n readonly actual?: string;\n };\n readonly marker: {\n readonly created: boolean;\n readonly updated: boolean;\n readonly previous?: {\n readonly storageHash?: string;\n readonly profileHash?: string;\n };\n };\n readonly meta?: {\n readonly configPath?: string;\n readonly contractPath: string;\n };\n readonly timings: {\n readonly total: number;\n };\n}\n","/**\n * Core schema view types for family-agnostic schema visualization.\n *\n * These types provide a minimal, generic, tree-shaped representation of schemas\n * across families, designed for CLI visualization and lightweight tooling.\n *\n * Families can optionally project their family-specific Schema IR into this\n * core view via the `toSchemaView` method on `FamilyInstance`.\n */\n\nexport type SchemaNodeKind =\n | 'root'\n | 'namespace'\n | 'collection'\n | 'entity'\n | 'field'\n | 'index'\n | 'dependency';\n\nexport interface SchemaTreeVisitor<R> {\n visit(node: SchemaTreeNode): R;\n}\n\nexport interface SchemaTreeNodeOptions {\n readonly kind: SchemaNodeKind;\n readonly id: string;\n readonly label: string;\n readonly meta?: Record<string, unknown>;\n readonly children?: readonly SchemaTreeNode[];\n}\n\nexport class SchemaTreeNode {\n readonly kind: SchemaNodeKind;\n readonly id: string;\n readonly label: string;\n readonly meta?: Record<string, unknown>;\n readonly children?: readonly SchemaTreeNode[];\n\n constructor(options: SchemaTreeNodeOptions) {\n this.kind = options.kind;\n this.id = options.id;\n this.label = options.label;\n if (options.meta !== undefined) this.meta = options.meta;\n if (options.children !== undefined) this.children = options.children;\n Object.freeze(this);\n }\n\n accept<R>(visitor: SchemaTreeVisitor<R>): R {\n return visitor.visit(this);\n }\n}\n\n/**\n * Core schema view providing a family-agnostic tree representation of a schema.\n * Used by CLI and cross-family tooling for visualization.\n */\nexport interface CoreSchemaView {\n readonly root: SchemaTreeNode;\n}\n","import type { CodecLookup } from './codec-types';\nimport type {\n ControlAdapterDescriptor,\n ControlDriverDescriptor,\n ControlExtensionDescriptor,\n ControlFamilyDescriptor,\n ControlTargetDescriptor,\n} from './control-descriptors';\nimport type {\n AuthoringContributions,\n AuthoringFieldNamespace,\n AuthoringFieldPresetDescriptor,\n AuthoringTypeConstructorDescriptor,\n AuthoringTypeNamespace,\n} from './framework-authoring';\nimport type { ComponentMetadata } from './framework-components';\nimport type {\n ControlMutationDefaultEntry,\n ControlMutationDefaults,\n MutationDefaultGeneratorDescriptor,\n} from './mutation-default-types';\nimport type { TypesImportSpec } from './types-import-spec';\n\nexport interface AssembledAuthoringContributions {\n readonly field: AuthoringFieldNamespace;\n readonly type: AuthoringTypeNamespace;\n}\n\nexport interface ControlStack<\n TFamilyId extends string = string,\n TTargetId extends string = string,\n> {\n readonly family: ControlFamilyDescriptor<TFamilyId>;\n readonly target: ControlTargetDescriptor<TFamilyId, TTargetId>;\n readonly adapter?: ControlAdapterDescriptor<TFamilyId, TTargetId> | undefined;\n readonly driver?: ControlDriverDescriptor<TFamilyId, TTargetId> | undefined;\n readonly extensionPacks: readonly ControlExtensionDescriptor<TFamilyId, TTargetId>[];\n\n readonly codecTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly operationTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly queryOperationTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly extensionIds: ReadonlyArray<string>;\n readonly codecLookup: CodecLookup;\n readonly authoringContributions: AssembledAuthoringContributions;\n readonly scalarTypeDescriptors: ReadonlyMap<string, string>;\n readonly controlMutationDefaults: ControlMutationDefaults;\n}\n\nexport interface CreateControlStackInput<\n TFamilyId extends string = string,\n TTargetId extends string = string,\n> {\n readonly family: ControlFamilyDescriptor<TFamilyId>;\n readonly target: ControlTargetDescriptor<TFamilyId, TTargetId>;\n readonly adapter?: ControlAdapterDescriptor<TFamilyId, TTargetId> | undefined;\n readonly driver?: ControlDriverDescriptor<TFamilyId, TTargetId> | undefined;\n readonly extensionPacks?:\n | ReadonlyArray<ControlExtensionDescriptor<TFamilyId, TTargetId>>\n | undefined;\n}\n\nfunction addUniqueId(ids: string[], seen: Set<string>, id: string): void {\n if (!seen.has(id)) {\n ids.push(id);\n seen.add(id);\n }\n}\n\nexport function assertUniqueCodecOwner(options: {\n readonly codecId: string;\n readonly owners: Map<string, string>;\n readonly descriptorId: string;\n readonly entityLabel: string;\n readonly entityOwnershipLabel: string;\n}): void {\n const existingOwner = options.owners.get(options.codecId);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate ${options.entityLabel} for codecId \"${options.codecId}\". ` +\n `Descriptor \"${options.descriptorId}\" conflicts with \"${existingOwner}\". ` +\n `Each codecId can only have one ${options.entityOwnershipLabel}.`,\n );\n }\n}\n\nexport function extractCodecTypeImports(\n descriptors: ReadonlyArray<Pick<ComponentMetadata, 'types'>>,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const codecTypes = descriptor.types?.codecTypes;\n if (codecTypes?.import) {\n imports.push(codecTypes.import);\n }\n if (codecTypes?.typeImports) {\n imports.push(...codecTypes.typeImports);\n }\n }\n\n return imports;\n}\n\nexport function extractOperationTypeImports(\n descriptors: ReadonlyArray<Pick<ComponentMetadata, 'types'>>,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const operationTypes = descriptor.types?.operationTypes;\n if (operationTypes?.import) {\n imports.push(operationTypes.import);\n }\n }\n\n return imports;\n}\n\nexport function extractQueryOperationTypeImports(\n descriptors: ReadonlyArray<Pick<ComponentMetadata, 'types'>>,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const queryOperationTypes = descriptor.types?.queryOperationTypes;\n if (queryOperationTypes?.import) {\n imports.push(queryOperationTypes.import);\n }\n }\n\n return imports;\n}\n\nexport function extractComponentIds(\n family: { readonly id: string },\n target: { readonly id: string },\n adapter: { readonly id: string } | undefined,\n extensions: ReadonlyArray<{ readonly id: string }>,\n): ReadonlyArray<string> {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n addUniqueId(ids, seen, family.id);\n addUniqueId(ids, seen, target.id);\n if (adapter) {\n addUniqueId(ids, seen, adapter.id);\n }\n\n for (const ext of extensions) {\n addUniqueId(ids, seen, ext.id);\n }\n\n return ids;\n}\n\nfunction isTypeConstructorDescriptor(value: unknown): value is AuthoringTypeConstructorDescriptor {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { kind?: unknown }).kind === 'typeConstructor'\n );\n}\n\nfunction isFieldPresetDescriptor(value: unknown): value is AuthoringFieldPresetDescriptor {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { kind?: unknown }).kind === 'fieldPreset'\n );\n}\n\nfunction mergeAuthoringNamespaces(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n path: readonly string[],\n leafGuard: (value: unknown) => boolean,\n label: string,\n): void {\n const assertSafePath = (currentPath: readonly string[]) => {\n const blockedSegment = currentPath.find(\n (segment) => segment === '__proto__' || segment === 'constructor' || segment === 'prototype',\n );\n if (blockedSegment) {\n throw new Error(\n `Invalid authoring ${label} helper \"${currentPath.join('.')}\". Helper path segments must not use \"${blockedSegment}\".`,\n );\n }\n };\n\n for (const [key, sourceValue] of Object.entries(source)) {\n const currentPath = [...path, key];\n assertSafePath(currentPath);\n const hasExistingValue = Object.hasOwn(target, key);\n const existingValue = hasExistingValue ? target[key] : undefined;\n\n if (!hasExistingValue) {\n target[key] = sourceValue;\n continue;\n }\n\n const existingIsLeaf = leafGuard(existingValue);\n const sourceIsLeaf = leafGuard(sourceValue);\n\n if (existingIsLeaf || sourceIsLeaf) {\n throw new Error(\n `Duplicate authoring ${label} helper \"${currentPath.join('.')}\". Descriptor contributions must be unique across composed components.`,\n );\n }\n\n mergeAuthoringNamespaces(\n existingValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>,\n currentPath,\n leafGuard,\n label,\n );\n }\n}\n\nexport function assembleAuthoringContributions(\n descriptors: ReadonlyArray<{ readonly authoring?: AuthoringContributions }>,\n): AssembledAuthoringContributions {\n const field = {} as Record<string, unknown>;\n const type = {} as Record<string, unknown>;\n\n for (const descriptor of descriptors) {\n if (descriptor.authoring?.field) {\n mergeAuthoringNamespaces(\n field,\n descriptor.authoring.field,\n [],\n isFieldPresetDescriptor,\n 'field',\n );\n }\n if (!descriptor.authoring?.type) {\n continue;\n }\n mergeAuthoringNamespaces(\n type,\n descriptor.authoring.type,\n [],\n isTypeConstructorDescriptor,\n 'type',\n );\n }\n\n return {\n field: field as AuthoringFieldNamespace,\n type: type as AuthoringTypeNamespace,\n };\n}\n\nexport function assembleScalarTypeDescriptors(\n descriptors: ReadonlyArray<\n Pick<ComponentMetadata, 'scalarTypeDescriptors'> & { readonly id?: string }\n >,\n): ReadonlyMap<string, string> {\n const result = new Map<string, string>();\n const owners = new Map<string, string>();\n\n for (const descriptor of descriptors) {\n const descriptorMap = descriptor.scalarTypeDescriptors;\n if (!descriptorMap) continue;\n const descriptorId = descriptor.id ?? '<unknown>';\n for (const [typeName, codecId] of descriptorMap) {\n const existingOwner = owners.get(typeName);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate scalar type descriptor \"${typeName}\". ` +\n `Descriptor \"${descriptorId}\" conflicts with \"${existingOwner}\".`,\n );\n }\n result.set(typeName, codecId);\n owners.set(typeName, descriptorId);\n }\n }\n\n return result;\n}\n\nexport function assembleControlMutationDefaults(\n descriptors: ReadonlyArray<\n Pick<ComponentMetadata, 'controlMutationDefaults'> & { readonly id?: string }\n >,\n): ControlMutationDefaults {\n const defaultFunctionRegistry = new Map<string, ControlMutationDefaultEntry>();\n const functionOwners = new Map<string, string>();\n const generatorMap = new Map<string, MutationDefaultGeneratorDescriptor>();\n const generatorOwners = new Map<string, string>();\n\n for (const descriptor of descriptors) {\n const contributions = descriptor.controlMutationDefaults;\n if (!contributions) continue;\n const descriptorId = descriptor.id ?? '<unknown>';\n\n for (const generatorDescriptor of contributions.generatorDescriptors) {\n const existingOwner = generatorOwners.get(generatorDescriptor.id);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate mutation default generator id \"${generatorDescriptor.id}\". ` +\n `Descriptor \"${descriptorId}\" conflicts with \"${existingOwner}\".`,\n );\n }\n generatorMap.set(generatorDescriptor.id, generatorDescriptor);\n generatorOwners.set(generatorDescriptor.id, descriptorId);\n }\n\n for (const [functionName, handler] of contributions.defaultFunctionRegistry) {\n const existingOwner = functionOwners.get(functionName);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate mutation default function \"${functionName}\". ` +\n `Descriptor \"${descriptorId}\" conflicts with \"${existingOwner}\".`,\n );\n }\n defaultFunctionRegistry.set(functionName, handler);\n functionOwners.set(functionName, descriptorId);\n }\n }\n\n return {\n defaultFunctionRegistry,\n generatorDescriptors: Array.from(generatorMap.values()),\n };\n}\n\nexport function extractCodecLookup(\n descriptors: ReadonlyArray<Pick<ComponentMetadata & { id?: string }, 'types' | 'id'>>,\n): CodecLookup {\n const byId = new Map<string, import('./codec-types').Codec>();\n const owners = new Map<string, string>();\n for (const descriptor of descriptors) {\n const codecInstances = descriptor.types?.codecTypes?.codecInstances;\n if (!codecInstances) continue;\n const descriptorId = descriptor.id ?? '<unknown>';\n for (const codec of codecInstances) {\n assertUniqueCodecOwner({\n codecId: codec.id,\n owners,\n descriptorId,\n entityLabel: 'codec instance',\n entityOwnershipLabel: 'codec instance provider',\n });\n owners.set(codec.id, descriptorId);\n byId.set(codec.id, codec);\n }\n }\n return { get: (id) => byId.get(id) };\n}\n\nexport function validateScalarTypeCodecIds(\n scalarTypeDescriptors: ReadonlyMap<string, string>,\n codecLookup: CodecLookup,\n): string[] {\n const errors: string[] = [];\n for (const [typeName, codecId] of scalarTypeDescriptors) {\n if (!codecLookup.get(codecId)) {\n errors.push(\n `Scalar type \"${typeName}\" references codec \"${codecId}\" which is not registered by any component.`,\n );\n }\n }\n return errors;\n}\n\nexport function createControlStack<TFamilyId extends string, TTargetId extends string>(\n input: CreateControlStackInput<TFamilyId, TTargetId>,\n): ControlStack<TFamilyId, TTargetId> {\n const { family, target, adapter, driver, extensionPacks = [] } = input;\n\n const allDescriptors = [family, target, ...(adapter ? [adapter] : []), ...extensionPacks];\n\n const codecLookup = extractCodecLookup(allDescriptors);\n const scalarTypeDescriptors = assembleScalarTypeDescriptors(allDescriptors);\n\n return {\n family,\n target,\n adapter,\n driver,\n extensionPacks: extensionPacks as readonly ControlExtensionDescriptor<TFamilyId, TTargetId>[],\n\n codecTypeImports: extractCodecTypeImports(allDescriptors),\n operationTypeImports: extractOperationTypeImports(allDescriptors),\n queryOperationTypeImports: extractQueryOperationTypeImports(allDescriptors),\n extensionIds: extractComponentIds(family, target, adapter, extensionPacks),\n codecLookup,\n authoringContributions: assembleAuthoringContributions(allDescriptors),\n scalarTypeDescriptors,\n controlMutationDefaults: assembleControlMutationDefaults(allDescriptors),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"control.mjs","names":["imports: TypesImportSpec[]","ids: string[]"],"sources":["../src/control/control-capabilities.ts","../src/control/control-result-types.ts","../src/control/control-schema-view.ts","../src/control/control-stack.ts"],"sourcesContent":["import type { ControlTargetDescriptor } from './control-descriptors';\nimport type { ControlFamilyInstance } from './control-instances';\nimport type { MigrationPlanOperation, TargetMigrationsCapability } from './control-migration-types';\nimport type { OperationPreview } from './control-operation-preview';\nimport type { CoreSchemaView } from './control-schema-view';\nimport type { PslDocumentAst } from './psl-ast';\n\nexport interface MigratableTargetDescriptor<\n TFamilyId extends string,\n TTargetId extends string,\n TFamilyInstance extends ControlFamilyInstance<TFamilyId, unknown> = ControlFamilyInstance<\n TFamilyId,\n unknown\n >,\n> extends ControlTargetDescriptor<TFamilyId, TTargetId> {\n readonly migrations: TargetMigrationsCapability<TFamilyId, TTargetId, TFamilyInstance>;\n}\n\nexport function hasMigrations<TFamilyId extends string, TTargetId extends string>(\n target: ControlTargetDescriptor<TFamilyId, TTargetId>,\n): target is MigratableTargetDescriptor<TFamilyId, TTargetId> {\n return 'migrations' in target && !!(target as Record<string, unknown>)['migrations'];\n}\n\nexport interface SchemaViewCapable<TSchemaIR = unknown> {\n toSchemaView(schema: TSchemaIR): CoreSchemaView;\n}\n\nexport function hasSchemaView<TFamilyId extends string, TSchemaIR>(\n instance: ControlFamilyInstance<TFamilyId, TSchemaIR>,\n): instance is ControlFamilyInstance<TFamilyId, TSchemaIR> & SchemaViewCapable<TSchemaIR> {\n return (\n 'toSchemaView' in instance &&\n typeof (instance as Record<string, unknown>)['toSchemaView'] === 'function'\n );\n}\n\n/**\n * Capability declaring that a family can infer a PSL contract AST from its\n * opaque introspected schema IR. Consumed by `prisma-next contract infer`.\n */\nexport interface PslContractInferCapable<TSchemaIR = unknown> {\n inferPslContract(schemaIR: TSchemaIR): PslDocumentAst;\n}\n\nexport function hasPslContractInfer<TFamilyId extends string, TSchemaIR>(\n instance: ControlFamilyInstance<TFamilyId, TSchemaIR>,\n): instance is ControlFamilyInstance<TFamilyId, TSchemaIR> & PslContractInferCapable<TSchemaIR> {\n return (\n 'inferPslContract' in instance &&\n typeof (instance as Record<string, unknown>)['inferPslContract'] === 'function'\n );\n}\n\n/**\n * Capability declaring that a family can render a textual preview of migration\n * operations for the CLI's \"DDL preview\" output. SQL families emit\n * `language: 'sql'` statements; Mongo families emit `language: 'mongodb-shell'`.\n */\nexport interface OperationPreviewCapable {\n toOperationPreview(operations: readonly MigrationPlanOperation[]): OperationPreview;\n}\n\nexport function hasOperationPreview<TFamilyId extends string, TSchemaIR>(\n instance: ControlFamilyInstance<TFamilyId, TSchemaIR>,\n): instance is ControlFamilyInstance<TFamilyId, TSchemaIR> & OperationPreviewCapable {\n return (\n 'toOperationPreview' in instance &&\n typeof (instance as Record<string, unknown>)['toOperationPreview'] === 'function'\n );\n}\n","export const VERIFY_CODE_MARKER_MISSING = 'PN-RUN-3001';\nexport const VERIFY_CODE_HASH_MISMATCH = 'PN-RUN-3002';\nexport const VERIFY_CODE_TARGET_MISMATCH = 'PN-RUN-3003';\nexport const VERIFY_CODE_SCHEMA_FAILURE = 'PN-RUN-3010';\n\nexport interface OperationContext {\n readonly contractPath?: string;\n readonly configPath?: string;\n readonly meta?: Readonly<Record<string, unknown>>;\n}\n\nexport interface VerifyDatabaseResult {\n readonly ok: boolean;\n readonly code?: string;\n readonly summary: string;\n readonly contract: {\n readonly storageHash: string;\n readonly profileHash?: string;\n };\n readonly marker?: {\n readonly storageHash?: string;\n readonly profileHash?: string;\n };\n readonly target: {\n readonly expected: string;\n readonly actual?: string;\n };\n readonly missingCodecs?: readonly string[];\n readonly codecCoverageSkipped?: boolean;\n readonly meta?: {\n readonly configPath?: string;\n readonly contractPath: string;\n };\n readonly timings: {\n readonly total: number;\n };\n}\n\nexport interface BaseSchemaIssue {\n readonly kind:\n | 'missing_table'\n | 'missing_column'\n | 'extra_table'\n | 'extra_column'\n | 'extra_primary_key'\n | 'extra_foreign_key'\n | 'extra_unique_constraint'\n | 'extra_index'\n | 'extra_validator'\n | 'type_mismatch'\n | 'type_missing'\n | 'type_values_mismatch'\n | 'nullability_mismatch'\n | 'primary_key_mismatch'\n | 'foreign_key_mismatch'\n | 'unique_constraint_mismatch'\n | 'index_mismatch'\n | 'dependency_missing'\n | 'default_missing'\n | 'default_mismatch'\n | 'extra_default';\n readonly table?: string;\n readonly column?: string;\n readonly indexOrConstraint?: string;\n readonly typeName?: string;\n readonly dependencyId?: string;\n readonly expected?: string;\n readonly actual?: string;\n readonly message: string;\n}\n\nexport interface EnumValuesChangedIssue {\n readonly kind: 'enum_values_changed';\n readonly typeName: string;\n readonly addedValues: readonly string[];\n readonly removedValues: readonly string[];\n readonly message: string;\n}\n\nexport type SchemaIssue = BaseSchemaIssue | EnumValuesChangedIssue;\n\nexport interface SchemaVerificationNode {\n readonly status: 'pass' | 'warn' | 'fail';\n readonly kind: string;\n readonly name: string;\n readonly contractPath: string;\n readonly code: string;\n readonly message: string;\n readonly expected: unknown;\n readonly actual: unknown;\n readonly children: readonly SchemaVerificationNode[];\n}\n\nexport interface VerifyDatabaseSchemaResult {\n readonly ok: boolean;\n readonly code?: string;\n readonly summary: string;\n readonly contract: {\n readonly storageHash: string;\n readonly profileHash?: string;\n };\n readonly target: {\n readonly expected: string;\n readonly actual?: string;\n };\n readonly schema: {\n readonly issues: readonly SchemaIssue[];\n readonly root: SchemaVerificationNode;\n readonly counts: {\n readonly pass: number;\n readonly warn: number;\n readonly fail: number;\n readonly totalNodes: number;\n };\n };\n readonly meta?: {\n readonly configPath?: string;\n readonly contractPath?: string;\n readonly strict: boolean;\n };\n readonly timings: {\n readonly total: number;\n };\n}\n\nexport interface EmitContractResult {\n readonly contractJson: string;\n readonly contractDts: string;\n readonly storageHash: string;\n readonly executionHash?: string;\n readonly profileHash: string;\n}\n\nexport interface IntrospectSchemaResult<TSchemaIR> {\n readonly ok: true;\n readonly summary: string;\n readonly target: {\n readonly familyId: string;\n readonly id: string;\n };\n readonly schema: TSchemaIR;\n readonly meta?: {\n readonly configPath?: string;\n readonly dbUrl?: string;\n };\n readonly timings: {\n readonly total: number;\n };\n}\n\nexport interface SignDatabaseResult {\n readonly ok: boolean;\n readonly summary: string;\n readonly contract: {\n readonly storageHash: string;\n readonly profileHash?: string;\n };\n readonly target: {\n readonly expected: string;\n readonly actual?: string;\n };\n readonly marker: {\n readonly created: boolean;\n readonly updated: boolean;\n readonly previous?: {\n readonly storageHash?: string;\n readonly profileHash?: string;\n };\n };\n readonly meta?: {\n readonly configPath?: string;\n readonly contractPath: string;\n };\n readonly timings: {\n readonly total: number;\n };\n}\n","/**\n * Core schema view types for family-agnostic schema visualization.\n *\n * These types provide a minimal, generic, tree-shaped representation of schemas\n * across families, designed for CLI visualization and lightweight tooling.\n *\n * Families can optionally project their family-specific Schema IR into this\n * core view via the `toSchemaView` method on `FamilyInstance`.\n */\n\nexport type SchemaNodeKind =\n | 'root'\n | 'namespace'\n | 'collection'\n | 'entity'\n | 'field'\n | 'index'\n | 'dependency';\n\nexport interface SchemaTreeVisitor<R> {\n visit(node: SchemaTreeNode): R;\n}\n\nexport interface SchemaTreeNodeOptions {\n readonly kind: SchemaNodeKind;\n readonly id: string;\n readonly label: string;\n readonly meta?: Record<string, unknown>;\n readonly children?: readonly SchemaTreeNode[];\n}\n\nexport class SchemaTreeNode {\n readonly kind: SchemaNodeKind;\n readonly id: string;\n readonly label: string;\n readonly meta?: Record<string, unknown>;\n readonly children?: readonly SchemaTreeNode[];\n\n constructor(options: SchemaTreeNodeOptions) {\n this.kind = options.kind;\n this.id = options.id;\n this.label = options.label;\n if (options.meta !== undefined) this.meta = options.meta;\n if (options.children !== undefined) this.children = options.children;\n Object.freeze(this);\n }\n\n accept<R>(visitor: SchemaTreeVisitor<R>): R {\n return visitor.visit(this);\n }\n}\n\n/**\n * Core schema view providing a family-agnostic tree representation of a schema.\n * Used by CLI and cross-family tooling for visualization.\n */\nexport interface CoreSchemaView {\n readonly root: SchemaTreeNode;\n}\n","import type { Codec } from '../shared/codec';\nimport type { CodecLookup, CodecMeta } from '../shared/codec-types';\nimport type {\n AuthoringContributions,\n AuthoringFieldNamespace,\n AuthoringTypeNamespace,\n} from '../shared/framework-authoring';\nimport {\n assertNoCrossRegistryCollisions,\n isAuthoringFieldPresetDescriptor,\n isAuthoringTypeConstructorDescriptor,\n mergeAuthoringNamespaces,\n} from '../shared/framework-authoring';\nimport type { ComponentMetadata } from '../shared/framework-components';\nimport type {\n ControlMutationDefaultEntry,\n ControlMutationDefaults,\n MutationDefaultGeneratorDescriptor,\n} from '../shared/mutation-default-types';\nimport type { TypesImportSpec } from '../shared/types-import-spec';\nimport type {\n ControlAdapterDescriptor,\n ControlDriverDescriptor,\n ControlExtensionDescriptor,\n ControlFamilyDescriptor,\n ControlTargetDescriptor,\n} from './control-descriptors';\n\nexport interface AssembledAuthoringContributions {\n readonly field: AuthoringFieldNamespace;\n readonly type: AuthoringTypeNamespace;\n}\n\nexport interface ControlStack<\n TFamilyId extends string = string,\n TTargetId extends string = string,\n> {\n readonly family: ControlFamilyDescriptor<TFamilyId>;\n readonly target: ControlTargetDescriptor<TFamilyId, TTargetId>;\n readonly adapter?: ControlAdapterDescriptor<TFamilyId, TTargetId> | undefined;\n readonly driver?: ControlDriverDescriptor<TFamilyId, TTargetId> | undefined;\n readonly extensionPacks: readonly ControlExtensionDescriptor<TFamilyId, TTargetId>[];\n\n readonly codecTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly operationTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly queryOperationTypeImports: ReadonlyArray<TypesImportSpec>;\n readonly extensionIds: ReadonlyArray<string>;\n readonly codecLookup: CodecLookup;\n readonly authoringContributions: AssembledAuthoringContributions;\n readonly scalarTypeDescriptors: ReadonlyMap<string, string>;\n readonly controlMutationDefaults: ControlMutationDefaults;\n}\n\nexport interface CreateControlStackInput<\n TFamilyId extends string = string,\n TTargetId extends string = string,\n> {\n readonly family: ControlFamilyDescriptor<TFamilyId>;\n readonly target: ControlTargetDescriptor<TFamilyId, TTargetId>;\n readonly adapter?: ControlAdapterDescriptor<TFamilyId, TTargetId> | undefined;\n readonly driver?: ControlDriverDescriptor<TFamilyId, TTargetId> | undefined;\n readonly extensionPacks?:\n | ReadonlyArray<ControlExtensionDescriptor<TFamilyId, TTargetId>>\n | undefined;\n}\n\nfunction addUniqueId(ids: string[], seen: Set<string>, id: string): void {\n if (!seen.has(id)) {\n ids.push(id);\n seen.add(id);\n }\n}\n\nexport function assertUniqueCodecOwner(options: {\n readonly codecId: string;\n readonly owners: Map<string, string>;\n readonly descriptorId: string;\n readonly entityLabel: string;\n readonly entityOwnershipLabel: string;\n}): void {\n const existingOwner = options.owners.get(options.codecId);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate ${options.entityLabel} for codecId \"${options.codecId}\". ` +\n `Descriptor \"${options.descriptorId}\" conflicts with \"${existingOwner}\". ` +\n `Each codecId can only have one ${options.entityOwnershipLabel}.`,\n );\n }\n}\n\nexport function extractCodecTypeImports(\n descriptors: ReadonlyArray<Pick<ComponentMetadata, 'types'>>,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const codecTypes = descriptor.types?.codecTypes;\n if (codecTypes?.import) {\n imports.push(codecTypes.import);\n }\n if (codecTypes?.typeImports) {\n imports.push(...codecTypes.typeImports);\n }\n }\n\n return imports;\n}\n\nexport function extractOperationTypeImports(\n descriptors: ReadonlyArray<Pick<ComponentMetadata, 'types'>>,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const operationTypes = descriptor.types?.operationTypes;\n if (operationTypes?.import) {\n imports.push(operationTypes.import);\n }\n }\n\n return imports;\n}\n\nexport function extractQueryOperationTypeImports(\n descriptors: ReadonlyArray<Pick<ComponentMetadata, 'types'>>,\n): ReadonlyArray<TypesImportSpec> {\n const imports: TypesImportSpec[] = [];\n\n for (const descriptor of descriptors) {\n const queryOperationTypes = descriptor.types?.queryOperationTypes;\n if (queryOperationTypes?.import) {\n imports.push(queryOperationTypes.import);\n }\n }\n\n return imports;\n}\n\nexport function extractComponentIds(\n family: { readonly id: string },\n target: { readonly id: string },\n adapter: { readonly id: string } | undefined,\n extensions: ReadonlyArray<{ readonly id: string }>,\n): ReadonlyArray<string> {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n addUniqueId(ids, seen, family.id);\n addUniqueId(ids, seen, target.id);\n if (adapter) {\n addUniqueId(ids, seen, adapter.id);\n }\n\n for (const ext of extensions) {\n addUniqueId(ids, seen, ext.id);\n }\n\n return ids;\n}\n\nexport function assembleAuthoringContributions(\n descriptors: ReadonlyArray<{ readonly authoring?: AuthoringContributions }>,\n): AssembledAuthoringContributions {\n const field = {} as Record<string, unknown>;\n const type = {} as Record<string, unknown>;\n\n for (const descriptor of descriptors) {\n if (descriptor.authoring?.field) {\n mergeAuthoringNamespaces(\n field,\n descriptor.authoring.field,\n [],\n isAuthoringFieldPresetDescriptor,\n 'field',\n );\n }\n if (!descriptor.authoring?.type) {\n continue;\n }\n mergeAuthoringNamespaces(\n type,\n descriptor.authoring.type,\n [],\n isAuthoringTypeConstructorDescriptor,\n 'type',\n );\n }\n\n const fieldNamespace = field as AuthoringFieldNamespace;\n const typeNamespace = type as AuthoringTypeNamespace;\n assertNoCrossRegistryCollisions(typeNamespace, fieldNamespace);\n\n return {\n field: fieldNamespace,\n type: typeNamespace,\n };\n}\n\nexport function assembleScalarTypeDescriptors(\n descriptors: ReadonlyArray<\n Pick<ComponentMetadata, 'scalarTypeDescriptors'> & { readonly id?: string }\n >,\n): ReadonlyMap<string, string> {\n const result = new Map<string, string>();\n const owners = new Map<string, string>();\n\n for (const descriptor of descriptors) {\n const descriptorMap = descriptor.scalarTypeDescriptors;\n if (!descriptorMap) continue;\n const descriptorId = descriptor.id ?? '<unknown>';\n for (const [typeName, codecId] of descriptorMap) {\n const existingOwner = owners.get(typeName);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate scalar type descriptor \"${typeName}\". ` +\n `Descriptor \"${descriptorId}\" conflicts with \"${existingOwner}\".`,\n );\n }\n result.set(typeName, codecId);\n owners.set(typeName, descriptorId);\n }\n }\n\n return result;\n}\n\nexport function assembleControlMutationDefaults(\n descriptors: ReadonlyArray<\n Pick<ComponentMetadata, 'controlMutationDefaults'> & { readonly id?: string }\n >,\n): ControlMutationDefaults {\n const defaultFunctionRegistry = new Map<string, ControlMutationDefaultEntry>();\n const functionOwners = new Map<string, string>();\n const generatorMap = new Map<string, MutationDefaultGeneratorDescriptor>();\n const generatorOwners = new Map<string, string>();\n\n for (const descriptor of descriptors) {\n const contributions = descriptor.controlMutationDefaults;\n if (!contributions) continue;\n const descriptorId = descriptor.id ?? '<unknown>';\n\n for (const generatorDescriptor of contributions.generatorDescriptors) {\n const existingOwner = generatorOwners.get(generatorDescriptor.id);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate mutation default generator id \"${generatorDescriptor.id}\". ` +\n `Descriptor \"${descriptorId}\" conflicts with \"${existingOwner}\".`,\n );\n }\n generatorMap.set(generatorDescriptor.id, generatorDescriptor);\n generatorOwners.set(generatorDescriptor.id, descriptorId);\n }\n\n for (const [functionName, handler] of contributions.defaultFunctionRegistry) {\n const existingOwner = functionOwners.get(functionName);\n if (existingOwner !== undefined) {\n throw new Error(\n `Duplicate mutation default function \"${functionName}\". ` +\n `Descriptor \"${descriptorId}\" conflicts with \"${existingOwner}\".`,\n );\n }\n defaultFunctionRegistry.set(functionName, handler);\n functionOwners.set(functionName, descriptorId);\n }\n }\n\n return {\n defaultFunctionRegistry,\n generatorDescriptors: Array.from(generatorMap.values()),\n };\n}\n\nexport function extractCodecLookup(\n descriptors: ReadonlyArray<Pick<ComponentMetadata & { id: string }, 'types' | 'id'>>,\n): CodecLookup {\n const byId = new Map<string, Codec>();\n const targetTypesById = new Map<string, readonly string[]>();\n const metaById = new Map<string, CodecMeta>();\n const renderersById = new Map<string, (params: Record<string, unknown>) => string | undefined>();\n const owners = new Map<string, string>();\n for (const descriptor of descriptors) {\n const codecTypes = descriptor.types?.codecTypes;\n const descriptorId = descriptor.id;\n // Descriptor-side metadata is the single source of truth for `targetTypes` / `meta` / `renderOutputType`. Every contributor ships a `codecDescriptors` list on `types.codecTypes`.\n for (const codecDescriptor of codecTypes?.codecDescriptors ?? []) {\n assertUniqueCodecOwner({\n codecId: codecDescriptor.codecId,\n owners,\n descriptorId,\n entityLabel: 'codec descriptor',\n entityOwnershipLabel: 'codec descriptor provider',\n });\n owners.set(codecDescriptor.codecId, descriptorId);\n if (Array.isArray(codecDescriptor.targetTypes)) {\n targetTypesById.set(codecDescriptor.codecId, codecDescriptor.targetTypes);\n }\n if (codecDescriptor.meta !== undefined) {\n metaById.set(codecDescriptor.codecId, codecDescriptor.meta);\n }\n if (typeof codecDescriptor.renderOutputType === 'function') {\n renderersById.set(codecDescriptor.codecId, codecDescriptor.renderOutputType);\n }\n // Materialize a representative `Codec` instance for `byId.get()` so consumers reading the lookup's instance side (e.g. SQL renderer's cast-policy lookup, or the contract emitter's literal-default `encodeJson` resolver) keep finding the codec.\n //\n // Two cohorts:\n // - Non-parameterized descriptors: factory must succeed; any throw is a real bug and we let it propagate (no silent try/catch).\n // - Parameterized descriptors: try with empty params. Many parameterized codecs treat params as advisory (e.g. `pg/timestamptz@1` whose precision is rendered into the `nativeType` only and never read by the runtime codec), so an empty-params construction yields a usable representative for id-keyed lookups (e.g. emit-time literal-default encoding). Codecs whose factory genuinely requires params (e.g. `pg/vector@1` threading `length` into the runtime codec) will throw; for those, per-column instances are materialized at runtime by `buildContractCodecRegistry` and the id-keyed lookup miss is correct (the column-aware path resolves them).\n if (!byId.has(codecDescriptor.codecId)) {\n if (codecDescriptor.isParameterized) {\n try {\n const representative = codecDescriptor.factory({} as never)({\n name: `<lookup:${codecDescriptor.codecId}>`,\n } as Parameters<ReturnType<typeof codecDescriptor.factory>>[0]);\n byId.set(codecDescriptor.codecId, representative);\n } catch {\n // Factory requires concrete params; skip representative materialization. Per-column instances are built at runtime; id-keyed lookup miss is the correct outcome here.\n }\n } else {\n const representative = codecDescriptor.factory(undefined as never)({\n name: `<lookup:${codecDescriptor.codecId}>`,\n } as Parameters<ReturnType<typeof codecDescriptor.factory>>[0]);\n byId.set(codecDescriptor.codecId, representative);\n }\n }\n }\n }\n return {\n get: (id) => byId.get(id),\n targetTypesFor: (id) => targetTypesById.get(id),\n metaFor: (id) => metaById.get(id),\n renderOutputTypeFor: (id, params) => renderersById.get(id)?.(params),\n };\n}\n\nexport function validateScalarTypeCodecIds(\n scalarTypeDescriptors: ReadonlyMap<string, string>,\n codecLookup: CodecLookup,\n): string[] {\n const errors: string[] = [];\n for (const [typeName, codecId] of scalarTypeDescriptors) {\n if (!codecLookup.get(codecId)) {\n errors.push(\n `Scalar type \"${typeName}\" references codec \"${codecId}\" which is not registered by any component.`,\n );\n }\n }\n return errors;\n}\n\nexport function createControlStack<TFamilyId extends string, TTargetId extends string>(\n input: CreateControlStackInput<TFamilyId, TTargetId>,\n): ControlStack<TFamilyId, TTargetId> {\n const { family, target, adapter, driver, extensionPacks = [] } = input;\n\n const allDescriptors = [family, target, ...(adapter ? [adapter] : []), ...extensionPacks];\n\n const codecLookup = extractCodecLookup(allDescriptors);\n const scalarTypeDescriptors = assembleScalarTypeDescriptors(allDescriptors);\n\n return {\n family,\n target,\n adapter,\n driver,\n extensionPacks: extensionPacks as readonly ControlExtensionDescriptor<TFamilyId, TTargetId>[],\n\n codecTypeImports: extractCodecTypeImports(allDescriptors),\n operationTypeImports: extractOperationTypeImports(allDescriptors),\n queryOperationTypeImports: extractQueryOperationTypeImports(allDescriptors),\n extensionIds: extractComponentIds(family, target, adapter, extensionPacks),\n codecLookup,\n authoringContributions: assembleAuthoringContributions(allDescriptors),\n scalarTypeDescriptors,\n controlMutationDefaults: assembleControlMutationDefaults(allDescriptors),\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { t as TypesImportSpec } from "./types-import-spec-CPhrNJIV.mjs";
2
+ import { Contract, ContractModel } from "@prisma-next/contract/types";
3
+
4
+ //#region src/control/emission-types.d.ts
5
+ interface GenerateContractTypesOptions {
6
+ readonly queryOperationTypeImports?: ReadonlyArray<TypesImportSpec>;
7
+ }
8
+ interface ValidationContext {
9
+ readonly codecTypeImports?: ReadonlyArray<TypesImportSpec>;
10
+ readonly operationTypeImports?: ReadonlyArray<TypesImportSpec>;
11
+ readonly extensionIds?: ReadonlyArray<string>;
12
+ }
13
+ interface EmissionSpi {
14
+ readonly id: string;
15
+ generateStorageType(contract: Contract, storageHashTypeName: string): string;
16
+ generateModelStorageType(modelName: string, model: ContractModel): string;
17
+ getFamilyImports(): string[];
18
+ getFamilyTypeAliases(options?: GenerateContractTypesOptions): string;
19
+ getTypeMapsExpression(): string;
20
+ getContractWrapper(contractBaseName: string, typeMapsName: string): string;
21
+ /**
22
+ * Per-family resolver for typeParams that don't live inline on the
23
+ * framework-domain `ContractField`. Some families (notably SQL) let columns
24
+ * reference a named entry in `storage.types` via `typeRef`; the typeParams
25
+ * live on that named entry rather than on the domain field. The framework
26
+ * emit path consults this hook so the codec's `renderOutputType` can run
27
+ * for typeRef-shaped columns.
28
+ *
29
+ * Inline `field.type.typeParams` always takes precedence; the hook is only
30
+ * consulted when the domain field has no typeParams. Families without
31
+ * named storage types (e.g. mongo) don't implement this hook.
32
+ *
33
+ * Returns `undefined` when the field has no resolvable typeParams.
34
+ */
35
+ resolveFieldTypeParams?(modelName: string, fieldName: string, model: ContractModel, contract: Contract): Record<string, unknown> | undefined;
36
+ }
37
+ //#endregion
38
+ export { GenerateContractTypesOptions as n, ValidationContext as r, EmissionSpi as t };
39
+ //# sourceMappingURL=emission-types-DzNgwiFC.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emission-types-DzNgwiFC.d.mts","names":[],"sources":["../src/control/emission-types.ts"],"sourcesContent":[],"mappings":";;;;UAGiB,4BAAA;uCACsB,cAAc;AADrD;AAIiB,UAAA,iBAAA,CAAiB;EACU,SAAA,gBAAA,CAAA,EAAd,aAAc,CAAA,eAAA,CAAA;EAAd,SAAA,oBAAA,CAAA,EACI,aADJ,CACkB,eADlB,CAAA;EACkB,SAAA,YAAA,CAAA,EACtB,aADsB,CAAA,MAAA,CAAA;;AACtB,UAGT,WAAA,CAHS;EAAa,SAAA,EAAA,EAAA,MAAA;EAGtB,mBAAW,CAAA,QAAA,EAGI,QAHJ,EAAA,mBAAA,EAAA,MAAA,CAAA,EAAA,MAAA;EAGI,wBAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAEqB,aAFrB,CAAA,EAAA,MAAA;EAEqB,gBAAA,EAAA,EAAA,MAAA,EAAA;EAIpB,oBAAA,CAAA,OAAA,CAAA,EAAA,4BAAA,CAAA,EAAA,MAAA;EAuBtB,qBAAA,EAAA,EAAA,MAAA;EACG,kBAAA,CAAA,gBAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,MAAA;EACT;;;;;;;;;;;;;;uEAFM,yBACG,WACT"}
@@ -1,3 +1,3 @@
1
- import { t as TypesImportSpec } from "./types-import-spec-C4sc7wbb.mjs";
2
- import { n as GenerateContractTypesOptions, r as ValidationContext, t as EmissionSpi } from "./emission-types-BPAALJbF.mjs";
1
+ import { t as TypesImportSpec } from "./types-import-spec-CPhrNJIV.mjs";
2
+ import { n as GenerateContractTypesOptions, r as ValidationContext, t as EmissionSpi } from "./emission-types-DzNgwiFC.mjs";
3
3
  export { type EmissionSpi, type GenerateContractTypesOptions, type TypesImportSpec, type ValidationContext };
@@ -1,13 +1,15 @@
1
- import { b as TargetInstance, c as DriverDescriptor, d as ExtensionDescriptor, f as ExtensionInstance, h as FamilyInstance, l as DriverInstance, m as FamilyDescriptor, n as AdapterInstance, t as AdapterDescriptor, y as TargetDescriptor } from "./framework-components-EJXe-pum.mjs";
1
+ import "./framework-authoring-DJbiXhmf.mjs";
2
+ import "./codec-BUBJeOk4.mjs";
3
+ import { b as TargetInstance, c as DriverDescriptor, d as ExtensionDescriptor, f as ExtensionInstance, h as FamilyInstance, l as DriverInstance, m as FamilyDescriptor, n as AdapterInstance, t as AdapterDescriptor, y as TargetDescriptor } from "./framework-components-BVqm1I48.mjs";
2
4
 
3
- //#region src/execution-instances.d.ts
5
+ //#region src/execution/execution-instances.d.ts
4
6
  interface RuntimeFamilyInstance<TFamilyId extends string> extends FamilyInstance<TFamilyId> {}
5
7
  interface RuntimeTargetInstance<TFamilyId extends string, TTargetId extends string> extends TargetInstance<TFamilyId, TTargetId> {}
6
8
  interface RuntimeAdapterInstance<TFamilyId extends string, TTargetId extends string> extends AdapterInstance<TFamilyId, TTargetId> {}
7
9
  interface RuntimeDriverInstance<TFamilyId extends string, TTargetId extends string> extends DriverInstance<TFamilyId, TTargetId> {}
8
10
  interface RuntimeExtensionInstance<TFamilyId extends string, TTargetId extends string> extends ExtensionInstance<TFamilyId, TTargetId> {}
9
11
  //#endregion
10
- //#region src/execution-stack.d.ts
12
+ //#region src/execution/execution-stack.d.ts
11
13
  interface ExecutionStack<TFamilyId extends string, TTargetId extends string, TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId> = RuntimeAdapterInstance<TFamilyId, TTargetId>, TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId> = RuntimeDriverInstance<TFamilyId, TTargetId>, TExtensionInstance extends RuntimeExtensionInstance<TFamilyId, TTargetId> = RuntimeExtensionInstance<TFamilyId, TTargetId>> {
12
14
  readonly target: RuntimeTargetDescriptor<TFamilyId, TTargetId>;
13
15
  readonly adapter: RuntimeAdapterDescriptor<TFamilyId, TTargetId, TAdapterInstance>;
@@ -34,7 +36,7 @@ declare function createExecutionStack<TFamilyId extends string, TTargetId extend
34
36
  };
35
37
  declare function instantiateExecutionStack<TFamilyId extends string, TTargetId extends string, TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId>, TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId>, TExtensionInstance extends RuntimeExtensionInstance<TFamilyId, TTargetId>>(stack: ExecutionStack<TFamilyId, TTargetId, TAdapterInstance, TDriverInstance, TExtensionInstance>): ExecutionStackInstance<TFamilyId, TTargetId, TAdapterInstance, TDriverInstance, TExtensionInstance>;
36
38
  //#endregion
37
- //#region src/execution-descriptors.d.ts
39
+ //#region src/execution/execution-descriptors.d.ts
38
40
  interface RuntimeFamilyDescriptor<TFamilyId extends string, TFamilyInstance extends RuntimeFamilyInstance<TFamilyId> = RuntimeFamilyInstance<TFamilyId>> extends FamilyDescriptor<TFamilyId> {
39
41
  create<TTargetId extends string>(options: {
40
42
  readonly target: RuntimeTargetDescriptor<TFamilyId, TTargetId>;
@@ -63,7 +65,7 @@ interface RuntimeExtensionDescriptor<TFamilyId extends string, TTargetId extends
63
65
  create(): TExtensionInstance;
64
66
  }
65
67
  //#endregion
66
- //#region src/execution-requirements.d.ts
68
+ //#region src/execution/execution-requirements.d.ts
67
69
  declare function assertRuntimeContractRequirementsSatisfied<TFamilyId extends string, TTargetId extends string>({
68
70
  contract,
69
71
  family,
@@ -1 +1 @@
1
- {"version":3,"file":"execution.d.mts","names":[],"sources":["../src/execution-instances.ts","../src/execution-stack.ts","../src/execution-descriptors.ts","../src/execution-requirements.ts"],"sourcesContent":[],"mappings":";;;UAQiB,wDACP,eAAe;AADR,UAGA,qBAHqB,CAAA,kBACb,MAAf,EAAA,kBAAc,MAAA,CAAA,SAGd,cAHc,CAGC,SAHD,EAGY,SAHZ,CAAA,CAAA,CAExB;AACyB,UAER,sBAFQ,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,CAAA,SAGf,eAHe,CAGC,SAHD,EAGY,SAHZ,CAAA,CAAA;AAAf,UAKO,qBALP,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,CAAA,SAMA,cANA,CAMe,SANf,EAM0B,SAN1B,CAAA,CAAA;AAEO,UAMA,wBANsB,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,CAAA,SAO7B,iBAP6B,CAOX,SAPW,EAOA,SAPA,CAAA,CAAA;;;UCDtB,4FAGU,uBAAuB,WAAW,aAAa,uBACtE,WACA,oCAEsB,sBAAsB,WAAW,aAAa,sBACpE,WACA,uCAEyB,yBACzB,WACA,aACE,yBAAyB,WAAW;EDnBzB,SAAA,MAAA,ECqBE,uBDrBmB,CCqBK,SDpBlB,ECoB6B,SDpB5C,CAAA;EAEO,SAAA,OAAA,ECmBG,wBDnBkB,CCmBO,SDnBP,ECmBkB,SDnBlB,ECmB6B,gBDnB7B,CAAA;EACb,SAAA,MAAA,ECoBnB,uBDpBmB,CCoBK,SDpBL,ECoBgB,SDpBhB,EAAA,OAAA,ECoBoC,eDpBpC,CAAA,GAAA,SAAA;EAAW,SAAA,cAAA,EAAA,SCsBA,0BDtBA,CCuBhC,SDvBgC,ECwBhC,SDxBgC,ECyBhC,kBDzBgC,CAAA,EAAA;;AAAZ,UC6BP,sBD7BO,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,yBCgCG,sBDhCH,CCgC0B,SDhC1B,ECgCqC,SDhCrC,CAAA,GCgCkD,sBDhClD,CCiCpB,SDjCoB,ECkCpB,SDlCoB,CAAA,EAAA,wBCoCE,qBDpCF,CCoCwB,SDpCxB,ECoCmC,SDpCnC,CAAA,GCoCgD,qBDpChD,CCqCpB,SDrCoB,ECsCpB,SDtCoB,CAAA,EAAA,2BCwCK,wBDxCL,CCyCpB,SDzCoB,EC0CpB,SD1CoB,CAAA,GC2ClB,wBD3CkB,CC2CO,SD3CP,EC2CkB,SD3ClB,CAAA,CAAA,CAAA;EAEP,SAAA,KAAA,EC2CC,cD3CqB,CC4CnC,SD5CmC,EC6CnC,SD7CmC,EC8CnC,gBD9CmC,EC+CnC,eD/CmC,ECgDnC,kBDhDmC,CAAA;EACb,SAAA,MAAA,ECiDP,qBDjDO,CCiDe,SDjDf,ECiD0B,SDjD1B,CAAA;EAAW,SAAA,OAAA,ECkDjB,gBDlDiB;EAA3B,SAAA,MAAA,ECmDS,eDnDT,GAAA,SAAA;EAAe,SAAA,cAAA,EAAA,SCoDW,kBDpDX,EAAA;AAEzB;AACyB,iBCoDT,oBDpDS,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,wBCuDC,qBDvDD,CCuDuB,SDvDvB,ECuDkC,SDvDlC,CAAA,EAAA,0BCwDG,uBDxDH,CCwD2B,SDxD3B,ECwDsC,SDxDtC,ECwDiD,eDxDjD,CAAA,EAAA,yBCyDE,sBDzDF,CCyDyB,SDzDzB,ECyDoC,SDzDpC,CAAA,EAAA,2BC0DI,wBD1DJ,CC0D6B,SD1D7B,EC0DwC,SD1DxC,EC0DmD,gBD1DnD,CAAA,EAAA,wBC2DC,qBD3DD,CC2DuB,SD3DvB,EC2DkC,SD3DlC,CAAA,GC2D+C,qBD3D/C,CC4DrB,SD5DqB,EC6DrB,SD7DqB,CAAA,EAAA,0BCgEnB,uBDhEmB,CCgEK,SDhEL,ECgEgB,SDhEhB,EAAA,OAAA,ECgEoC,eDhEpC,CAAA,GAAA,SAAA,GAAA,SAAA,EAAA,2BCkEI,wBDlEJ,CCmErB,SDnEqB,ECoErB,SDpEqB,CAAA,GCqEnB,wBDrEmB,CCqEM,SDrEN,ECqEiB,SDrEjB,CAAA,EAAA,6BCsEM,0BDtEN,CCuErB,SDvEqB,ECwErB,SDxEqB,ECyErB,kBDzEqB,CAAA,GAAA,KAAA,CAAA,CAAA,KAAA,EAAA;EAAW,SAAA,MAAA,EC4EjB,iBD5EiB;EAA1B,SAAA,OAAA,EC6EU,kBD7EV;EAAc,SAAA,MAAA,CAAA,EC8EJ,iBD9EI,GAAA,SAAA;EAEP,SAAA,cAAA,CAAA,EAAA,SC6EoB,oBD7EI,EAAA,GAAA,SAAA;CACb,CAAA,EC6ExB,cD7EwB,CC6ET,SD7ES,EC6EE,SD7EF,EC6Ea,gBD7Eb,EC6E+B,eD7E/B,EC6EgD,kBD7EhD,CAAA,GAAA;EAAW,SAAA,MAAA,EC8EpB,iBD9EoB;EAA7B,SAAA,OAAA,EC+EU,kBD/EV;EAAiB,SAAA,MAAA,ECgFR,iBDhFQ,GAAA,SAAA;oCCiFS;;iBAUpB,uGAGW,uBAAuB,WAAW,oCACnC,sBAAsB,WAAW,uCAC9B,yBAAyB,WAAW,mBAExD,eACL,WACA,WACA,kBACA,iBACA,sBAED,uBACD,WACA,WACA,kBACA,iBACA;;;AD3He,UEQA,uBFRqB,CAAA,kBACb,MAAf,EAAA,wBESgB,qBFTF,CESwB,SFTxB,CAAA,GESqC,qBFTrC,CES2D,SFT3D,CAAA,CAAA,SEUd,gBFVc,CEUG,SFVH,CAAA,CAAA;EAEP,MAAA,CAAA,kBAAqB,MAAA,CAAA,CAAA,OAAA,EAAA;IACb,SAAA,MAAA,EESJ,uBFTI,CESoB,SFTpB,EES+B,SFT/B,CAAA;IAAW,SAAA,OAAA,EEUd,wBFVc,CEUW,SFVX,EEUsB,SFVtB,CAAA;IAA1B,SAAA,MAAA,EEWW,uBFXX,CEWmC,SFXnC,EEW8C,SFX9C,CAAA;IAAc,SAAA,cAAA,EAAA,SEYc,0BFZd,CEYyC,SFZzC,EEYoD,SFZpD,CAAA,EAAA;EAEP,CAAA,CAAA,EEWX,eFXW;;AACoB,UEapB,uBFboB,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,wBEgBX,qBFhBW,CEgBW,SFhBX,EEgBsB,SFhBtB,CAAA,GEgBmC,qBFhBnC,CEiBjC,SFjBiC,EEkBjC,SFlBiC,CAAA,CAAA,SEoB3B,gBFpB2B,CEoBV,SFpBU,EEoBC,SFpBD,CAAA,CAAA;EAA3B,MAAA,EAAA,EEqBE,eFrBF;;AAEO,UEsBA,wBFtBqB,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,yBEyBX,sBFzBW,CEyBY,SFzBZ,EEyBuB,SFzBvB,CAAA,GEyBoC,sBFzBpC,CE0BlC,SF1BkC,EE2BlC,SF3BkC,CAAA,CAAA,SE6B5B,iBF7B4B,CE6BV,SF7BU,EE6BC,SF7BD,CAAA,CAAA;EACb;;;;AAEzB;;;EACU,MAAA,CAAA,KAAA,EEiCM,cFjCN,CEiCqB,SFjCrB,EEiCgC,SFjChC,CAAA,CAAA,EEiC6C,gBFjC7C;;UEoCO,2HAIS,sBAAsB,WAAW,aAAa,sBACpE,WACA,oBAEM,iBAAiB,WAAW;mBACnB,iBAAiB;;ADrDnB,UCwDA,0BDxDc,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,2BC2DF,wBD3DE,CC4D3B,SD5D2B,EC6D3B,SD7D2B,CAAA,GC8DzB,wBD9DyB,CC8DA,SD9DA,EC8DW,SD9DX,CAAA,CAAA,SC+DrB,mBD/DqB,CC+DD,SD/DC,EC+DU,SD/DV,CAAA,CAAA;EAGmB,MAAA,EAAA,EC6DtC,kBD7DsC;;;;iBERlC;;;;;;;;IHAC,SAAA,MAAA,EAAA,MAAqB;IAGrB,SAAA,cAAqB,CAAA,EGOoC,MHPpC,CAAA,MAAA,EAAA,OAAA,CAAA;EACb,CAAA;EAAW,SAAA,MAAA,EGOjB,uBHPiB,CGOO,SHPP,CAAA;EAA1B,SAAA,MAAA,EGQS,uBHRT,CGQiC,SHRjC,EGQ4C,SHR5C,CAAA;EAAc,SAAA,OAAA,EGSJ,wBHTI,CGSqB,SHTrB,EGSgC,SHThC,CAAA;EAEP,SAAA,cAAA,EAAsB,SGQH,0BHRG,CGQwB,SHRxB,EGQmC,SHRnC,CAAA,EAAA;CACb,CAAA,EAAA,IAAA"}
1
+ {"version":3,"file":"execution.d.mts","names":[],"sources":["../src/execution/execution-instances.ts","../src/execution/execution-stack.ts","../src/execution/execution-descriptors.ts","../src/execution/execution-requirements.ts"],"sourcesContent":[],"mappings":";;;;;UAQiB,wDACP,eAAe;UAER,kFACP,eAAe,WAAW;AAJnB,UAMA,sBANqB,CAAA,kBACb,MAAf,EAAA,kBAAc,MAAA,CAAA,SAMd,eANc,CAME,SANF,EAMa,SANb,CAAA,CAAA,CAExB;AACyB,UAKR,qBALQ,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,CAAA,SAMf,cANe,CAMA,SANA,EAMW,SANX,CAAA,CAAA;AAAf,UAQO,wBARP,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,CAAA,SASA,iBATA,CASkB,SATlB,EAS6B,SAT7B,CAAA,CAAA;;;UCCO,4FAGU,uBAAuB,WAAW,aAAa,uBACtE,WACA,oCAEsB,sBAAsB,WAAW,aAAa,sBACpE,WACA,uCAEyB,yBACzB,WACA,aACE,yBAAyB,WAAW;mBAEvB,wBAAwB,WAAW;oBAClC,yBAAyB,WAAW,WAAW;EDtBlD,SAAA,MAAA,ECwBX,uBDxBgC,CCwBR,SDvBL,ECuBgB,SDvB/B,EAAA,OAAA,ECuBmD,eDvBrC,CAAA,GAAA,SAAA;EAEP,SAAA,cAAA,EAAqB,SCuBF,0BDvBE,CCwBlC,SDxBkC,ECyBlC,SDzBkC,EC0BlC,kBD1BkC,CAAA,EAAA;;AACF,UC6BnB,sBD7BmB,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,yBCgCT,sBDhCS,CCgCc,SDhCd,ECgCyB,SDhCzB,CAAA,GCgCsC,sBDhCtC,CCiChC,SDjCgC,ECkChC,SDlCgC,CAAA,EAAA,wBCoCV,qBDpCU,CCoCY,SDpCZ,ECoCuB,SDpCvB,CAAA,GCoCoC,qBDpCpC,CCqChC,SDrCgC,ECsChC,SDtCgC,CAAA,EAAA,2BCwCP,wBDxCO,CCyChC,SDzCgC,EC0ChC,SD1CgC,CAAA,GC2C9B,wBD3C8B,CC2CL,SD3CK,EC2CM,SD3CN,CAAA,CAAA,CAAA;EAA1B,SAAA,KAAA,EC6CQ,cD7CR,CC8CN,SD9CM,EC+CN,SD/CM,ECgDN,gBDhDM,ECiDN,eDjDM,ECkDN,kBDlDM,CAAA;EAAc,SAAA,MAAA,ECoDL,qBDpDK,CCoDiB,SDpDjB,ECoD4B,SDpD5B,CAAA;EAEP,SAAA,OAAA,ECmDG,gBDnDmB;EACb,SAAA,MAAA,ECmDP,eDnDO,GAAA,SAAA;EAAW,SAAA,cAAA,EAAA,SCoDD,kBDpDC,EAAA;;AAAZ,iBCuDT,oBDvDS,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,wBC0DC,qBD1DD,CC0DuB,SD1DvB,EC0DkC,SD1DlC,CAAA,EAAA,0BC2DG,uBD3DH,CC2D2B,SD3D3B,EC2DsC,SD3DtC,EC2DiD,eD3DjD,CAAA,EAAA,yBC4DE,sBD5DF,CC4DyB,SD5DzB,EC4DoC,SD5DpC,CAAA,EAAA,2BC6DI,wBD7DJ,CC6D6B,SD7D7B,EC6DwC,SD7DxC,EC6DmD,gBD7DnD,CAAA,EAAA,wBC8DC,qBD9DD,CC8DuB,SD9DvB,EC8DkC,SD9DlC,CAAA,GC8D+C,qBD9D/C,CC+DrB,SD/DqB,ECgErB,SDhEqB,CAAA,EAAA,0BCmEnB,uBDnEmB,CCmEK,SDnEL,ECmEgB,SDnEhB,EAAA,OAAA,ECmEoC,eDnEpC,CAAA,GAAA,SAAA,GAAA,SAAA,EAAA,2BCqEI,wBDrEJ,CCsErB,SDtEqB,ECuErB,SDvEqB,CAAA,GCwEnB,wBDxEmB,CCwEM,SDxEN,ECwEiB,SDxEjB,CAAA,EAAA,6BCyEM,0BDzEN,CC0ErB,SD1EqB,EC2ErB,SD3EqB,EC4ErB,kBD5EqB,CAAA,GAAA,KAAA,CAAA,CAAA,KAAA,EAAA;EAER,SAAA,MAAA,EC6EE,iBD7EmB;EACb,SAAA,OAAA,EC6EL,kBD7EK;EAAW,SAAA,MAAA,CAAA,EC8EhB,iBD9EgB,GAAA,SAAA;EAA1B,SAAA,cAAA,CAAA,EAAA,SC+E2B,oBD/E3B,EAAA,GAAA,SAAA;CAAc,CAAA,ECgFpB,cDhFoB,CCgFL,SDhFK,ECgFM,SDhFN,ECgFiB,gBDhFjB,ECgFmC,eDhFnC,ECgFoD,kBDhFpD,CAAA,GAAA;EAEP,SAAA,MAAA,EC+EE,iBD/EsB;EACb,SAAA,OAAA,EC+ER,kBD/EQ;EAAW,SAAA,MAAA,ECgFpB,iBDhFoB,GAAA,SAAA;EAA7B,SAAA,cAAA,EAAA,SCiF0B,oBDjF1B,EAAA;CAAiB;iBC2FX,uGAGW,uBAAuB,WAAW,oCACnC,sBAAsB,WAAW,uCAC9B,yBAAyB,WAAW,mBAExD,eACL,WACA,WACA,kBACA,iBACA,sBAED,uBACD,WACA,WACA,kBACA,iBACA;;;UCnHe,0EAES,sBAAsB,aAAa,sBAAsB,oBACzE,iBAAiB;;IFXV,SAAA,MAAA,EEaI,uBFbiB,CEaO,SFZpB,EEY+B,SFZ9C,CAAA;IAEO,SAAA,OAAA,EEWK,wBFXgB,CEWS,SFXT,EEWoB,SFXpB,CAAA;IACb,SAAA,MAAA,EEWJ,uBFXI,CEWoB,SFXpB,EEW+B,SFX/B,CAAA;IAAW,SAAA,cAAA,EAAA,SEYE,0BFZF,CEY6B,SFZ7B,EEYwC,SFZxC,CAAA,EAAA;EAA1B,CAAA,CAAA,EEaJ,eFbI;;AAEO,UEcA,uBFdsB,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,wBEiBb,qBFjBa,CEiBS,SFjBT,EEiBoB,SFjBpB,CAAA,GEiBiC,qBFjBjC,CEkBnC,SFlBmC,EEmBnC,SFnBmC,CAAA,CAAA,SEqB7B,gBFrB6B,CEqBZ,SFrBY,EEqBD,SFrBC,CAAA,CAAA;EACb,MAAA,EAAA,EEqBd,eFrBc;;AAAhB,UEwBO,wBFxBP,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,yBE2BiB,sBF3BjB,CE2BwC,SF3BxC,EE2BmD,SF3BnD,CAAA,GE2BgE,sBF3BhE,CE4BN,SF5BM,EE6BN,SF7BM,CAAA,CAAA,SE+BA,iBF/BA,CE+BkB,SF/BlB,EE+B6B,SF/B7B,CAAA,CAAA;EAAe;AAEzB;;;;;AAGA;EAC4B,MAAA,CAAA,KAAA,EEiCZ,cFjCY,CEiCG,SFjCH,EEiCc,SFjCd,CAAA,CAAA,EEiC2B,gBFjC3B;;AAAlB,UEoCO,uBFpCP,CAAA,kBAAA,MAAA,EAAA,kBAAA,MAAA,EAAA,iBAAA,IAAA,EAAA,wBEwCgB,qBFxChB,CEwCsC,SFxCtC,EEwCiD,SFxCjD,CAAA,GEwC8D,qBFxC9D,CEyCN,SFzCM,EE0CN,SF1CM,CAAA,CAAA,SE4CA,gBF5CA,CE4CiB,SF5CjB,EE4C4B,SF5C5B,CAAA,CAAA;EAAiB,MAAA,CAAA,OAAA,CAAA,EE6CR,cF7CQ,CAAA,EE6CS,eF7CT;;UEgDV,0GAGY,yBACzB,WACA,aACE,yBAAyB,WAAW,oBAChC,oBAAoB,WAAW;YAC7B;ADhEZ;;;iBELgB;;;;;;;;;8BAU0D;EHVzD,CAAA;EAGA,SAAA,MAAA,EGQE,uBHRmB,CGQK,SHRL,CAAA;EACb,SAAA,MAAA,EGQN,uBHRM,CGQkB,SHRlB,EGQ6B,SHR7B,CAAA;EAAW,SAAA,OAAA,EGShB,wBHTgB,CGSS,SHTT,EGSoB,SHTpB,CAAA;EAA1B,SAAA,cAAA,EAAA,SGU0B,0BHV1B,CGUqD,SHVrD,EGUgE,SHVhE,CAAA,EAAA;CAAc,CAAA,EAAA,IAAA"}
@@ -1,6 +1,6 @@
1
- import { t as checkContractComponentRequirements } from "./framework-components-C8ZhSwXe.mjs";
1
+ import { t as checkContractComponentRequirements } from "./framework-components-BsWST1Rn.mjs";
2
2
 
3
- //#region src/execution-requirements.ts
3
+ //#region src/execution/execution-requirements.ts
4
4
  function assertRuntimeContractRequirementsSatisfied({ contract, family, target, adapter, extensionPacks }) {
5
5
  const providedComponentIds = new Set([
6
6
  family.id,
@@ -18,7 +18,7 @@ function assertRuntimeContractRequirementsSatisfied({ contract, family, target,
18
18
  }
19
19
 
20
20
  //#endregion
21
- //#region src/execution-stack.ts
21
+ //#region src/execution/execution-stack.ts
22
22
  function createExecutionStack(input) {
23
23
  return {
24
24
  target: input.target,
@@ -1 +1 @@
1
- {"version":3,"file":"execution.mjs","names":[],"sources":["../src/execution-requirements.ts","../src/execution-stack.ts"],"sourcesContent":["import type {\n RuntimeAdapterDescriptor,\n RuntimeExtensionDescriptor,\n RuntimeFamilyDescriptor,\n RuntimeTargetDescriptor,\n} from './execution-descriptors';\nimport { checkContractComponentRequirements } from './framework-components';\n\nexport function assertRuntimeContractRequirementsSatisfied<\n TFamilyId extends string,\n TTargetId extends string,\n>({\n contract,\n family,\n target,\n adapter,\n extensionPacks,\n}: {\n readonly contract: { readonly target: string; readonly extensionPacks?: Record<string, unknown> };\n readonly family: RuntimeFamilyDescriptor<TFamilyId>;\n readonly target: RuntimeTargetDescriptor<TFamilyId, TTargetId>;\n readonly adapter: RuntimeAdapterDescriptor<TFamilyId, TTargetId>;\n readonly extensionPacks: readonly RuntimeExtensionDescriptor<TFamilyId, TTargetId>[];\n}): void {\n const providedComponentIds = new Set<string>([family.id, target.id, adapter.id]);\n for (const extension of extensionPacks) {\n providedComponentIds.add(extension.id);\n }\n\n const result = checkContractComponentRequirements({\n contract,\n expectedTargetId: target.targetId,\n providedComponentIds,\n });\n\n if (result.targetMismatch) {\n throw new Error(\n `Contract target '${result.targetMismatch.actual}' does not match runtime target descriptor '${result.targetMismatch.expected}'.`,\n );\n }\n\n for (const packId of result.missingExtensionPackIds) {\n throw new Error(\n `Contract requires extension pack '${packId}', but runtime descriptors do not provide a matching component.`,\n );\n }\n}\n","import type {\n RuntimeAdapterDescriptor,\n RuntimeDriverDescriptor,\n RuntimeExtensionDescriptor,\n RuntimeTargetDescriptor,\n} from './execution-descriptors';\nimport type {\n RuntimeAdapterInstance,\n RuntimeDriverInstance,\n RuntimeExtensionInstance,\n RuntimeTargetInstance,\n} from './execution-instances';\n\nexport interface ExecutionStack<\n TFamilyId extends string,\n TTargetId extends string,\n TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId> = RuntimeAdapterInstance<\n TFamilyId,\n TTargetId\n >,\n TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId> = RuntimeDriverInstance<\n TFamilyId,\n TTargetId\n >,\n TExtensionInstance extends RuntimeExtensionInstance<\n TFamilyId,\n TTargetId\n > = RuntimeExtensionInstance<TFamilyId, TTargetId>,\n> {\n readonly target: RuntimeTargetDescriptor<TFamilyId, TTargetId>;\n readonly adapter: RuntimeAdapterDescriptor<TFamilyId, TTargetId, TAdapterInstance>;\n readonly driver:\n | RuntimeDriverDescriptor<TFamilyId, TTargetId, unknown, TDriverInstance>\n | undefined;\n readonly extensionPacks: readonly RuntimeExtensionDescriptor<\n TFamilyId,\n TTargetId,\n TExtensionInstance\n >[];\n}\n\nexport interface ExecutionStackInstance<\n TFamilyId extends string,\n TTargetId extends string,\n TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId> = RuntimeAdapterInstance<\n TFamilyId,\n TTargetId\n >,\n TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId> = RuntimeDriverInstance<\n TFamilyId,\n TTargetId\n >,\n TExtensionInstance extends RuntimeExtensionInstance<\n TFamilyId,\n TTargetId\n > = RuntimeExtensionInstance<TFamilyId, TTargetId>,\n> {\n readonly stack: ExecutionStack<\n TFamilyId,\n TTargetId,\n TAdapterInstance,\n TDriverInstance,\n TExtensionInstance\n >;\n readonly target: RuntimeTargetInstance<TFamilyId, TTargetId>;\n readonly adapter: TAdapterInstance;\n readonly driver: TDriverInstance | undefined;\n readonly extensionPacks: readonly TExtensionInstance[];\n}\n\nexport function createExecutionStack<\n TFamilyId extends string,\n TTargetId extends string,\n TTargetInstance extends RuntimeTargetInstance<TFamilyId, TTargetId>,\n TTargetDescriptor extends RuntimeTargetDescriptor<TFamilyId, TTargetId, TTargetInstance>,\n TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId>,\n TAdapterDescriptor extends RuntimeAdapterDescriptor<TFamilyId, TTargetId, TAdapterInstance>,\n TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId> = RuntimeDriverInstance<\n TFamilyId,\n TTargetId\n >,\n TDriverDescriptor extends\n | RuntimeDriverDescriptor<TFamilyId, TTargetId, unknown, TDriverInstance>\n | undefined = undefined,\n TExtensionInstance extends RuntimeExtensionInstance<\n TFamilyId,\n TTargetId\n > = RuntimeExtensionInstance<TFamilyId, TTargetId>,\n TExtensionDescriptor extends RuntimeExtensionDescriptor<\n TFamilyId,\n TTargetId,\n TExtensionInstance\n > = never,\n>(input: {\n readonly target: TTargetDescriptor;\n readonly adapter: TAdapterDescriptor;\n readonly driver?: TDriverDescriptor | undefined;\n readonly extensionPacks?: readonly TExtensionDescriptor[] | undefined;\n}): ExecutionStack<TFamilyId, TTargetId, TAdapterInstance, TDriverInstance, TExtensionInstance> & {\n readonly target: TTargetDescriptor;\n readonly adapter: TAdapterDescriptor;\n readonly driver: TDriverDescriptor | undefined;\n readonly extensionPacks: readonly TExtensionDescriptor[];\n} {\n return {\n target: input.target,\n adapter: input.adapter,\n driver: input.driver,\n extensionPacks: input.extensionPacks ?? [],\n };\n}\n\nexport function instantiateExecutionStack<\n TFamilyId extends string,\n TTargetId extends string,\n TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId>,\n TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId>,\n TExtensionInstance extends RuntimeExtensionInstance<TFamilyId, TTargetId>,\n>(\n stack: ExecutionStack<\n TFamilyId,\n TTargetId,\n TAdapterInstance,\n TDriverInstance,\n TExtensionInstance\n >,\n): ExecutionStackInstance<\n TFamilyId,\n TTargetId,\n TAdapterInstance,\n TDriverInstance,\n TExtensionInstance\n> {\n const driver = stack.driver ? stack.driver.create() : undefined;\n\n return {\n stack,\n target: stack.target.create(),\n adapter: stack.adapter.create(stack),\n driver,\n extensionPacks: stack.extensionPacks.map((descriptor) => descriptor.create()),\n };\n}\n"],"mappings":";;;AAQA,SAAgB,2CAGd,EACA,UACA,QACA,QACA,SACA,kBAOO;CACP,MAAM,uBAAuB,IAAI,IAAY;EAAC,OAAO;EAAI,OAAO;EAAI,QAAQ;EAAG,CAAC;AAChF,MAAK,MAAM,aAAa,eACtB,sBAAqB,IAAI,UAAU,GAAG;CAGxC,MAAM,SAAS,mCAAmC;EAChD;EACA,kBAAkB,OAAO;EACzB;EACD,CAAC;AAEF,KAAI,OAAO,eACT,OAAM,IAAI,MACR,oBAAoB,OAAO,eAAe,OAAO,8CAA8C,OAAO,eAAe,SAAS,IAC/H;AAGH,MAAK,MAAM,UAAU,OAAO,wBAC1B,OAAM,IAAI,MACR,qCAAqC,OAAO,iEAC7C;;;;;AC0BL,SAAgB,qBAuBd,OAUA;AACA,QAAO;EACL,QAAQ,MAAM;EACd,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,gBAAgB,MAAM,kBAAkB,EAAE;EAC3C;;AAGH,SAAgB,0BAOd,OAaA;CACA,MAAM,SAAS,MAAM,SAAS,MAAM,OAAO,QAAQ,GAAG;AAEtD,QAAO;EACL;EACA,QAAQ,MAAM,OAAO,QAAQ;EAC7B,SAAS,MAAM,QAAQ,OAAO,MAAM;EACpC;EACA,gBAAgB,MAAM,eAAe,KAAK,eAAe,WAAW,QAAQ,CAAC;EAC9E"}
1
+ {"version":3,"file":"execution.mjs","names":[],"sources":["../src/execution/execution-requirements.ts","../src/execution/execution-stack.ts"],"sourcesContent":["import { checkContractComponentRequirements } from '../shared/framework-components';\nimport type {\n RuntimeAdapterDescriptor,\n RuntimeExtensionDescriptor,\n RuntimeFamilyDescriptor,\n RuntimeTargetDescriptor,\n} from './execution-descriptors';\n\nexport function assertRuntimeContractRequirementsSatisfied<\n TFamilyId extends string,\n TTargetId extends string,\n>({\n contract,\n family,\n target,\n adapter,\n extensionPacks,\n}: {\n readonly contract: { readonly target: string; readonly extensionPacks?: Record<string, unknown> };\n readonly family: RuntimeFamilyDescriptor<TFamilyId>;\n readonly target: RuntimeTargetDescriptor<TFamilyId, TTargetId>;\n readonly adapter: RuntimeAdapterDescriptor<TFamilyId, TTargetId>;\n readonly extensionPacks: readonly RuntimeExtensionDescriptor<TFamilyId, TTargetId>[];\n}): void {\n const providedComponentIds = new Set<string>([family.id, target.id, adapter.id]);\n for (const extension of extensionPacks) {\n providedComponentIds.add(extension.id);\n }\n\n const result = checkContractComponentRequirements({\n contract,\n expectedTargetId: target.targetId,\n providedComponentIds,\n });\n\n if (result.targetMismatch) {\n throw new Error(\n `Contract target '${result.targetMismatch.actual}' does not match runtime target descriptor '${result.targetMismatch.expected}'.`,\n );\n }\n\n for (const packId of result.missingExtensionPackIds) {\n throw new Error(\n `Contract requires extension pack '${packId}', but runtime descriptors do not provide a matching component.`,\n );\n }\n}\n","import type {\n RuntimeAdapterDescriptor,\n RuntimeDriverDescriptor,\n RuntimeExtensionDescriptor,\n RuntimeTargetDescriptor,\n} from './execution-descriptors';\nimport type {\n RuntimeAdapterInstance,\n RuntimeDriverInstance,\n RuntimeExtensionInstance,\n RuntimeTargetInstance,\n} from './execution-instances';\n\nexport interface ExecutionStack<\n TFamilyId extends string,\n TTargetId extends string,\n TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId> = RuntimeAdapterInstance<\n TFamilyId,\n TTargetId\n >,\n TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId> = RuntimeDriverInstance<\n TFamilyId,\n TTargetId\n >,\n TExtensionInstance extends RuntimeExtensionInstance<\n TFamilyId,\n TTargetId\n > = RuntimeExtensionInstance<TFamilyId, TTargetId>,\n> {\n readonly target: RuntimeTargetDescriptor<TFamilyId, TTargetId>;\n readonly adapter: RuntimeAdapterDescriptor<TFamilyId, TTargetId, TAdapterInstance>;\n readonly driver:\n | RuntimeDriverDescriptor<TFamilyId, TTargetId, unknown, TDriverInstance>\n | undefined;\n readonly extensionPacks: readonly RuntimeExtensionDescriptor<\n TFamilyId,\n TTargetId,\n TExtensionInstance\n >[];\n}\n\nexport interface ExecutionStackInstance<\n TFamilyId extends string,\n TTargetId extends string,\n TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId> = RuntimeAdapterInstance<\n TFamilyId,\n TTargetId\n >,\n TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId> = RuntimeDriverInstance<\n TFamilyId,\n TTargetId\n >,\n TExtensionInstance extends RuntimeExtensionInstance<\n TFamilyId,\n TTargetId\n > = RuntimeExtensionInstance<TFamilyId, TTargetId>,\n> {\n readonly stack: ExecutionStack<\n TFamilyId,\n TTargetId,\n TAdapterInstance,\n TDriverInstance,\n TExtensionInstance\n >;\n readonly target: RuntimeTargetInstance<TFamilyId, TTargetId>;\n readonly adapter: TAdapterInstance;\n readonly driver: TDriverInstance | undefined;\n readonly extensionPacks: readonly TExtensionInstance[];\n}\n\nexport function createExecutionStack<\n TFamilyId extends string,\n TTargetId extends string,\n TTargetInstance extends RuntimeTargetInstance<TFamilyId, TTargetId>,\n TTargetDescriptor extends RuntimeTargetDescriptor<TFamilyId, TTargetId, TTargetInstance>,\n TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId>,\n TAdapterDescriptor extends RuntimeAdapterDescriptor<TFamilyId, TTargetId, TAdapterInstance>,\n TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId> = RuntimeDriverInstance<\n TFamilyId,\n TTargetId\n >,\n TDriverDescriptor extends\n | RuntimeDriverDescriptor<TFamilyId, TTargetId, unknown, TDriverInstance>\n | undefined = undefined,\n TExtensionInstance extends RuntimeExtensionInstance<\n TFamilyId,\n TTargetId\n > = RuntimeExtensionInstance<TFamilyId, TTargetId>,\n TExtensionDescriptor extends RuntimeExtensionDescriptor<\n TFamilyId,\n TTargetId,\n TExtensionInstance\n > = never,\n>(input: {\n readonly target: TTargetDescriptor;\n readonly adapter: TAdapterDescriptor;\n readonly driver?: TDriverDescriptor | undefined;\n readonly extensionPacks?: readonly TExtensionDescriptor[] | undefined;\n}): ExecutionStack<TFamilyId, TTargetId, TAdapterInstance, TDriverInstance, TExtensionInstance> & {\n readonly target: TTargetDescriptor;\n readonly adapter: TAdapterDescriptor;\n readonly driver: TDriverDescriptor | undefined;\n readonly extensionPacks: readonly TExtensionDescriptor[];\n} {\n return {\n target: input.target,\n adapter: input.adapter,\n driver: input.driver,\n extensionPacks: input.extensionPacks ?? [],\n };\n}\n\nexport function instantiateExecutionStack<\n TFamilyId extends string,\n TTargetId extends string,\n TAdapterInstance extends RuntimeAdapterInstance<TFamilyId, TTargetId>,\n TDriverInstance extends RuntimeDriverInstance<TFamilyId, TTargetId>,\n TExtensionInstance extends RuntimeExtensionInstance<TFamilyId, TTargetId>,\n>(\n stack: ExecutionStack<\n TFamilyId,\n TTargetId,\n TAdapterInstance,\n TDriverInstance,\n TExtensionInstance\n >,\n): ExecutionStackInstance<\n TFamilyId,\n TTargetId,\n TAdapterInstance,\n TDriverInstance,\n TExtensionInstance\n> {\n const driver = stack.driver ? stack.driver.create() : undefined;\n\n return {\n stack,\n target: stack.target.create(),\n adapter: stack.adapter.create(stack),\n driver,\n extensionPacks: stack.extensionPacks.map((descriptor) => descriptor.create()),\n };\n}\n"],"mappings":";;;AAQA,SAAgB,2CAGd,EACA,UACA,QACA,QACA,SACA,kBAOO;CACP,MAAM,uBAAuB,IAAI,IAAY;EAAC,OAAO;EAAI,OAAO;EAAI,QAAQ;EAAG,CAAC;AAChF,MAAK,MAAM,aAAa,eACtB,sBAAqB,IAAI,UAAU,GAAG;CAGxC,MAAM,SAAS,mCAAmC;EAChD;EACA,kBAAkB,OAAO;EACzB;EACD,CAAC;AAEF,KAAI,OAAO,eACT,OAAM,IAAI,MACR,oBAAoB,OAAO,eAAe,OAAO,8CAA8C,OAAO,eAAe,SAAS,IAC/H;AAGH,MAAK,MAAM,UAAU,OAAO,wBAC1B,OAAM,IAAI,MACR,qCAAqC,OAAO,iEAC7C;;;;;AC0BL,SAAgB,qBAuBd,OAUA;AACA,QAAO;EACL,QAAQ,MAAM;EACd,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,gBAAgB,MAAM,kBAAkB,EAAE;EAC3C;;AAGH,SAAgB,0BAOd,OAaA;CACA,MAAM,SAAS,MAAM,SAAS,MAAM,OAAO,QAAQ,GAAG;AAEtD,QAAO;EACL;EACA,QAAQ,MAAM,OAAO,QAAQ;EAC7B,SAAS,MAAM,QAAQ,OAAO,MAAM;EACpC;EACA,gBAAgB,MAAM,eAAe,KAAK,eAAe,WAAW,QAAQ,CAAC;EAC9E"}
@@ -1,4 +1,6 @@
1
- //#region src/framework-authoring.d.ts
1
+ import { ColumnDefault, ExecutionMutationDefaultPhases } from "@prisma-next/contract/types";
2
+
3
+ //#region src/shared/framework-authoring.d.ts
2
4
  type AuthoringArgRef = {
3
5
  readonly kind: 'arg';
4
6
  readonly index: number;
@@ -44,10 +46,14 @@ interface AuthoringColumnDefaultTemplateFunction {
44
46
  readonly expression: AuthoringTemplateValue;
45
47
  }
46
48
  type AuthoringColumnDefaultTemplate = AuthoringColumnDefaultTemplateLiteral | AuthoringColumnDefaultTemplateFunction;
49
+ interface AuthoringExecutionDefaultsTemplate {
50
+ readonly onCreate?: AuthoringTemplateValue;
51
+ readonly onUpdate?: AuthoringTemplateValue;
52
+ }
47
53
  interface AuthoringFieldPresetOutput extends AuthoringStorageTypeTemplate {
48
54
  readonly nullable?: boolean;
49
55
  readonly default?: AuthoringColumnDefaultTemplate;
50
- readonly executionDefault?: AuthoringTemplateValue;
56
+ readonly executionDefaults?: AuthoringExecutionDefaultsTemplate;
51
57
  readonly id?: boolean;
52
58
  readonly unique?: boolean;
53
59
  }
@@ -69,6 +75,35 @@ interface AuthoringContributions {
69
75
  declare function isAuthoringArgRef(value: unknown): value is AuthoringArgRef;
70
76
  declare function isAuthoringTypeConstructorDescriptor(value: unknown): value is AuthoringTypeConstructorDescriptor;
71
77
  declare function isAuthoringFieldPresetDescriptor(value: unknown): value is AuthoringFieldPresetDescriptor;
78
+ /**
79
+ * Returns true when `namespace` is a non-leaf key in `contributions.field`.
80
+ *
81
+ * `AuthoringFieldNamespace` permits a leaf descriptor at any depth — including
82
+ * the root — so a top-level `field: { Foo: { kind: 'fieldPreset', ... } }`
83
+ * registration must NOT be treated as a "namespace" with sub-paths. Callers
84
+ * use this predicate to gate dot-namespaced lookups (e.g. PSL `@Foo.bar`).
85
+ */
86
+ declare function hasRegisteredFieldNamespace(contributions: AuthoringContributions | undefined, namespace: string): boolean;
87
+ /**
88
+ * Merges `source` into `target` recursively at the descriptor-namespace
89
+ * level. `leafGuard` decides which values are descriptors (terminal
90
+ * merge points; same-path registrations across components are reported
91
+ * as duplicates) versus sub-namespaces (recursion targets).
92
+ *
93
+ * Path segments are validated against prototype-pollution names
94
+ * (`__proto__`, `constructor`, `prototype`). A value that is neither a
95
+ * recognized leaf nor a plain object — e.g. a malformed descriptor
96
+ * where the canonical leaf guard rejected it for missing `output` —
97
+ * is reported as an invalid contribution rather than recursed into,
98
+ * which would either silently mangle state or infinite-loop on
99
+ * primitive properties.
100
+ *
101
+ * Within-registry duplicate detection is this walker's job;
102
+ * cross-registry detection runs separately via
103
+ * `assertNoCrossRegistryCollisions` after merging completes.
104
+ */
105
+ declare function mergeAuthoringNamespaces(target: Record<string, unknown>, source: Record<string, unknown>, path: readonly string[], leafGuard: (value: unknown) => boolean, label: string): void;
106
+ declare function assertNoCrossRegistryCollisions(typeNamespace: AuthoringTypeNamespace, fieldNamespace: AuthoringFieldNamespace): void;
72
107
  declare function resolveAuthoringTemplateValue(template: AuthoringTemplateValue, args: readonly unknown[]): unknown;
73
108
  declare function validateAuthoringHelperArguments(helperPath: string, descriptors: readonly AuthoringArgumentDescriptor[] | undefined, args: readonly unknown[]): void;
74
109
  declare function instantiateAuthoringTypeConstructor(descriptor: AuthoringTypeConstructorDescriptor, args: readonly unknown[]): {
@@ -83,17 +118,11 @@ declare function instantiateAuthoringFieldPreset(descriptor: AuthoringFieldPrese
83
118
  readonly typeParams?: Record<string, unknown>;
84
119
  };
85
120
  readonly nullable: boolean;
86
- readonly default?: {
87
- readonly kind: 'literal';
88
- readonly value: unknown;
89
- } | {
90
- readonly kind: 'function';
91
- readonly expression: string;
92
- };
93
- readonly executionDefault?: unknown;
121
+ readonly default?: ColumnDefault;
122
+ readonly executionDefaults?: ExecutionMutationDefaultPhases;
94
123
  readonly id: boolean;
95
124
  readonly unique: boolean;
96
125
  };
97
126
  //#endregion
98
- export { resolveAuthoringTemplateValue as _, AuthoringFieldNamespace as a, AuthoringStorageTypeTemplate as c, AuthoringTypeNamespace as d, instantiateAuthoringFieldPreset as f, isAuthoringTypeConstructorDescriptor as g, isAuthoringFieldPresetDescriptor as h, AuthoringContributions as i, AuthoringTemplateValue as l, isAuthoringArgRef as m, AuthoringArgumentDescriptor as n, AuthoringFieldPresetDescriptor as o, instantiateAuthoringTypeConstructor as p, AuthoringColumnDefaultTemplate as r, AuthoringFieldPresetOutput as s, AuthoringArgRef as t, AuthoringTypeConstructorDescriptor as u, validateAuthoringHelperArguments as v };
99
- //# sourceMappingURL=framework-authoring-D1-JZ37B.d.mts.map
127
+ export { isAuthoringFieldPresetDescriptor as _, AuthoringFieldNamespace as a, resolveAuthoringTemplateValue as b, AuthoringStorageTypeTemplate as c, AuthoringTypeNamespace as d, assertNoCrossRegistryCollisions as f, isAuthoringArgRef as g, instantiateAuthoringTypeConstructor as h, AuthoringContributions as i, AuthoringTemplateValue as l, instantiateAuthoringFieldPreset as m, AuthoringArgumentDescriptor as n, AuthoringFieldPresetDescriptor as o, hasRegisteredFieldNamespace as p, AuthoringColumnDefaultTemplate as r, AuthoringFieldPresetOutput as s, AuthoringArgRef as t, AuthoringTypeConstructorDescriptor as u, isAuthoringTypeConstructorDescriptor as v, validateAuthoringHelperArguments as x, mergeAuthoringNamespaces as y };
128
+ //# sourceMappingURL=framework-authoring-DJbiXhmf.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-authoring-DJbiXhmf.d.mts","names":[],"sources":["../src/shared/framework-authoring.ts"],"sourcesContent":[],"mappings":";;;KAWY,eAAA;;EAAA,SAAA,KAAA,EAAA,MAAe;EAOf,SAAA,IAAA,CAAA,EAAA,SAAsB,MAAA,EAAA;EAK9B,SAAA,OAAA,CAAA,EARiB,sBAQjB;CACS;AACiB,KAPlB,sBAAA,GAOkB,MAAA,GAAA,MAAA,GAAA,OAAA,GAAA,IAAA,GAF1B,eAE0B,GAAA,SADjB,sBACiB,EAAA,GAAA;EAAsB,UAAA,GAAA,EAAA,MAAA,CAAA,EAAtB,sBAAsB;AAAG,CAAA;AAOvD,UALU,iCAAA,CAK6B;EAAG,SAAA,IAAA,CAAA,EAAA,MAAA;EAYE,SAAA,QAAA,CAAA,EAAA,OAAA;;AAAT,KAZvB,2BAAA,GAA8B,iCAYP,GAAA,CAAA;EAIlB,SAAA,IAAA,EAAA,QAAA;CAEM,GAAA;EACgB,SAAA,IAAA,EAAA,QAAA;EAAf,SAAA,OAAA,CAAA,EAAA,OAAA;EAAM,SAAA,OAAA,CAAA,EAAA,MAAA;EAGb,SAAA,OAAA,CAAA,EAAA,MAAA;AAMjB,CAAA,GAAiB;EAKA,SAAA,IAAA,EAAA,aAAA;AAKjB,CAAA,GAAY;EAIK,SAAA,IAAA,EAAA,QAAA;EAKA,SAAA,UAAA,EAnCY,MAmCZ,CAAA,MAA2B,EAnCA,2BAmCA,CAAA;CAEvB,CAAA;AACU,UAlCd,4BAAA,CAkCc;EAHqB,SAAA,OAAA,EAAA,MAAA;EAA4B,SAAA,UAAA,EA7BzD,sBA6ByD;EAQ/D,SAAA,UAAA,CAAA,EApCO,MAoCP,CAAA,MAA8B,EApCR,sBAsCZ,CAAA;AAI3B;AAIY,UA3CK,kCAAA,CA4CU;EAGV,SAAA,IAAA,EAAA,iBAAsB;EAKvB,SAAA,IAAA,CAAA,EAAA,SAlDW,2BAkDgD,EAAA;EAkB3D,SAAA,MAAA,EAnEG,4BAmEiC;AAYpD;AAoBgB,UAhGC,qCAAA,CAiGA;EA+BD,SAAA,IAAA,EAAA,SAAA;EAyEA,SAAA,KAAA,EAvME,sBAuM6B;AA6B/C;AA4GgB,UA7UC,sCAAA,CA+UO;EAoHR,SAAA,IAAA,EAAA,UAAA;EAWA,SAAA,UAAA,EA5cO,sBA4cwB;;AAOrB,KAhdd,8BAAA,GACR,qCA+csB,GA9ctB,sCA8csB;AAGL,UA/cJ,kCAAA,CA+cI;EACU,SAAA,QAAA,CAAA,EA/cT,sBA+cS;EAA8B,SAAA,QAAA,CAAA,EA9cvC,sBA8cuC;;UA3c5C,0BAAA,SAAmC;;qBAE/B;+BACU;;;;UAKd,8BAAA;;2BAEU;mBACR;;KAGP,sBAAA;2BACe,qCAAqC;;KAGpD,uBAAA;2BACe,iCAAiC;;UAG3C,sBAAA;kBACC;mBACC;;iBAGH,iBAAA,2BAA4C;iBAkB5C,oCAAA,2BAEJ;iBAUI,gCAAA,2BAEJ;;;;;;;;;iBAkBI,2BAAA,gBACC;;;;;;;;;;;;;;;;;;;iBA+BD,wBAAA,SACN,iCACA;iBAuEM,+BAAA,gBACC,wCACC;iBA2BF,6BAAA,WACJ;iBA2GI,gCAAA,2CAEQ;iBAoHR,mCAAA,aACF;;;wBAKU;;iBAKR,+BAAA,aACF;;;;0BAMY;;;qBAGL;+BACU"}
@@ -0,0 +1,206 @@
1
+ import { isColumnDefaultLiteralInputValue, isExecutionMutationDefaultValue } from "@prisma-next/contract/types";
2
+ import { ifDefined } from "@prisma-next/utils/defined";
3
+
4
+ //#region src/shared/framework-authoring.ts
5
+ function isAuthoringArgRef(value) {
6
+ if (typeof value !== "object" || value === null || value.kind !== "arg") return false;
7
+ const { index, path } = value;
8
+ if (typeof index !== "number" || !Number.isInteger(index) || index < 0) return false;
9
+ if (path !== void 0 && (!Array.isArray(path) || path.some((s) => typeof s !== "string"))) return false;
10
+ return true;
11
+ }
12
+ function isAuthoringTemplateRecord(value) {
13
+ return typeof value === "object" && value !== null && !Array.isArray(value);
14
+ }
15
+ function isAuthoringTypeConstructorDescriptor(value) {
16
+ return typeof value === "object" && value !== null && value.kind === "typeConstructor" && typeof value.output === "object" && value.output !== null;
17
+ }
18
+ function isAuthoringFieldPresetDescriptor(value) {
19
+ return typeof value === "object" && value !== null && value.kind === "fieldPreset" && typeof value.output === "object" && value.output !== null;
20
+ }
21
+ /**
22
+ * Returns true when `namespace` is a non-leaf key in `contributions.field`.
23
+ *
24
+ * `AuthoringFieldNamespace` permits a leaf descriptor at any depth — including
25
+ * the root — so a top-level `field: { Foo: { kind: 'fieldPreset', ... } }`
26
+ * registration must NOT be treated as a "namespace" with sub-paths. Callers
27
+ * use this predicate to gate dot-namespaced lookups (e.g. PSL `@Foo.bar`).
28
+ */
29
+ function hasRegisteredFieldNamespace(contributions, namespace) {
30
+ if (contributions?.field === void 0 || !Object.hasOwn(contributions.field, namespace)) return false;
31
+ return !isAuthoringFieldPresetDescriptor(contributions.field[namespace]);
32
+ }
33
+ function isPlainNamespaceObject(value) {
34
+ return typeof value === "object" && value !== null && !Array.isArray(value);
35
+ }
36
+ /**
37
+ * Merges `source` into `target` recursively at the descriptor-namespace
38
+ * level. `leafGuard` decides which values are descriptors (terminal
39
+ * merge points; same-path registrations across components are reported
40
+ * as duplicates) versus sub-namespaces (recursion targets).
41
+ *
42
+ * Path segments are validated against prototype-pollution names
43
+ * (`__proto__`, `constructor`, `prototype`). A value that is neither a
44
+ * recognized leaf nor a plain object — e.g. a malformed descriptor
45
+ * where the canonical leaf guard rejected it for missing `output` —
46
+ * is reported as an invalid contribution rather than recursed into,
47
+ * which would either silently mangle state or infinite-loop on
48
+ * primitive properties.
49
+ *
50
+ * Within-registry duplicate detection is this walker's job;
51
+ * cross-registry detection runs separately via
52
+ * `assertNoCrossRegistryCollisions` after merging completes.
53
+ */
54
+ function mergeAuthoringNamespaces(target, source, path, leafGuard, label) {
55
+ const assertSafePath = (currentPath) => {
56
+ const blockedSegment = currentPath.find((segment) => segment === "__proto__" || segment === "constructor" || segment === "prototype");
57
+ if (blockedSegment) throw new Error(`Invalid authoring ${label} helper "${currentPath.join(".")}". Helper path segments must not use "${blockedSegment}".`);
58
+ };
59
+ for (const [key, sourceValue] of Object.entries(source)) {
60
+ const currentPath = [...path, key];
61
+ assertSafePath(currentPath);
62
+ const hasExistingValue = Object.hasOwn(target, key);
63
+ const existingValue = hasExistingValue ? target[key] : void 0;
64
+ if (!hasExistingValue) {
65
+ target[key] = sourceValue;
66
+ continue;
67
+ }
68
+ const existingIsLeaf = leafGuard(existingValue);
69
+ const sourceIsLeaf = leafGuard(sourceValue);
70
+ if (existingIsLeaf || sourceIsLeaf) throw new Error(`Duplicate authoring ${label} helper "${currentPath.join(".")}". Helper names must be unique across composed packs.`);
71
+ if (!isPlainNamespaceObject(existingValue) || !isPlainNamespaceObject(sourceValue)) throw new Error(`Invalid authoring ${label} helper "${currentPath.join(".")}". Expected a sub-namespace object or a recognized descriptor; received a malformed value.`);
72
+ mergeAuthoringNamespaces(existingValue, sourceValue, currentPath, leafGuard, label);
73
+ }
74
+ }
75
+ function collectAuthoringLeafPaths(namespace, isLeaf, path = []) {
76
+ const paths = [];
77
+ for (const [key, value] of Object.entries(namespace)) {
78
+ const currentPath = [...path, key];
79
+ if (isLeaf(value)) {
80
+ paths.push(currentPath.join("."));
81
+ continue;
82
+ }
83
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) paths.push(...collectAuthoringLeafPaths(value, isLeaf, currentPath));
84
+ }
85
+ return paths;
86
+ }
87
+ function assertNoCrossRegistryCollisions(typeNamespace, fieldNamespace) {
88
+ const typePaths = new Set(collectAuthoringLeafPaths(typeNamespace, isAuthoringTypeConstructorDescriptor));
89
+ if (typePaths.size === 0) return;
90
+ for (const fieldPath of collectAuthoringLeafPaths(fieldNamespace, isAuthoringFieldPresetDescriptor)) if (typePaths.has(fieldPath)) throw new Error(`Ambiguous authoring registry path "${fieldPath}". The same path is registered as both a type constructor and a field preset; PSL resolution would be ambiguous. Register each path in only one of authoringContributions.field / authoringContributions.type.`);
91
+ }
92
+ function resolveAuthoringTemplateValue(template, args) {
93
+ if (isAuthoringArgRef(template)) {
94
+ let value = args[template.index];
95
+ for (const segment of template.path ?? []) {
96
+ if (!isAuthoringTemplateRecord(value) || !Object.hasOwn(value, segment)) {
97
+ value = void 0;
98
+ break;
99
+ }
100
+ value = value[segment];
101
+ }
102
+ if (value === void 0 && template.default !== void 0) return resolveAuthoringTemplateValue(template.default, args);
103
+ return value;
104
+ }
105
+ if (Array.isArray(template)) return template.map((value) => resolveAuthoringTemplateValue(value, args));
106
+ if (typeof template === "object" && template !== null) {
107
+ const resolved = {};
108
+ for (const [key, value] of Object.entries(template)) {
109
+ const resolvedValue = resolveAuthoringTemplateValue(value, args);
110
+ if (resolvedValue !== void 0) resolved[key] = resolvedValue;
111
+ }
112
+ return resolved;
113
+ }
114
+ return template;
115
+ }
116
+ function validateAuthoringArgument(descriptor, value, path) {
117
+ if (value === void 0) {
118
+ if (descriptor.optional) return;
119
+ throw new Error(`Missing required authoring helper argument at ${path}`);
120
+ }
121
+ if (descriptor.kind === "string") {
122
+ if (typeof value !== "string") throw new Error(`Authoring helper argument at ${path} must be a string`);
123
+ return;
124
+ }
125
+ if (descriptor.kind === "stringArray") {
126
+ if (!Array.isArray(value)) throw new Error(`Authoring helper argument at ${path} must be an array of strings`);
127
+ for (const entry of value) if (typeof entry !== "string") throw new Error(`Authoring helper argument at ${path} must be an array of strings`);
128
+ return;
129
+ }
130
+ if (descriptor.kind === "object") {
131
+ if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error(`Authoring helper argument at ${path} must be an object`);
132
+ const input = value;
133
+ const expectedKeys = new Set(Object.keys(descriptor.properties));
134
+ for (const key of Object.keys(input)) if (!expectedKeys.has(key)) throw new Error(`Authoring helper argument at ${path} contains unknown property "${key}"`);
135
+ for (const [key, propertyDescriptor] of Object.entries(descriptor.properties)) validateAuthoringArgument(propertyDescriptor, input[key], `${path}.${key}`);
136
+ return;
137
+ }
138
+ if (typeof value !== "number" || Number.isNaN(value)) throw new Error(`Authoring helper argument at ${path} must be a number`);
139
+ if (descriptor.integer && !Number.isInteger(value)) throw new Error(`Authoring helper argument at ${path} must be an integer`);
140
+ if (descriptor.minimum !== void 0 && value < descriptor.minimum) throw new Error(`Authoring helper argument at ${path} must be >= ${descriptor.minimum}, received ${value}`);
141
+ if (descriptor.maximum !== void 0 && value > descriptor.maximum) throw new Error(`Authoring helper argument at ${path} must be <= ${descriptor.maximum}, received ${value}`);
142
+ }
143
+ function validateAuthoringHelperArguments(helperPath, descriptors, args) {
144
+ const expected = descriptors ?? [];
145
+ const minimumArgs = expected.reduce((count, descriptor, index) => descriptor.optional ? count : index + 1, 0);
146
+ if (args.length < minimumArgs || args.length > expected.length) throw new Error(`${helperPath} expects ${minimumArgs === expected.length ? expected.length : `${minimumArgs}-${expected.length}`} argument(s), received ${args.length}`);
147
+ expected.forEach((descriptor, index) => {
148
+ validateAuthoringArgument(descriptor, args[index], `${helperPath}[${index}]`);
149
+ });
150
+ }
151
+ function resolveAuthoringStorageTypeTemplate(template, args) {
152
+ const nativeType = resolveAuthoringTemplateValue(template.nativeType, args);
153
+ if (typeof nativeType !== "string") throw new Error(`Resolved authoring nativeType must be a string for codec "${template.codecId}", received ${String(nativeType)}`);
154
+ const typeParams = template.typeParams === void 0 ? void 0 : resolveAuthoringTemplateValue(template.typeParams, args);
155
+ if (typeParams !== void 0 && !isAuthoringTemplateRecord(typeParams)) throw new Error(`Resolved authoring typeParams must be an object for codec "${template.codecId}", received ${String(typeParams)}`);
156
+ return {
157
+ codecId: template.codecId,
158
+ nativeType,
159
+ ...typeParams === void 0 ? {} : { typeParams }
160
+ };
161
+ }
162
+ function resolveAuthoringColumnDefaultTemplate(template, args) {
163
+ if (template.kind === "literal") {
164
+ const value = resolveAuthoringTemplateValue(template.value, args);
165
+ if (value === void 0) throw new Error("Resolved authoring literal default must not be undefined");
166
+ if (!isColumnDefaultLiteralInputValue(value)) throw new Error(`Resolved authoring literal default must be a JSON-serializable value or Date, received ${String(value)}`);
167
+ return {
168
+ kind: "literal",
169
+ value
170
+ };
171
+ }
172
+ const expression = resolveAuthoringTemplateValue(template.expression, args);
173
+ if (expression === void 0 || typeof expression === "object" && expression !== null) throw new Error(`Resolved authoring function default expression must resolve to a primitive, received ${String(expression)}`);
174
+ return {
175
+ kind: "function",
176
+ expression: String(expression)
177
+ };
178
+ }
179
+ function resolveExecutionMutationDefaultPhase(phase, template, args) {
180
+ const value = resolveAuthoringTemplateValue(template, args);
181
+ if (!isExecutionMutationDefaultValue(value)) throw new Error(`Authoring preset executionDefaults.${phase} did not resolve to a valid generator descriptor (kind: 'generator', id: string).`);
182
+ return value;
183
+ }
184
+ function resolveAuthoringExecutionDefaultsTemplate(template, args) {
185
+ return {
186
+ ...ifDefined("onCreate", template.onCreate !== void 0 ? resolveExecutionMutationDefaultPhase("onCreate", template.onCreate, args) : void 0),
187
+ ...ifDefined("onUpdate", template.onUpdate !== void 0 ? resolveExecutionMutationDefaultPhase("onUpdate", template.onUpdate, args) : void 0)
188
+ };
189
+ }
190
+ function instantiateAuthoringTypeConstructor(descriptor, args) {
191
+ return resolveAuthoringStorageTypeTemplate(descriptor.output, args);
192
+ }
193
+ function instantiateAuthoringFieldPreset(descriptor, args) {
194
+ return {
195
+ descriptor: resolveAuthoringStorageTypeTemplate(descriptor.output, args),
196
+ nullable: descriptor.output.nullable ?? false,
197
+ ...ifDefined("default", descriptor.output.default !== void 0 ? resolveAuthoringColumnDefaultTemplate(descriptor.output.default, args) : void 0),
198
+ ...ifDefined("executionDefaults", descriptor.output.executionDefaults !== void 0 ? resolveAuthoringExecutionDefaultsTemplate(descriptor.output.executionDefaults, args) : void 0),
199
+ id: descriptor.output.id ?? false,
200
+ unique: descriptor.output.unique ?? false
201
+ };
202
+ }
203
+
204
+ //#endregion
205
+ export { isAuthoringArgRef as a, mergeAuthoringNamespaces as c, instantiateAuthoringTypeConstructor as i, resolveAuthoringTemplateValue as l, hasRegisteredFieldNamespace as n, isAuthoringFieldPresetDescriptor as o, instantiateAuthoringFieldPreset as r, isAuthoringTypeConstructorDescriptor as s, assertNoCrossRegistryCollisions as t, validateAuthoringHelperArguments as u };
206
+ //# sourceMappingURL=framework-authoring-gi_BJlNO.mjs.map