@prisma-next/cli 0.4.0-dev.2 → 0.4.0-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +4 -11
- package/dist/cli.mjs.map +1 -1
- package/dist/{client-DiUkJAeN.mjs → client-tdnbk0OR.mjs} +9 -2
- package/dist/{client-DiUkJAeN.mjs.map → client-tdnbk0OR.mjs.map} +1 -1
- package/dist/commands/contract-emit.mjs +1 -6
- package/dist/commands/contract-infer.mjs +1 -7
- package/dist/commands/db-init.mjs +2 -3
- package/dist/commands/db-init.mjs.map +1 -1
- package/dist/commands/db-schema.mjs +1 -4
- package/dist/commands/db-schema.mjs.map +1 -1
- package/dist/commands/db-sign.mjs +1 -2
- package/dist/commands/db-sign.mjs.map +1 -1
- package/dist/commands/db-update.mjs +2 -3
- package/dist/commands/db-update.mjs.map +1 -1
- package/dist/commands/db-verify.mjs +1 -2
- package/dist/commands/db-verify.mjs.map +1 -1
- package/dist/commands/migration-apply.mjs +1 -2
- package/dist/commands/migration-apply.mjs.map +1 -1
- package/dist/commands/migration-status.mjs +1 -6
- package/dist/contract-emit-CGpb33vs.mjs +4 -0
- package/dist/{contract-emit-Zm_sd1wQ.mjs → contract-emit-CRoS1nx5.mjs} +9 -3
- package/dist/contract-emit-CRoS1nx5.mjs.map +1 -0
- package/dist/{contract-emit-D2wDXfyo.mjs → contract-emit-Ctn6mH9H.mjs} +2 -2
- package/dist/{contract-emit-D2wDXfyo.mjs.map → contract-emit-Ctn6mH9H.mjs.map} +1 -1
- package/dist/{contract-infer-DozZT511.mjs → contract-infer-Ba1SE57Q.mjs} +2 -2
- package/dist/{contract-infer-DozZT511.mjs.map → contract-infer-Ba1SE57Q.mjs.map} +1 -1
- package/dist/exports/control-api.mjs +2 -4
- package/dist/exports/index.mjs +1 -6
- package/dist/exports/index.mjs.map +1 -1
- package/dist/{init-6Pvm_esG.mjs → init-D9zf5HaG.mjs} +2 -2
- package/dist/{init-6Pvm_esG.mjs.map → init-D9zf5HaG.mjs.map} +1 -1
- package/dist/{inspect-live-schema-BYnhztxZ.mjs → inspect-live-schema-gYQiWfpl.mjs} +2 -2
- package/dist/{inspect-live-schema-BYnhztxZ.mjs.map → inspect-live-schema-gYQiWfpl.mjs.map} +1 -1
- package/dist/{migration-command-scaffold-CntCcntR.mjs → migration-command-scaffold-x4n_ZhAh.mjs} +2 -2
- package/dist/{migration-command-scaffold-CntCcntR.mjs.map → migration-command-scaffold-x4n_ZhAh.mjs.map} +1 -1
- package/dist/{migration-status-CJANY4yr.mjs → migration-status-DyVDf5NI.mjs} +2 -2
- package/dist/{migration-status-CJANY4yr.mjs.map → migration-status-DyVDf5NI.mjs.map} +1 -1
- package/package.json +16 -16
- package/src/control-api/client.ts +6 -1
- package/src/control-api/operations/contract-emit.ts +7 -2
- package/dist/contract-emit-Zm_sd1wQ.mjs.map +0 -1
- package/dist/contract-emit-kN-IkKTE.mjs +0 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/cli",
|
|
3
|
-
"version": "0.4.0-dev.
|
|
3
|
+
"version": "0.4.0-dev.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"files": [
|
|
@@ -24,28 +24,28 @@
|
|
|
24
24
|
"string-width": "^8.2.0",
|
|
25
25
|
"strip-ansi": "^7.1.2",
|
|
26
26
|
"wrap-ansi": "^10.0.0",
|
|
27
|
-
"@prisma-next/
|
|
28
|
-
"@prisma-next/
|
|
29
|
-
"@prisma-next/errors": "0.4.0-dev.
|
|
30
|
-
"@prisma-next/
|
|
31
|
-
"@prisma-next/
|
|
32
|
-
"@prisma-next/
|
|
33
|
-
"@prisma-next/
|
|
34
|
-
"@prisma-next/
|
|
27
|
+
"@prisma-next/config": "0.4.0-dev.3",
|
|
28
|
+
"@prisma-next/contract": "0.4.0-dev.3",
|
|
29
|
+
"@prisma-next/errors": "0.4.0-dev.3",
|
|
30
|
+
"@prisma-next/migration-tools": "0.4.0-dev.3",
|
|
31
|
+
"@prisma-next/emitter": "0.4.0-dev.3",
|
|
32
|
+
"@prisma-next/framework-components": "0.4.0-dev.3",
|
|
33
|
+
"@prisma-next/psl-printer": "0.4.0-dev.3",
|
|
34
|
+
"@prisma-next/utils": "0.4.0-dev.3"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "24.10.4",
|
|
38
38
|
"tsdown": "0.18.4",
|
|
39
39
|
"typescript": "5.9.3",
|
|
40
40
|
"vitest": "4.0.17",
|
|
41
|
-
"@prisma-next/sql-contract
|
|
42
|
-
"@prisma-next/sql-contract": "0.4.0-dev.
|
|
43
|
-
"@prisma-next/sql-
|
|
44
|
-
"@prisma-next/sql-
|
|
45
|
-
"@prisma-next/sql-
|
|
46
|
-
"@prisma-next/
|
|
41
|
+
"@prisma-next/sql-contract": "0.4.0-dev.3",
|
|
42
|
+
"@prisma-next/sql-contract-emitter": "0.4.0-dev.3",
|
|
43
|
+
"@prisma-next/sql-runtime": "0.4.0-dev.3",
|
|
44
|
+
"@prisma-next/sql-operations": "0.4.0-dev.3",
|
|
45
|
+
"@prisma-next/sql-contract-ts": "0.4.0-dev.3",
|
|
46
|
+
"@prisma-next/tsconfig": "0.0.0",
|
|
47
47
|
"@prisma-next/test-utils": "0.0.1",
|
|
48
|
-
"@prisma-next/
|
|
48
|
+
"@prisma-next/tsdown": "0.0.0"
|
|
49
49
|
},
|
|
50
50
|
"exports": {
|
|
51
51
|
".": {
|
|
@@ -489,8 +489,13 @@ class ControlClientImpl implements ControlClient {
|
|
|
489
489
|
});
|
|
490
490
|
|
|
491
491
|
try {
|
|
492
|
+
const stack = this.stack!;
|
|
492
493
|
const sourceContext = {
|
|
493
|
-
composedExtensionPacks:
|
|
494
|
+
composedExtensionPacks: stack.extensionPacks.map((p) => p.id),
|
|
495
|
+
scalarTypeDescriptors: stack.scalarTypeDescriptors,
|
|
496
|
+
authoringContributions: stack.authoringContributions,
|
|
497
|
+
codecLookup: stack.codecLookup,
|
|
498
|
+
controlMutationDefaults: stack.controlMutationDefaults,
|
|
494
499
|
};
|
|
495
500
|
const providerResult = await contractConfig.sourceProvider(sourceContext);
|
|
496
501
|
if (!providerResult.ok) {
|
|
@@ -94,8 +94,14 @@ export async function executeContractEmit(
|
|
|
94
94
|
// Colocate .d.ts with .json (contract.json → contract.d.ts)
|
|
95
95
|
const outputDtsPath = `${outputJsonPath.slice(0, -5)}.d.ts`;
|
|
96
96
|
|
|
97
|
+
const stack = createControlStack(config);
|
|
98
|
+
|
|
97
99
|
const sourceContext = {
|
|
98
|
-
composedExtensionPacks:
|
|
100
|
+
composedExtensionPacks: stack.extensionPacks.map((p) => p.id),
|
|
101
|
+
scalarTypeDescriptors: stack.scalarTypeDescriptors,
|
|
102
|
+
authoringContributions: stack.authoringContributions,
|
|
103
|
+
codecLookup: stack.codecLookup,
|
|
104
|
+
controlMutationDefaults: stack.controlMutationDefaults,
|
|
99
105
|
};
|
|
100
106
|
|
|
101
107
|
let providerResult: Awaited<ReturnType<typeof contractConfig.source>>;
|
|
@@ -143,7 +149,6 @@ export async function executeContractEmit(
|
|
|
143
149
|
});
|
|
144
150
|
}
|
|
145
151
|
|
|
146
|
-
const stack = createControlStack(config);
|
|
147
152
|
const familyInstance = config.family.create(stack);
|
|
148
153
|
|
|
149
154
|
const rawComponents = [config.target, config.adapter, ...(config.extensionPacks ?? [])];
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contract-emit-Zm_sd1wQ.mjs","names":["providerResult: Awaited<ReturnType<typeof contractConfig.source>>"],"sources":["../src/control-api/operations/contract-emit.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport type { Contract } from '@prisma-next/contract/types';\nimport { emit } from '@prisma-next/emitter';\nimport { createControlStack } from '@prisma-next/framework-components/control';\nimport { abortable } from '@prisma-next/utils/abortable';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { dirname, isAbsolute, join, resolve } from 'pathe';\nimport { loadConfig } from '../../config-loader';\nimport { errorContractConfigMissing, errorRuntime } from '../../utils/cli-errors';\nimport { assertFrameworkComponentsCompatible } from '../../utils/framework-components';\nimport { enrichContract } from '../contract-enrichment';\nimport type { ContractEmitOptions, ContractEmitResult } from '../types';\n\ninterface ProviderFailureLike {\n readonly summary: string;\n readonly diagnostics: readonly unknown[];\n readonly meta?: unknown;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isAbortError(error: unknown): boolean {\n return isRecord(error) && typeof error['name'] === 'string' && error['name'] === 'AbortError';\n}\n\nfunction isProviderFailureLike(value: unknown): value is ProviderFailureLike {\n return (\n isRecord(value) && typeof value['summary'] === 'string' && Array.isArray(value['diagnostics'])\n );\n}\n\n/**\n * Executes the contract emit operation.\n *\n * This is an offline operation that:\n * 1. Loads the Prisma Next config from the specified path\n * 2. Resolves the contract source from config\n * 3. Creates a control plane stack and family instance\n * 4. Emits contract artifacts (JSON and DTS)\n * 5. Writes files to the paths specified in config\n *\n * Supports AbortSignal for cancellation, enabling \"last change wins\" behavior.\n *\n * @param options - Options including configPath and optional signal\n * @returns File paths and hashes of emitted artifacts\n * @throws If config loading fails, contract is invalid, or file I/O fails\n * @throws signal.reason if cancelled via AbortSignal (typically DOMException with name 'AbortError')\n */\nexport async function executeContractEmit(\n options: ContractEmitOptions,\n): Promise<ContractEmitResult> {\n const { configPath, signal = new AbortController().signal } = options;\n const unlessAborted = abortable(signal);\n\n // Load config using the existing config loader\n const config = await unlessAborted(loadConfig(configPath));\n\n // Validate contract config is present\n if (!config.contract) {\n throw errorContractConfigMissing({\n why: 'Config.contract is required for emit. Define it in your config: contract: { source: ..., output: ... }',\n });\n }\n\n const contractConfig = config.contract;\n\n // Validate output path is present and ends with .json\n if (!contractConfig.output) {\n throw errorContractConfigMissing({\n why: 'Contract config must have output path. This should not happen if defineConfig() was used.',\n });\n }\n if (!contractConfig.output.endsWith('.json')) {\n throw errorContractConfigMissing({\n why: 'Contract config output path must end with .json (e.g., \"src/prisma/contract.json\")',\n });\n }\n\n // Validate source exists and is callable\n if (typeof contractConfig.source !== 'function') {\n throw errorContractConfigMissing({\n why: 'Contract config must include a valid source provider function',\n });\n }\n\n // Normalize configPath and resolve artifact paths relative to config file directory\n const normalizedConfigPath = resolve(configPath);\n const configDir = dirname(normalizedConfigPath);\n const outputJsonPath = isAbsolute(contractConfig.output)\n ? contractConfig.output\n : join(configDir, contractConfig.output);\n // Colocate .d.ts with .json (contract.json → contract.d.ts)\n const outputDtsPath = `${outputJsonPath.slice(0, -5)}.d.ts`;\n\n const sourceContext = {\n composedExtensionPacks: (config.extensionPacks ?? []).map((p) => p.id),\n };\n\n let providerResult: Awaited<ReturnType<typeof contractConfig.source>>;\n try {\n providerResult = await unlessAborted(contractConfig.source(sourceContext));\n } catch (error) {\n if (signal.aborted || isAbortError(error)) {\n throw error;\n }\n throw errorRuntime('Failed to resolve contract source', {\n why: error instanceof Error ? error.message : String(error),\n fix: 'Ensure contract.source resolves to ok(Contract) or returns structured diagnostics.',\n });\n }\n\n if (!isRecord(providerResult) || typeof providerResult.ok !== 'boolean') {\n throw errorRuntime('Failed to resolve contract source', {\n why: 'Contract source provider returned malformed result shape.',\n fix: 'Ensure contract.source resolves to ok(Contract) or notOk({ summary, diagnostics }).',\n });\n }\n\n if (providerResult.ok && !('value' in providerResult)) {\n throw errorRuntime('Failed to resolve contract source', {\n why: 'Contract source provider returned malformed success result: missing value.',\n fix: 'Ensure contract.source success payload is ok(Contract).',\n });\n }\n\n if (!providerResult.ok && !isProviderFailureLike(providerResult.failure)) {\n throw errorRuntime('Failed to resolve contract source', {\n why: 'Contract source provider returned malformed failure result: expected summary and diagnostics.',\n fix: 'Ensure contract.source failure payload is notOk({ summary, diagnostics, meta? }).',\n });\n }\n\n if (!providerResult.ok) {\n throw errorRuntime('Failed to resolve contract source', {\n why: providerResult.failure.summary,\n fix: 'Fix contract source diagnostics and return ok(Contract).',\n meta: {\n diagnostics: providerResult.failure.diagnostics,\n ...ifDefined('providerMeta', providerResult.failure.meta),\n },\n });\n }\n\n const stack = createControlStack(config);\n const familyInstance = config.family.create(stack);\n\n const rawComponents = [config.target, config.adapter, ...(config.extensionPacks ?? [])];\n const frameworkComponents = assertFrameworkComponentsCompatible(\n config.family.familyId,\n config.target.targetId,\n rawComponents,\n );\n const enrichedIR = enrichContract(providerResult.value as Contract, frameworkComponents);\n\n familyInstance.validateContract(enrichedIR);\n const emitResult = await unlessAborted(emit(enrichedIR, stack, config.family.emission));\n\n // Create directory if needed and write files (both colocated)\n await unlessAborted(mkdir(dirname(outputJsonPath), { recursive: true }));\n await unlessAborted(writeFile(outputJsonPath, emitResult.contractJson, 'utf-8'));\n await unlessAborted(writeFile(outputDtsPath, emitResult.contractDts, 'utf-8'));\n\n // Validate that contract.d.ts type imports are resolvable\n const { validateContractDeps } = await import('../../utils/validate-contract-deps');\n const depsValidation = validateContractDeps(emitResult.contractDts, dirname(outputDtsPath));\n if (depsValidation.warning) {\n process.stderr.write(`\\n⚠ ${depsValidation.warning}\\n`);\n }\n\n return {\n storageHash: emitResult.storageHash,\n ...ifDefined('executionHash', emitResult.executionHash),\n profileHash: emitResult.profileHash,\n files: {\n json: outputJsonPath,\n dts: outputDtsPath,\n },\n };\n}\n"],"mappings":"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"}
|