@prisma-next/core-control-plane 0.1.0-pr.64.6 → 0.1.0-pr.65.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,9 +30,9 @@ function validateConfig(config) {
30
30
  why: "Config.family must have familyId: string"
31
31
  });
32
32
  }
33
- if (!family["manifest"] || typeof family["manifest"] !== "object") {
34
- throw errorConfigValidation("family.manifest", {
35
- why: "Config.family must have manifest: ExtensionPackManifest"
33
+ if (typeof family["version"] !== "string") {
34
+ throw errorConfigValidation("family.version", {
35
+ why: "Config.family must have version: string"
36
36
  });
37
37
  }
38
38
  if (!family["hook"] || typeof family["hook"] !== "object") {
@@ -62,9 +62,9 @@ function validateConfig(config) {
62
62
  why: "Config.target must have familyId: string"
63
63
  });
64
64
  }
65
- if (!target["manifest"] || typeof target["manifest"] !== "object") {
66
- throw errorConfigValidation("target.manifest", {
67
- why: "Config.target must have manifest: ExtensionPackManifest"
65
+ if (typeof target["version"] !== "string") {
66
+ throw errorConfigValidation("target.version", {
67
+ why: "Config.target must have version: string"
68
68
  });
69
69
  }
70
70
  if (target["familyId"] !== familyId) {
@@ -99,9 +99,9 @@ function validateConfig(config) {
99
99
  why: "Config.adapter must have familyId: string"
100
100
  });
101
101
  }
102
- if (!adapter["manifest"] || typeof adapter["manifest"] !== "object") {
103
- throw errorConfigValidation("adapter.manifest", {
104
- why: "Config.adapter must have manifest: ExtensionPackManifest"
102
+ if (typeof adapter["version"] !== "string") {
103
+ throw errorConfigValidation("adapter.version", {
104
+ why: "Config.adapter must have version: string"
105
105
  });
106
106
  }
107
107
  if (adapter["familyId"] !== familyId) {
@@ -152,9 +152,9 @@ function validateConfig(config) {
152
152
  why: "Config.extensions items must have familyId: string"
153
153
  });
154
154
  }
155
- if (!extObj["manifest"] || typeof extObj["manifest"] !== "object") {
156
- throw errorConfigValidation("extensions[].manifest", {
157
- why: "Config.extensions items must have manifest: ExtensionPackManifest"
155
+ if (typeof extObj["version"] !== "string") {
156
+ throw errorConfigValidation("extensions[].version", {
157
+ why: "Config.extensions items must have version: string"
158
158
  });
159
159
  }
160
160
  if (extObj["familyId"] !== familyId) {
@@ -191,9 +191,9 @@ function validateConfig(config) {
191
191
  why: "Config.driver must have id: string"
192
192
  });
193
193
  }
194
- if (!driver["manifest"] || typeof driver["manifest"] !== "object") {
195
- throw errorConfigValidation("driver.manifest", {
196
- why: "Config.driver must have manifest: ExtensionPackManifest"
194
+ if (typeof driver["version"] !== "string") {
195
+ throw errorConfigValidation("driver.version", {
196
+ why: "Config.driver must have version: string"
197
197
  });
198
198
  }
199
199
  if (typeof driver["familyId"] !== "string") {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config-validation.ts"],"sourcesContent":["import type { PrismaNextConfig } from './config-types';\nimport { errorConfigValidation } from './errors';\n\n/**\n * Validates that the config has the required structure.\n * This is pure validation logic with no file I/O or CLI awareness.\n *\n * @param config - Config object to validate\n * @throws CliStructuredError if config structure is invalid\n */\nexport function validateConfig(config: unknown): asserts config is PrismaNextConfig {\n if (!config || typeof config !== 'object') {\n throw errorConfigValidation('object', {\n why: 'Config must be an object',\n });\n }\n\n const configObj = config as Record<string, unknown>;\n\n if (!configObj['family']) {\n throw errorConfigValidation('family');\n }\n\n if (!configObj['target']) {\n throw errorConfigValidation('target');\n }\n\n if (!configObj['adapter']) {\n throw errorConfigValidation('adapter');\n }\n\n // Validate family descriptor\n const family = configObj['family'] as Record<string, unknown>;\n if (family['kind'] !== 'family') {\n throw errorConfigValidation('family.kind', {\n why: 'Config.family must have kind: \"family\"',\n });\n }\n if (typeof family['familyId'] !== 'string') {\n throw errorConfigValidation('family.familyId', {\n why: 'Config.family must have familyId: string',\n });\n }\n if (!family['manifest'] || typeof family['manifest'] !== 'object') {\n throw errorConfigValidation('family.manifest', {\n why: 'Config.family must have manifest: ExtensionPackManifest',\n });\n }\n if (!family['hook'] || typeof family['hook'] !== 'object') {\n throw errorConfigValidation('family.hook', {\n why: 'Config.family must have hook: TargetFamilyHook',\n });\n }\n if (typeof family['create'] !== 'function') {\n throw errorConfigValidation('family.create', {\n why: 'Config.family must have create: function',\n });\n }\n\n const familyId = family['familyId'] as string;\n\n // Validate target descriptor\n const target = configObj['target'] as Record<string, unknown>;\n if (target['kind'] !== 'target') {\n throw errorConfigValidation('target.kind', {\n why: 'Config.target must have kind: \"target\"',\n });\n }\n if (typeof target['id'] !== 'string') {\n throw errorConfigValidation('target.id', {\n why: 'Config.target must have id: string',\n });\n }\n if (typeof target['familyId'] !== 'string') {\n throw errorConfigValidation('target.familyId', {\n why: 'Config.target must have familyId: string',\n });\n }\n if (!target['manifest'] || typeof target['manifest'] !== 'object') {\n throw errorConfigValidation('target.manifest', {\n why: 'Config.target must have manifest: ExtensionPackManifest',\n });\n }\n if (target['familyId'] !== familyId) {\n throw errorConfigValidation('target.familyId', {\n why: `Config.target.familyId must match Config.family.familyId (expected: ${familyId}, got: ${target['familyId']})`,\n });\n }\n if (typeof target['targetId'] !== 'string') {\n throw errorConfigValidation('target.targetId', {\n why: 'Config.target must have targetId: string',\n });\n }\n if (typeof target['create'] !== 'function') {\n throw errorConfigValidation('target.create', {\n why: 'Config.target must have create: function',\n });\n }\n const expectedTargetId = target['targetId'] as string;\n\n // Validate adapter descriptor\n const adapter = configObj['adapter'] as Record<string, unknown>;\n if (adapter['kind'] !== 'adapter') {\n throw errorConfigValidation('adapter.kind', {\n why: 'Config.adapter must have kind: \"adapter\"',\n });\n }\n if (typeof adapter['id'] !== 'string') {\n throw errorConfigValidation('adapter.id', {\n why: 'Config.adapter must have id: string',\n });\n }\n if (typeof adapter['familyId'] !== 'string') {\n throw errorConfigValidation('adapter.familyId', {\n why: 'Config.adapter must have familyId: string',\n });\n }\n if (!adapter['manifest'] || typeof adapter['manifest'] !== 'object') {\n throw errorConfigValidation('adapter.manifest', {\n why: 'Config.adapter must have manifest: ExtensionPackManifest',\n });\n }\n if (adapter['familyId'] !== familyId) {\n throw errorConfigValidation('adapter.familyId', {\n why: `Config.adapter.familyId must match Config.family.familyId (expected: ${familyId}, got: ${adapter['familyId']})`,\n });\n }\n if (typeof adapter['targetId'] !== 'string') {\n throw errorConfigValidation('adapter.targetId', {\n why: 'Config.adapter must have targetId: string',\n });\n }\n if (adapter['targetId'] !== expectedTargetId) {\n throw errorConfigValidation('adapter.targetId', {\n why: `Config.adapter.targetId must match Config.target.targetId (expected: ${expectedTargetId}, got: ${adapter['targetId']})`,\n });\n }\n if (typeof adapter['create'] !== 'function') {\n throw errorConfigValidation('adapter.create', {\n why: 'Config.adapter must have create: function',\n });\n }\n\n // Validate extensions array if present\n if (configObj['extensions'] !== undefined) {\n if (!Array.isArray(configObj['extensions'])) {\n throw errorConfigValidation('extensions', {\n why: 'Config.extensions must be an array',\n });\n }\n for (const ext of configObj['extensions']) {\n if (!ext || typeof ext !== 'object') {\n throw errorConfigValidation('extensions[]', {\n why: 'Config.extensions must contain ExtensionDescriptor objects',\n });\n }\n const extObj = ext as Record<string, unknown>;\n if (extObj['kind'] !== 'extension') {\n throw errorConfigValidation('extensions[].kind', {\n why: 'Config.extensions items must have kind: \"extension\"',\n });\n }\n if (typeof extObj['id'] !== 'string') {\n throw errorConfigValidation('extensions[].id', {\n why: 'Config.extensions items must have id: string',\n });\n }\n if (typeof extObj['familyId'] !== 'string') {\n throw errorConfigValidation('extensions[].familyId', {\n why: 'Config.extensions items must have familyId: string',\n });\n }\n if (!extObj['manifest'] || typeof extObj['manifest'] !== 'object') {\n throw errorConfigValidation('extensions[].manifest', {\n why: 'Config.extensions items must have manifest: ExtensionPackManifest',\n });\n }\n if (extObj['familyId'] !== familyId) {\n throw errorConfigValidation('extensions[].familyId', {\n why: `Config.extensions[].familyId must match Config.family.familyId (expected: ${familyId}, got: ${extObj['familyId']})`,\n });\n }\n if (typeof extObj['targetId'] !== 'string') {\n throw errorConfigValidation('extensions[].targetId', {\n why: 'Config.extensions items must have targetId: string',\n });\n }\n if (extObj['targetId'] !== expectedTargetId) {\n throw errorConfigValidation('extensions[].targetId', {\n why: `Config.extensions[].targetId must match Config.target.targetId (expected: ${expectedTargetId}, got: ${extObj['targetId']})`,\n });\n }\n if (typeof extObj['create'] !== 'function') {\n throw errorConfigValidation('extensions[].create', {\n why: 'Config.extensions items must have create: function',\n });\n }\n }\n }\n\n // Validate driver descriptor if present\n if (configObj['driver'] !== undefined) {\n const driver = configObj['driver'] as Record<string, unknown>;\n if (driver['kind'] !== 'driver') {\n throw errorConfigValidation('driver.kind', {\n why: 'Config.driver must have kind: \"driver\"',\n });\n }\n if (typeof driver['id'] !== 'string') {\n throw errorConfigValidation('driver.id', {\n why: 'Config.driver must have id: string',\n });\n }\n if (!driver['manifest'] || typeof driver['manifest'] !== 'object') {\n throw errorConfigValidation('driver.manifest', {\n why: 'Config.driver must have manifest: ExtensionPackManifest',\n });\n }\n if (typeof driver['familyId'] !== 'string') {\n throw errorConfigValidation('driver.familyId', {\n why: 'Config.driver must have familyId: string',\n });\n }\n if (driver['familyId'] !== familyId) {\n throw errorConfigValidation('driver.familyId', {\n why: `Config.driver.familyId must match Config.family.familyId (expected: ${familyId}, got: ${driver['familyId']})`,\n });\n }\n if (typeof driver['targetId'] !== 'string') {\n throw errorConfigValidation('driver.targetId', {\n why: 'Config.driver must have targetId: string',\n });\n }\n if (driver['targetId'] !== expectedTargetId) {\n throw errorConfigValidation('driver.targetId', {\n why: `Config.driver.targetId must match Config.target.targetId (expected: ${expectedTargetId}, got: ${driver['targetId']})`,\n });\n }\n if (typeof driver['create'] !== 'function') {\n throw errorConfigValidation('driver.create', {\n why: 'Config.driver must have create: function',\n });\n }\n }\n\n // Validate contract config if present (structure validation - defineConfig() handles normalization)\n if (configObj['contract'] !== undefined) {\n const contract = configObj['contract'] as Record<string, unknown>;\n if (!contract || typeof contract !== 'object') {\n throw errorConfigValidation('contract', {\n why: 'Config.contract must be an object',\n });\n }\n if (!('source' in contract)) {\n throw errorConfigValidation('contract.source', {\n why: 'Config.contract.source is required when contract is provided',\n });\n }\n if (contract['output'] !== undefined && typeof contract['output'] !== 'string') {\n throw errorConfigValidation('contract.output', {\n why: 'Config.contract.output must be a string when provided',\n });\n }\n if (contract['types'] !== undefined && typeof contract['types'] !== 'string') {\n throw errorConfigValidation('contract.types', {\n why: 'Config.contract.types must be a string when provided',\n });\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/config-validation.ts"],"sourcesContent":["import type { PrismaNextConfig } from './config-types';\nimport { errorConfigValidation } from './errors';\n\n/**\n * Validates that the config has the required structure.\n * This is pure validation logic with no file I/O or CLI awareness.\n *\n * @param config - Config object to validate\n * @throws CliStructuredError if config structure is invalid\n */\nexport function validateConfig(config: unknown): asserts config is PrismaNextConfig {\n if (!config || typeof config !== 'object') {\n throw errorConfigValidation('object', {\n why: 'Config must be an object',\n });\n }\n\n const configObj = config as Record<string, unknown>;\n\n if (!configObj['family']) {\n throw errorConfigValidation('family');\n }\n\n if (!configObj['target']) {\n throw errorConfigValidation('target');\n }\n\n if (!configObj['adapter']) {\n throw errorConfigValidation('adapter');\n }\n\n // Validate family descriptor\n const family = configObj['family'] as Record<string, unknown>;\n if (family['kind'] !== 'family') {\n throw errorConfigValidation('family.kind', {\n why: 'Config.family must have kind: \"family\"',\n });\n }\n if (typeof family['familyId'] !== 'string') {\n throw errorConfigValidation('family.familyId', {\n why: 'Config.family must have familyId: string',\n });\n }\n if (typeof family['version'] !== 'string') {\n throw errorConfigValidation('family.version', {\n why: 'Config.family must have version: string',\n });\n }\n if (!family['hook'] || typeof family['hook'] !== 'object') {\n throw errorConfigValidation('family.hook', {\n why: 'Config.family must have hook: TargetFamilyHook',\n });\n }\n if (typeof family['create'] !== 'function') {\n throw errorConfigValidation('family.create', {\n why: 'Config.family must have create: function',\n });\n }\n\n const familyId = family['familyId'] as string;\n\n // Validate target descriptor\n const target = configObj['target'] as Record<string, unknown>;\n if (target['kind'] !== 'target') {\n throw errorConfigValidation('target.kind', {\n why: 'Config.target must have kind: \"target\"',\n });\n }\n if (typeof target['id'] !== 'string') {\n throw errorConfigValidation('target.id', {\n why: 'Config.target must have id: string',\n });\n }\n if (typeof target['familyId'] !== 'string') {\n throw errorConfigValidation('target.familyId', {\n why: 'Config.target must have familyId: string',\n });\n }\n if (typeof target['version'] !== 'string') {\n throw errorConfigValidation('target.version', {\n why: 'Config.target must have version: string',\n });\n }\n if (target['familyId'] !== familyId) {\n throw errorConfigValidation('target.familyId', {\n why: `Config.target.familyId must match Config.family.familyId (expected: ${familyId}, got: ${target['familyId']})`,\n });\n }\n if (typeof target['targetId'] !== 'string') {\n throw errorConfigValidation('target.targetId', {\n why: 'Config.target must have targetId: string',\n });\n }\n if (typeof target['create'] !== 'function') {\n throw errorConfigValidation('target.create', {\n why: 'Config.target must have create: function',\n });\n }\n const expectedTargetId = target['targetId'] as string;\n\n // Validate adapter descriptor\n const adapter = configObj['adapter'] as Record<string, unknown>;\n if (adapter['kind'] !== 'adapter') {\n throw errorConfigValidation('adapter.kind', {\n why: 'Config.adapter must have kind: \"adapter\"',\n });\n }\n if (typeof adapter['id'] !== 'string') {\n throw errorConfigValidation('adapter.id', {\n why: 'Config.adapter must have id: string',\n });\n }\n if (typeof adapter['familyId'] !== 'string') {\n throw errorConfigValidation('adapter.familyId', {\n why: 'Config.adapter must have familyId: string',\n });\n }\n if (typeof adapter['version'] !== 'string') {\n throw errorConfigValidation('adapter.version', {\n why: 'Config.adapter must have version: string',\n });\n }\n if (adapter['familyId'] !== familyId) {\n throw errorConfigValidation('adapter.familyId', {\n why: `Config.adapter.familyId must match Config.family.familyId (expected: ${familyId}, got: ${adapter['familyId']})`,\n });\n }\n if (typeof adapter['targetId'] !== 'string') {\n throw errorConfigValidation('adapter.targetId', {\n why: 'Config.adapter must have targetId: string',\n });\n }\n if (adapter['targetId'] !== expectedTargetId) {\n throw errorConfigValidation('adapter.targetId', {\n why: `Config.adapter.targetId must match Config.target.targetId (expected: ${expectedTargetId}, got: ${adapter['targetId']})`,\n });\n }\n if (typeof adapter['create'] !== 'function') {\n throw errorConfigValidation('adapter.create', {\n why: 'Config.adapter must have create: function',\n });\n }\n\n // Validate extensions array if present\n if (configObj['extensions'] !== undefined) {\n if (!Array.isArray(configObj['extensions'])) {\n throw errorConfigValidation('extensions', {\n why: 'Config.extensions must be an array',\n });\n }\n for (const ext of configObj['extensions']) {\n if (!ext || typeof ext !== 'object') {\n throw errorConfigValidation('extensions[]', {\n why: 'Config.extensions must contain ExtensionDescriptor objects',\n });\n }\n const extObj = ext as Record<string, unknown>;\n if (extObj['kind'] !== 'extension') {\n throw errorConfigValidation('extensions[].kind', {\n why: 'Config.extensions items must have kind: \"extension\"',\n });\n }\n if (typeof extObj['id'] !== 'string') {\n throw errorConfigValidation('extensions[].id', {\n why: 'Config.extensions items must have id: string',\n });\n }\n if (typeof extObj['familyId'] !== 'string') {\n throw errorConfigValidation('extensions[].familyId', {\n why: 'Config.extensions items must have familyId: string',\n });\n }\n if (typeof extObj['version'] !== 'string') {\n throw errorConfigValidation('extensions[].version', {\n why: 'Config.extensions items must have version: string',\n });\n }\n if (extObj['familyId'] !== familyId) {\n throw errorConfigValidation('extensions[].familyId', {\n why: `Config.extensions[].familyId must match Config.family.familyId (expected: ${familyId}, got: ${extObj['familyId']})`,\n });\n }\n if (typeof extObj['targetId'] !== 'string') {\n throw errorConfigValidation('extensions[].targetId', {\n why: 'Config.extensions items must have targetId: string',\n });\n }\n if (extObj['targetId'] !== expectedTargetId) {\n throw errorConfigValidation('extensions[].targetId', {\n why: `Config.extensions[].targetId must match Config.target.targetId (expected: ${expectedTargetId}, got: ${extObj['targetId']})`,\n });\n }\n if (typeof extObj['create'] !== 'function') {\n throw errorConfigValidation('extensions[].create', {\n why: 'Config.extensions items must have create: function',\n });\n }\n }\n }\n\n // Validate driver descriptor if present\n if (configObj['driver'] !== undefined) {\n const driver = configObj['driver'] as Record<string, unknown>;\n if (driver['kind'] !== 'driver') {\n throw errorConfigValidation('driver.kind', {\n why: 'Config.driver must have kind: \"driver\"',\n });\n }\n if (typeof driver['id'] !== 'string') {\n throw errorConfigValidation('driver.id', {\n why: 'Config.driver must have id: string',\n });\n }\n if (typeof driver['version'] !== 'string') {\n throw errorConfigValidation('driver.version', {\n why: 'Config.driver must have version: string',\n });\n }\n if (typeof driver['familyId'] !== 'string') {\n throw errorConfigValidation('driver.familyId', {\n why: 'Config.driver must have familyId: string',\n });\n }\n if (driver['familyId'] !== familyId) {\n throw errorConfigValidation('driver.familyId', {\n why: `Config.driver.familyId must match Config.family.familyId (expected: ${familyId}, got: ${driver['familyId']})`,\n });\n }\n if (typeof driver['targetId'] !== 'string') {\n throw errorConfigValidation('driver.targetId', {\n why: 'Config.driver must have targetId: string',\n });\n }\n if (driver['targetId'] !== expectedTargetId) {\n throw errorConfigValidation('driver.targetId', {\n why: `Config.driver.targetId must match Config.target.targetId (expected: ${expectedTargetId}, got: ${driver['targetId']})`,\n });\n }\n if (typeof driver['create'] !== 'function') {\n throw errorConfigValidation('driver.create', {\n why: 'Config.driver must have create: function',\n });\n }\n }\n\n // Validate contract config if present (structure validation - defineConfig() handles normalization)\n if (configObj['contract'] !== undefined) {\n const contract = configObj['contract'] as Record<string, unknown>;\n if (!contract || typeof contract !== 'object') {\n throw errorConfigValidation('contract', {\n why: 'Config.contract must be an object',\n });\n }\n if (!('source' in contract)) {\n throw errorConfigValidation('contract.source', {\n why: 'Config.contract.source is required when contract is provided',\n });\n }\n if (contract['output'] !== undefined && typeof contract['output'] !== 'string') {\n throw errorConfigValidation('contract.output', {\n why: 'Config.contract.output must be a string when provided',\n });\n }\n if (contract['types'] !== undefined && typeof contract['types'] !== 'string') {\n throw errorConfigValidation('contract.types', {\n why: 'Config.contract.types must be a string when provided',\n });\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -30,7 +30,7 @@ type ContractInput = {
30
30
  models: Record<string, unknown>;
31
31
  relations: Record<string, unknown>;
32
32
  storage: Record<string, unknown>;
33
- extensions: Record<string, unknown>;
33
+ extensionPacks: Record<string, unknown>;
34
34
  sources: Record<string, unknown>;
35
35
  capabilities: Record<string, Record<string, boolean>>;
36
36
  meta: Record<string, unknown>;
@@ -9,7 +9,7 @@ var TOP_LEVEL_ORDER = [
9
9
  "models",
10
10
  "storage",
11
11
  "capabilities",
12
- "extensions",
12
+ "extensionPacks",
13
13
  "meta",
14
14
  "sources"
15
15
  ];
@@ -46,11 +46,11 @@ function omitDefaults(obj, path) {
46
46
  const isRequiredModels = currentPath.length === 1 && currentPath[0] === "models";
47
47
  const isRequiredTables = currentPath.length === 2 && currentPath[0] === "storage" && currentPath[1] === "tables";
48
48
  const isRequiredRelations = currentPath.length === 1 && currentPath[0] === "relations";
49
- const isRequiredExtensions = currentPath.length === 1 && currentPath[0] === "extensions";
49
+ const isRequiredExtensions = currentPath.length === 1 && currentPath[0] === "extensionPacks";
50
50
  const isRequiredCapabilities = currentPath.length === 1 && currentPath[0] === "capabilities";
51
51
  const isRequiredMeta = currentPath.length === 1 && currentPath[0] === "meta";
52
52
  const isRequiredSources = currentPath.length === 1 && currentPath[0] === "sources";
53
- const isExtensionNamespace = currentPath.length === 2 && currentPath[0] === "extensions";
53
+ const isExtensionNamespace = currentPath.length === 2 && currentPath[0] === "extensionPacks";
54
54
  const isModelRelations = currentPath.length === 3 && currentPath[0] === "models" && currentPath[2] === "relations";
55
55
  const isTableUniques = currentPath.length === 4 && currentPath[0] === "storage" && currentPath[1] === "tables" && currentPath[3] === "uniques";
56
56
  const isTableIndexes = currentPath.length === 4 && currentPath[0] === "storage" && currentPath[1] === "tables" && currentPath[3] === "indexes";
@@ -137,7 +137,7 @@ function canonicalizeContract(ir) {
137
137
  models: ir.models,
138
138
  relations: ir.relations,
139
139
  storage: ir.storage,
140
- extensions: ir.extensions,
140
+ extensionPacks: ir.extensionPacks,
141
141
  capabilities: ir.capabilities,
142
142
  meta: ir.meta,
143
143
  sources: ir.sources
@@ -174,7 +174,7 @@ function computeCoreHash(contract) {
174
174
  models: contract.models,
175
175
  relations: contract.relations,
176
176
  storage: contract.storage,
177
- extensions: contract.extensions,
177
+ extensionPacks: contract.extensionPacks,
178
178
  sources: contract.sources,
179
179
  capabilities: contract.capabilities,
180
180
  meta: contract.meta
@@ -190,7 +190,7 @@ function computeProfileHash(contract) {
190
190
  models: {},
191
191
  relations: {},
192
192
  storage: {},
193
- extensions: {},
193
+ extensionPacks: {},
194
194
  capabilities: contract.capabilities,
195
195
  meta: {},
196
196
  sources: {}
@@ -219,8 +219,8 @@ function validateCoreStructure(ir) {
219
219
  if (!ir.relations || typeof ir.relations !== "object") {
220
220
  throw new Error("ContractIR must have relations");
221
221
  }
222
- if (!ir.extensions || typeof ir.extensions !== "object") {
223
- throw new Error("ContractIR must have extensions");
222
+ if (!ir.extensionPacks || typeof ir.extensionPacks !== "object") {
223
+ throw new Error("ContractIR must have extensionPacks");
224
224
  }
225
225
  if (!ir.capabilities || typeof ir.capabilities !== "object") {
226
226
  throw new Error("ContractIR must have capabilities");
@@ -250,7 +250,7 @@ async function emit(ir, options, targetFamily) {
250
250
  models: ir.models,
251
251
  relations: ir.relations,
252
252
  storage: ir.storage,
253
- extensions: ir.extensions,
253
+ extensionPacks: ir.extensionPacks,
254
254
  capabilities: ir.capabilities,
255
255
  meta: ir.meta,
256
256
  sources: ir.sources
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/emission/canonicalization.ts","../../src/emission/emit.ts","../../src/emission/hashing.ts"],"sourcesContent":["import type { ContractIR } from '@prisma-next/contract/ir';\n\ntype NormalizedContract = {\n schemaVersion: string;\n targetFamily: string;\n target: string;\n coreHash?: string;\n profileHash?: string;\n models: Record<string, unknown>;\n relations: Record<string, unknown>;\n storage: Record<string, unknown>;\n extensions: Record<string, unknown>;\n capabilities: Record<string, Record<string, boolean>>;\n meta: Record<string, unknown>;\n sources: Record<string, unknown>;\n};\n\nconst TOP_LEVEL_ORDER = [\n 'schemaVersion',\n 'canonicalVersion',\n 'targetFamily',\n 'target',\n 'coreHash',\n 'profileHash',\n 'models',\n 'storage',\n 'capabilities',\n 'extensions',\n 'meta',\n 'sources',\n] as const;\n\nfunction isDefaultValue(value: unknown): boolean {\n if (value === false) return true;\n if (value === null) return false;\n if (Array.isArray(value) && value.length === 0) return true;\n if (typeof value === 'object' && value !== null) {\n const keys = Object.keys(value);\n return keys.length === 0;\n }\n return false;\n}\n\nfunction omitDefaults(obj: unknown, path: readonly string[]): unknown {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => omitDefaults(item, path));\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const currentPath = [...path, key];\n\n // Exclude metadata fields from canonicalization\n if (key === '_generated') {\n continue;\n }\n\n if (key === 'nullable' && value === false) {\n continue;\n }\n\n if (key === 'generated' && value === false) {\n continue;\n }\n\n if (isDefaultValue(value)) {\n const isRequiredModels = currentPath.length === 1 && currentPath[0] === 'models';\n const isRequiredTables =\n currentPath.length === 2 && currentPath[0] === 'storage' && currentPath[1] === 'tables';\n const isRequiredRelations = currentPath.length === 1 && currentPath[0] === 'relations';\n const isRequiredExtensions = currentPath.length === 1 && currentPath[0] === 'extensions';\n const isRequiredCapabilities = currentPath.length === 1 && currentPath[0] === 'capabilities';\n const isRequiredMeta = currentPath.length === 1 && currentPath[0] === 'meta';\n const isRequiredSources = currentPath.length === 1 && currentPath[0] === 'sources';\n const isExtensionNamespace = currentPath.length === 2 && currentPath[0] === 'extensions';\n const isModelRelations =\n currentPath.length === 3 && currentPath[0] === 'models' && currentPath[2] === 'relations';\n const isTableUniques =\n currentPath.length === 4 &&\n currentPath[0] === 'storage' &&\n currentPath[1] === 'tables' &&\n currentPath[3] === 'uniques';\n const isTableIndexes =\n currentPath.length === 4 &&\n currentPath[0] === 'storage' &&\n currentPath[1] === 'tables' &&\n currentPath[3] === 'indexes';\n const isTableForeignKeys =\n currentPath.length === 4 &&\n currentPath[0] === 'storage' &&\n currentPath[1] === 'tables' &&\n currentPath[3] === 'foreignKeys';\n\n if (\n !isRequiredModels &&\n !isRequiredTables &&\n !isRequiredRelations &&\n !isRequiredExtensions &&\n !isRequiredCapabilities &&\n !isRequiredMeta &&\n !isRequiredSources &&\n !isExtensionNamespace &&\n !isModelRelations &&\n !isTableUniques &&\n !isTableIndexes &&\n !isTableForeignKeys\n ) {\n continue;\n }\n }\n\n result[key] = omitDefaults(value, currentPath);\n }\n\n return result;\n}\n\nfunction sortObjectKeys(obj: unknown): unknown {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => sortObjectKeys(item));\n }\n\n const sorted: Record<string, unknown> = {};\n const keys = Object.keys(obj).sort();\n for (const key of keys) {\n sorted[key] = sortObjectKeys((obj as Record<string, unknown>)[key]);\n }\n\n return sorted;\n}\n\ntype StorageObject = {\n tables?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\ntype TableObject = {\n indexes?: unknown[];\n uniques?: unknown[];\n [key: string]: unknown;\n};\n\nfunction sortIndexesAndUniques(storage: unknown): unknown {\n if (!storage || typeof storage !== 'object') {\n return storage;\n }\n\n const storageObj = storage as StorageObject;\n if (!storageObj.tables || typeof storageObj.tables !== 'object') {\n return storage;\n }\n\n const tables = storageObj.tables;\n const result: StorageObject = { ...storageObj };\n\n result.tables = {};\n // Sort table names to ensure deterministic ordering\n const sortedTableNames = Object.keys(tables).sort();\n for (const tableName of sortedTableNames) {\n const table = tables[tableName];\n if (!table || typeof table !== 'object') {\n result.tables[tableName] = table;\n continue;\n }\n\n const tableObj = table as TableObject;\n const sortedTable: TableObject = { ...tableObj };\n\n if (Array.isArray(tableObj.indexes)) {\n sortedTable.indexes = [...tableObj.indexes].sort((a, b) => {\n const nameA = (a as { name?: string })?.name || '';\n const nameB = (b as { name?: string })?.name || '';\n return nameA.localeCompare(nameB);\n });\n }\n\n if (Array.isArray(tableObj.uniques)) {\n sortedTable.uniques = [...tableObj.uniques].sort((a, b) => {\n const nameA = (a as { name?: string })?.name || '';\n const nameB = (b as { name?: string })?.name || '';\n return nameA.localeCompare(nameB);\n });\n }\n\n result.tables[tableName] = sortedTable;\n }\n\n return result;\n}\n\nfunction orderTopLevel(obj: Record<string, unknown>): Record<string, unknown> {\n const ordered: Record<string, unknown> = {};\n const remaining = new Set(Object.keys(obj));\n\n for (const key of TOP_LEVEL_ORDER) {\n if (remaining.has(key)) {\n ordered[key] = obj[key];\n remaining.delete(key);\n }\n }\n\n for (const key of Array.from(remaining).sort()) {\n ordered[key] = obj[key];\n }\n\n return ordered;\n}\n\nexport function canonicalizeContract(\n ir: ContractIR & { coreHash?: string; profileHash?: string },\n): string {\n const normalized: NormalizedContract = {\n schemaVersion: ir.schemaVersion,\n targetFamily: ir.targetFamily,\n target: ir.target,\n models: ir.models,\n relations: ir.relations,\n storage: ir.storage,\n extensions: ir.extensions,\n capabilities: ir.capabilities,\n meta: ir.meta,\n sources: ir.sources,\n };\n\n if (ir.coreHash !== undefined) {\n normalized.coreHash = ir.coreHash;\n }\n\n if (ir.profileHash !== undefined) {\n normalized.profileHash = ir.profileHash;\n }\n\n const withDefaultsOmitted = omitDefaults(normalized, []) as NormalizedContract;\n const withSortedIndexes = sortIndexesAndUniques(withDefaultsOmitted.storage);\n const withSortedStorage = { ...withDefaultsOmitted, storage: withSortedIndexes };\n const withSortedKeys = sortObjectKeys(withSortedStorage) as Record<string, unknown>;\n const withOrderedTopLevel = orderTopLevel(withSortedKeys);\n\n return JSON.stringify(withOrderedTopLevel, null, 2);\n}\n","import type { ContractIR } from '@prisma-next/contract/ir';\nimport type { TargetFamilyHook, ValidationContext } from '@prisma-next/contract/types';\nimport { format } from 'prettier';\nimport { canonicalizeContract } from './canonicalization';\nimport { computeCoreHash, computeProfileHash } from './hashing';\nimport type { EmitOptions, EmitResult } from './types';\n\nfunction validateCoreStructure(ir: ContractIR): void {\n if (!ir.targetFamily) {\n throw new Error('ContractIR must have targetFamily');\n }\n if (!ir.target) {\n throw new Error('ContractIR must have target');\n }\n if (!ir.schemaVersion) {\n throw new Error('ContractIR must have schemaVersion');\n }\n if (!ir.models || typeof ir.models !== 'object') {\n throw new Error('ContractIR must have models');\n }\n if (!ir.storage || typeof ir.storage !== 'object') {\n throw new Error('ContractIR must have storage');\n }\n if (!ir.relations || typeof ir.relations !== 'object') {\n throw new Error('ContractIR must have relations');\n }\n if (!ir.extensions || typeof ir.extensions !== 'object') {\n throw new Error('ContractIR must have extensions');\n }\n if (!ir.capabilities || typeof ir.capabilities !== 'object') {\n throw new Error('ContractIR must have capabilities');\n }\n if (!ir.meta || typeof ir.meta !== 'object') {\n throw new Error('ContractIR must have meta');\n }\n if (!ir.sources || typeof ir.sources !== 'object') {\n throw new Error('ContractIR must have sources');\n }\n}\n\nexport async function emit(\n ir: ContractIR,\n options: EmitOptions,\n targetFamily: TargetFamilyHook,\n): Promise<EmitResult> {\n const { operationRegistry, codecTypeImports, operationTypeImports, extensionIds } = options;\n\n validateCoreStructure(ir);\n\n const ctx: ValidationContext = {\n ...(operationRegistry ? { operationRegistry } : {}),\n ...(codecTypeImports ? { codecTypeImports } : {}),\n ...(operationTypeImports ? { operationTypeImports } : {}),\n ...(extensionIds ? { extensionIds } : {}),\n };\n targetFamily.validateTypes(ir, ctx);\n\n targetFamily.validateStructure(ir);\n\n const contractJson = {\n schemaVersion: ir.schemaVersion,\n targetFamily: ir.targetFamily,\n target: ir.target,\n models: ir.models,\n relations: ir.relations,\n storage: ir.storage,\n extensions: ir.extensions,\n capabilities: ir.capabilities,\n meta: ir.meta,\n sources: ir.sources,\n } as const;\n\n const coreHash = computeCoreHash(contractJson);\n const profileHash = computeProfileHash(contractJson);\n\n const contractWithHashes: ContractIR & { coreHash?: string; profileHash?: string } = {\n ...ir,\n schemaVersion: contractJson.schemaVersion,\n coreHash,\n profileHash,\n };\n\n // Add _generated metadata to indicate this is a generated artifact\n // This ensures consistency between CLI emit and programmatic emit\n // Always add/update _generated with standard content for consistency\n const contractJsonObj = JSON.parse(canonicalizeContract(contractWithHashes)) as Record<\n string,\n unknown\n >;\n const contractJsonWithMeta = {\n ...contractJsonObj,\n _generated: {\n warning: '⚠️ GENERATED FILE - DO NOT EDIT',\n message: 'This file is automatically generated by \"prisma-next emit\".',\n regenerate: 'To regenerate, run: prisma-next emit',\n },\n };\n const contractJsonString = JSON.stringify(contractJsonWithMeta, null, 2);\n\n const contractDtsRaw = targetFamily.generateContractTypes(\n ir,\n codecTypeImports ?? [],\n operationTypeImports ?? [],\n );\n const contractDts = await format(contractDtsRaw, {\n parser: 'typescript',\n singleQuote: true,\n semi: true,\n printWidth: 100,\n });\n\n return {\n contractJson: contractJsonString,\n contractDts,\n coreHash,\n profileHash,\n };\n}\n","import { createHash } from 'node:crypto';\nimport type { ContractIR } from '@prisma-next/contract/ir';\nimport { canonicalizeContract } from './canonicalization';\n\ntype ContractInput = {\n schemaVersion: string;\n targetFamily: string;\n target: string;\n models: Record<string, unknown>;\n relations: Record<string, unknown>;\n storage: Record<string, unknown>;\n extensions: Record<string, unknown>;\n sources: Record<string, unknown>;\n capabilities: Record<string, Record<string, boolean>>;\n meta: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nfunction computeHash(content: string): string {\n const hash = createHash('sha256');\n hash.update(content);\n return `sha256:${hash.digest('hex')}`;\n}\n\nexport function computeCoreHash(contract: ContractInput): string {\n const coreContract: ContractIR = {\n schemaVersion: contract.schemaVersion,\n targetFamily: contract.targetFamily,\n target: contract.target,\n models: contract.models,\n relations: contract.relations,\n storage: contract.storage,\n extensions: contract.extensions,\n sources: contract.sources,\n capabilities: contract.capabilities,\n meta: contract.meta,\n };\n const canonical = canonicalizeContract(coreContract);\n return computeHash(canonical);\n}\n\nexport function computeProfileHash(contract: ContractInput): string {\n const profileContract: ContractIR = {\n schemaVersion: contract.schemaVersion,\n targetFamily: contract.targetFamily,\n target: contract.target,\n models: {},\n relations: {},\n storage: {},\n extensions: {},\n capabilities: contract.capabilities,\n meta: {},\n sources: {},\n };\n const canonical = canonicalizeContract(profileContract);\n return computeHash(canonical);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/emission/canonicalization.ts","../../src/emission/emit.ts","../../src/emission/hashing.ts"],"sourcesContent":["import type { ContractIR } from '@prisma-next/contract/ir';\n\ntype NormalizedContract = {\n schemaVersion: string;\n targetFamily: string;\n target: string;\n coreHash?: string;\n profileHash?: string;\n models: Record<string, unknown>;\n relations: Record<string, unknown>;\n storage: Record<string, unknown>;\n extensionPacks: Record<string, unknown>;\n capabilities: Record<string, Record<string, boolean>>;\n meta: Record<string, unknown>;\n sources: Record<string, unknown>;\n};\n\nconst TOP_LEVEL_ORDER = [\n 'schemaVersion',\n 'canonicalVersion',\n 'targetFamily',\n 'target',\n 'coreHash',\n 'profileHash',\n 'models',\n 'storage',\n 'capabilities',\n 'extensionPacks',\n 'meta',\n 'sources',\n] as const;\n\nfunction isDefaultValue(value: unknown): boolean {\n if (value === false) return true;\n if (value === null) return false;\n if (Array.isArray(value) && value.length === 0) return true;\n if (typeof value === 'object' && value !== null) {\n const keys = Object.keys(value);\n return keys.length === 0;\n }\n return false;\n}\n\nfunction omitDefaults(obj: unknown, path: readonly string[]): unknown {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => omitDefaults(item, path));\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const currentPath = [...path, key];\n\n // Exclude metadata fields from canonicalization\n if (key === '_generated') {\n continue;\n }\n\n if (key === 'nullable' && value === false) {\n continue;\n }\n\n if (key === 'generated' && value === false) {\n continue;\n }\n\n if (isDefaultValue(value)) {\n const isRequiredModels = currentPath.length === 1 && currentPath[0] === 'models';\n const isRequiredTables =\n currentPath.length === 2 && currentPath[0] === 'storage' && currentPath[1] === 'tables';\n const isRequiredRelations = currentPath.length === 1 && currentPath[0] === 'relations';\n const isRequiredExtensions = currentPath.length === 1 && currentPath[0] === 'extensionPacks';\n const isRequiredCapabilities = currentPath.length === 1 && currentPath[0] === 'capabilities';\n const isRequiredMeta = currentPath.length === 1 && currentPath[0] === 'meta';\n const isRequiredSources = currentPath.length === 1 && currentPath[0] === 'sources';\n const isExtensionNamespace = currentPath.length === 2 && currentPath[0] === 'extensionPacks';\n const isModelRelations =\n currentPath.length === 3 && currentPath[0] === 'models' && currentPath[2] === 'relations';\n const isTableUniques =\n currentPath.length === 4 &&\n currentPath[0] === 'storage' &&\n currentPath[1] === 'tables' &&\n currentPath[3] === 'uniques';\n const isTableIndexes =\n currentPath.length === 4 &&\n currentPath[0] === 'storage' &&\n currentPath[1] === 'tables' &&\n currentPath[3] === 'indexes';\n const isTableForeignKeys =\n currentPath.length === 4 &&\n currentPath[0] === 'storage' &&\n currentPath[1] === 'tables' &&\n currentPath[3] === 'foreignKeys';\n\n if (\n !isRequiredModels &&\n !isRequiredTables &&\n !isRequiredRelations &&\n !isRequiredExtensions &&\n !isRequiredCapabilities &&\n !isRequiredMeta &&\n !isRequiredSources &&\n !isExtensionNamespace &&\n !isModelRelations &&\n !isTableUniques &&\n !isTableIndexes &&\n !isTableForeignKeys\n ) {\n continue;\n }\n }\n\n result[key] = omitDefaults(value, currentPath);\n }\n\n return result;\n}\n\nfunction sortObjectKeys(obj: unknown): unknown {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => sortObjectKeys(item));\n }\n\n const sorted: Record<string, unknown> = {};\n const keys = Object.keys(obj).sort();\n for (const key of keys) {\n sorted[key] = sortObjectKeys((obj as Record<string, unknown>)[key]);\n }\n\n return sorted;\n}\n\ntype StorageObject = {\n tables?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\ntype TableObject = {\n indexes?: unknown[];\n uniques?: unknown[];\n [key: string]: unknown;\n};\n\nfunction sortIndexesAndUniques(storage: unknown): unknown {\n if (!storage || typeof storage !== 'object') {\n return storage;\n }\n\n const storageObj = storage as StorageObject;\n if (!storageObj.tables || typeof storageObj.tables !== 'object') {\n return storage;\n }\n\n const tables = storageObj.tables;\n const result: StorageObject = { ...storageObj };\n\n result.tables = {};\n // Sort table names to ensure deterministic ordering\n const sortedTableNames = Object.keys(tables).sort();\n for (const tableName of sortedTableNames) {\n const table = tables[tableName];\n if (!table || typeof table !== 'object') {\n result.tables[tableName] = table;\n continue;\n }\n\n const tableObj = table as TableObject;\n const sortedTable: TableObject = { ...tableObj };\n\n if (Array.isArray(tableObj.indexes)) {\n sortedTable.indexes = [...tableObj.indexes].sort((a, b) => {\n const nameA = (a as { name?: string })?.name || '';\n const nameB = (b as { name?: string })?.name || '';\n return nameA.localeCompare(nameB);\n });\n }\n\n if (Array.isArray(tableObj.uniques)) {\n sortedTable.uniques = [...tableObj.uniques].sort((a, b) => {\n const nameA = (a as { name?: string })?.name || '';\n const nameB = (b as { name?: string })?.name || '';\n return nameA.localeCompare(nameB);\n });\n }\n\n result.tables[tableName] = sortedTable;\n }\n\n return result;\n}\n\nfunction orderTopLevel(obj: Record<string, unknown>): Record<string, unknown> {\n const ordered: Record<string, unknown> = {};\n const remaining = new Set(Object.keys(obj));\n\n for (const key of TOP_LEVEL_ORDER) {\n if (remaining.has(key)) {\n ordered[key] = obj[key];\n remaining.delete(key);\n }\n }\n\n for (const key of Array.from(remaining).sort()) {\n ordered[key] = obj[key];\n }\n\n return ordered;\n}\n\nexport function canonicalizeContract(\n ir: ContractIR & { coreHash?: string; profileHash?: string },\n): string {\n const normalized: NormalizedContract = {\n schemaVersion: ir.schemaVersion,\n targetFamily: ir.targetFamily,\n target: ir.target,\n models: ir.models,\n relations: ir.relations,\n storage: ir.storage,\n extensionPacks: ir.extensionPacks,\n capabilities: ir.capabilities,\n meta: ir.meta,\n sources: ir.sources,\n };\n\n if (ir.coreHash !== undefined) {\n normalized.coreHash = ir.coreHash;\n }\n\n if (ir.profileHash !== undefined) {\n normalized.profileHash = ir.profileHash;\n }\n\n const withDefaultsOmitted = omitDefaults(normalized, []) as NormalizedContract;\n const withSortedIndexes = sortIndexesAndUniques(withDefaultsOmitted.storage);\n const withSortedStorage = { ...withDefaultsOmitted, storage: withSortedIndexes };\n const withSortedKeys = sortObjectKeys(withSortedStorage) as Record<string, unknown>;\n const withOrderedTopLevel = orderTopLevel(withSortedKeys);\n\n return JSON.stringify(withOrderedTopLevel, null, 2);\n}\n","import type { ContractIR } from '@prisma-next/contract/ir';\nimport type { TargetFamilyHook, ValidationContext } from '@prisma-next/contract/types';\nimport { format } from 'prettier';\nimport { canonicalizeContract } from './canonicalization';\nimport { computeCoreHash, computeProfileHash } from './hashing';\nimport type { EmitOptions, EmitResult } from './types';\n\nfunction validateCoreStructure(ir: ContractIR): void {\n if (!ir.targetFamily) {\n throw new Error('ContractIR must have targetFamily');\n }\n if (!ir.target) {\n throw new Error('ContractIR must have target');\n }\n if (!ir.schemaVersion) {\n throw new Error('ContractIR must have schemaVersion');\n }\n if (!ir.models || typeof ir.models !== 'object') {\n throw new Error('ContractIR must have models');\n }\n if (!ir.storage || typeof ir.storage !== 'object') {\n throw new Error('ContractIR must have storage');\n }\n if (!ir.relations || typeof ir.relations !== 'object') {\n throw new Error('ContractIR must have relations');\n }\n if (!ir.extensionPacks || typeof ir.extensionPacks !== 'object') {\n throw new Error('ContractIR must have extensionPacks');\n }\n if (!ir.capabilities || typeof ir.capabilities !== 'object') {\n throw new Error('ContractIR must have capabilities');\n }\n if (!ir.meta || typeof ir.meta !== 'object') {\n throw new Error('ContractIR must have meta');\n }\n if (!ir.sources || typeof ir.sources !== 'object') {\n throw new Error('ContractIR must have sources');\n }\n}\n\nexport async function emit(\n ir: ContractIR,\n options: EmitOptions,\n targetFamily: TargetFamilyHook,\n): Promise<EmitResult> {\n const { operationRegistry, codecTypeImports, operationTypeImports, extensionIds } = options;\n\n validateCoreStructure(ir);\n\n const ctx: ValidationContext = {\n ...(operationRegistry ? { operationRegistry } : {}),\n ...(codecTypeImports ? { codecTypeImports } : {}),\n ...(operationTypeImports ? { operationTypeImports } : {}),\n ...(extensionIds ? { extensionIds } : {}),\n };\n targetFamily.validateTypes(ir, ctx);\n\n targetFamily.validateStructure(ir);\n\n const contractJson = {\n schemaVersion: ir.schemaVersion,\n targetFamily: ir.targetFamily,\n target: ir.target,\n models: ir.models,\n relations: ir.relations,\n storage: ir.storage,\n extensionPacks: ir.extensionPacks,\n capabilities: ir.capabilities,\n meta: ir.meta,\n sources: ir.sources,\n } as const;\n\n const coreHash = computeCoreHash(contractJson);\n const profileHash = computeProfileHash(contractJson);\n\n const contractWithHashes: ContractIR & { coreHash?: string; profileHash?: string } = {\n ...ir,\n schemaVersion: contractJson.schemaVersion,\n coreHash,\n profileHash,\n };\n\n // Add _generated metadata to indicate this is a generated artifact\n // This ensures consistency between CLI emit and programmatic emit\n // Always add/update _generated with standard content for consistency\n const contractJsonObj = JSON.parse(canonicalizeContract(contractWithHashes)) as Record<\n string,\n unknown\n >;\n const contractJsonWithMeta = {\n ...contractJsonObj,\n _generated: {\n warning: '⚠️ GENERATED FILE - DO NOT EDIT',\n message: 'This file is automatically generated by \"prisma-next emit\".',\n regenerate: 'To regenerate, run: prisma-next emit',\n },\n };\n const contractJsonString = JSON.stringify(contractJsonWithMeta, null, 2);\n\n const contractDtsRaw = targetFamily.generateContractTypes(\n ir,\n codecTypeImports ?? [],\n operationTypeImports ?? [],\n );\n const contractDts = await format(contractDtsRaw, {\n parser: 'typescript',\n singleQuote: true,\n semi: true,\n printWidth: 100,\n });\n\n return {\n contractJson: contractJsonString,\n contractDts,\n coreHash,\n profileHash,\n };\n}\n","import { createHash } from 'node:crypto';\nimport type { ContractIR } from '@prisma-next/contract/ir';\nimport { canonicalizeContract } from './canonicalization';\n\ntype ContractInput = {\n schemaVersion: string;\n targetFamily: string;\n target: string;\n models: Record<string, unknown>;\n relations: Record<string, unknown>;\n storage: Record<string, unknown>;\n extensionPacks: Record<string, unknown>;\n sources: Record<string, unknown>;\n capabilities: Record<string, Record<string, boolean>>;\n meta: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nfunction computeHash(content: string): string {\n const hash = createHash('sha256');\n hash.update(content);\n return `sha256:${hash.digest('hex')}`;\n}\n\nexport function computeCoreHash(contract: ContractInput): string {\n const coreContract: ContractIR = {\n schemaVersion: contract.schemaVersion,\n targetFamily: contract.targetFamily,\n target: contract.target,\n models: contract.models,\n relations: contract.relations,\n storage: contract.storage,\n extensionPacks: contract.extensionPacks,\n sources: contract.sources,\n capabilities: contract.capabilities,\n meta: contract.meta,\n };\n const canonical = canonicalizeContract(coreContract);\n return computeHash(canonical);\n}\n\nexport function computeProfileHash(contract: ContractInput): string {\n const profileContract: ContractIR = {\n schemaVersion: contract.schemaVersion,\n targetFamily: contract.targetFamily,\n target: contract.target,\n models: {},\n relations: {},\n storage: {},\n extensionPacks: {},\n capabilities: contract.capabilities,\n meta: {},\n sources: {},\n };\n const canonical = canonicalizeContract(profileContract);\n return computeHash(canonical);\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@prisma-next/core-control-plane",
3
- "version": "0.1.0-pr.64.6",
3
+ "version": "0.1.0-pr.65.2",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "Control plane domain actions, config types, validation, and error factories for Prisma Next",
7
7
  "dependencies": {
8
8
  "arktype": "^2.1.26",
9
9
  "prettier": "^3.3.3",
10
- "@prisma-next/contract": "0.1.0-pr.64.6",
11
- "@prisma-next/operations": "0.1.0-pr.64.6",
12
- "@prisma-next/utils": "0.1.0-pr.64.6"
10
+ "@prisma-next/contract": "0.1.0-pr.65.2",
11
+ "@prisma-next/operations": "0.1.0-pr.65.2",
12
+ "@prisma-next/utils": "0.1.0-pr.65.2"
13
13
  },
14
14
  "devDependencies": {
15
15
  "@vitest/coverage-v8": "^4.0.0",