@prisma-next/sql-contract-ts 0.3.0-pr.73.2 → 0.3.0-pr.75.1

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.
@@ -0,0 +1,87 @@
1
+ import type { ExtensionPackRef, TargetPackRef } from '@prisma-next/contract/framework-components';
2
+ import type { ColumnBuilderState, ModelBuilderState, RelationDefinition, TableBuilderState } from '@prisma-next/contract-authoring';
3
+ import { type BuildModels, type BuildRelations, type BuildStorageColumn, ContractBuilder, type ExtractColumns, type ExtractPrimaryKey, ModelBuilder, TableBuilder } from '@prisma-next/contract-authoring';
4
+ import type { SqlContract, SqlMappings } from '@prisma-next/sql-contract/types';
5
+ /**
6
+ * Type-level mappings structure for contracts built via `defineContract()`.
7
+ *
8
+ * Compile-time type helper (not a runtime object) that ensures mappings match what the builder
9
+ * produces. `codecTypes` uses the generic `CodecTypes` parameter; `operationTypes` is always
10
+ * empty since operations are added via extensions at runtime.
11
+ *
12
+ * **Difference from RuntimeContext**: This is a compile-time type for contract construction.
13
+ * `RuntimeContext` is a runtime object with populated registries for query execution.
14
+ *
15
+ * @template C - The `CodecTypes` generic parameter passed to `defineContract<CodecTypes>()`
16
+ */
17
+ type ContractBuilderMappings<C extends Record<string, {
18
+ output: unknown;
19
+ }>> = Omit<SqlMappings, 'codecTypes' | 'operationTypes'> & {
20
+ readonly codecTypes: C;
21
+ readonly operationTypes: Record<string, never>;
22
+ };
23
+ type BuildStorageTable<_TableName extends string, Columns extends Record<string, ColumnBuilderState<string, boolean, string>>, PK extends readonly string[] | undefined> = {
24
+ readonly columns: {
25
+ readonly [K in keyof Columns]: Columns[K] extends ColumnBuilderState<string, infer Null, infer TType> ? BuildStorageColumn<Null & boolean, TType> : never;
26
+ };
27
+ readonly uniques: ReadonlyArray<never>;
28
+ readonly indexes: ReadonlyArray<never>;
29
+ readonly foreignKeys: ReadonlyArray<never>;
30
+ } & (PK extends readonly string[] ? {
31
+ readonly primaryKey: {
32
+ readonly columns: PK;
33
+ };
34
+ } : Record<string, never>);
35
+ type BuildStorage<Tables extends Record<string, TableBuilderState<string, Record<string, ColumnBuilderState<string, boolean, string>>, readonly string[] | undefined>>> = {
36
+ readonly tables: {
37
+ readonly [K in keyof Tables]: BuildStorageTable<K & string, ExtractColumns<Tables[K]>, ExtractPrimaryKey<Tables[K]>>;
38
+ };
39
+ };
40
+ export interface ColumnBuilder<Name extends string, Nullable extends boolean, Type extends string> {
41
+ nullable<Value extends boolean>(value?: Value): ColumnBuilder<Name, Value, Type>;
42
+ type<Id extends string>(id: Id): ColumnBuilder<Name, Nullable, Id>;
43
+ build(): ColumnBuilderState<Name, Nullable, Type>;
44
+ }
45
+ declare class SqlContractBuilder<CodecTypes extends Record<string, {
46
+ output: unknown;
47
+ }> = Record<string, never>, Target extends string | undefined = undefined, Tables extends Record<string, TableBuilderState<string, Record<string, ColumnBuilderState<string, boolean, string>>, readonly string[] | undefined>> = Record<never, never>, Models extends Record<string, ModelBuilderState<string, string, Record<string, string>, Record<string, RelationDefinition>>> = Record<never, never>, CoreHash extends string | undefined = undefined, ExtensionPacks extends Record<string, unknown> | undefined = undefined, Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined> extends ContractBuilder<Target, Tables, Models, CoreHash, ExtensionPacks, Capabilities> {
48
+ /**
49
+ * This method is responsible for normalizing the contract IR by setting default values
50
+ * for all required fields:
51
+ * - `nullable`: defaults to `false` if not provided
52
+ * - `uniques`: defaults to `[]` (empty array)
53
+ * - `indexes`: defaults to `[]` (empty array)
54
+ * - `foreignKeys`: defaults to `[]` (empty array)
55
+ * - `relations`: defaults to `{}` (empty object) for both model-level and contract-level
56
+ * - `nativeType`: required field set from column type descriptor when columns are defined
57
+ *
58
+ * The contract builder is the **only** place where normalization should occur.
59
+ * Validators, parsers, and emitters should assume the contract is already normalized.
60
+ *
61
+ * **Required**: Use column type descriptors (e.g., `int4Column`, `textColumn`) when defining columns.
62
+ * This ensures `nativeType` is set correctly at build time.
63
+ *
64
+ * @returns A normalized SqlContract with all required fields present
65
+ */
66
+ build(): Target extends string ? SqlContract<BuildStorage<Tables>, BuildModels<Models>, BuildRelations<Models>, ContractBuilderMappings<CodecTypes>> & {
67
+ readonly schemaVersion: '1';
68
+ readonly target: Target;
69
+ readonly targetFamily: 'sql';
70
+ readonly coreHash: CoreHash extends string ? CoreHash : string;
71
+ } & (ExtensionPacks extends Record<string, unknown> ? {
72
+ readonly extensionPacks: ExtensionPacks;
73
+ } : Record<string, never>) & (Capabilities extends Record<string, Record<string, boolean>> ? {
74
+ readonly capabilities: Capabilities;
75
+ } : Record<string, never>) : never;
76
+ target<T extends string>(packRef: TargetPackRef<'sql', T>): SqlContractBuilder<CodecTypes, T, Tables, Models, CoreHash, ExtensionPacks, Capabilities>;
77
+ extensionPacks(packs: Record<string, ExtensionPackRef<'sql', string>>): SqlContractBuilder<CodecTypes, Target, Tables, Models, CoreHash, ExtensionPacks, Capabilities>;
78
+ capabilities<C extends Record<string, Record<string, boolean>>>(capabilities: C): SqlContractBuilder<CodecTypes, Target, Tables, Models, CoreHash, ExtensionPacks, C>;
79
+ coreHash<H extends string>(hash: H): SqlContractBuilder<CodecTypes, Target, Tables, Models, H, ExtensionPacks, Capabilities>;
80
+ table<TableName extends string, T extends TableBuilder<TableName, Record<string, ColumnBuilderState<string, boolean, string>>, readonly string[] | undefined>>(name: TableName, callback: (t: TableBuilder<TableName>) => T | undefined): SqlContractBuilder<CodecTypes, Target, Tables & Record<TableName, ReturnType<T['build']>>, Models, CoreHash, ExtensionPacks, Capabilities>;
81
+ model<ModelName extends string, TableName extends string, M extends ModelBuilder<ModelName, TableName, Record<string, string>, Record<string, RelationDefinition>>>(name: ModelName, table: TableName, callback: (m: ModelBuilder<ModelName, TableName, Record<string, string>, Record<never, never>>) => M | undefined): SqlContractBuilder<CodecTypes, Target, Tables, Models & Record<ModelName, ReturnType<M['build']>>, CoreHash, ExtensionPacks, Capabilities>;
82
+ }
83
+ export declare function defineContract<CodecTypes extends Record<string, {
84
+ output: unknown;
85
+ }> = Record<string, never>>(): SqlContractBuilder<CodecTypes>;
86
+ export {};
87
+ //# sourceMappingURL=contract-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-builder.d.ts","sourceRoot":"","sources":["../src/contract-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { ModelDefinition, SqlContract, SqlMappings, SqlStorage } from '@prisma-next/sql-contract/types';
2
+ /**
3
+ * Computes mapping dictionaries from models and storage structures.
4
+ * Assumes valid input - validation happens separately in validateContractLogic().
5
+ *
6
+ * @param models - Models object from contract
7
+ * @param storage - Storage object from contract
8
+ * @param existingMappings - Existing mappings from contract input (optional)
9
+ * @returns Computed mappings dictionary
10
+ */
11
+ export declare function computeMappings(models: Record<string, ModelDefinition>, _storage: SqlStorage, existingMappings?: Partial<SqlMappings>): SqlMappings;
12
+ export declare function normalizeContract(contract: unknown): SqlContract<SqlStorage>;
13
+ /**
14
+ * Validates that a JSON import conforms to the SqlContract structure
15
+ * and returns a fully typed SqlContract.
16
+ *
17
+ * This function is specifically for validating JSON imports (e.g., from contract.json).
18
+ * Contracts created via the builder API (defineContract) are already valid and should
19
+ * not be passed to this function - use them directly without validation.
20
+ *
21
+ * Performs both structural validation (using Arktype) and logical validation
22
+ * (ensuring all references are valid).
23
+ *
24
+ *
25
+ * The type parameter `TContract` must be a fully-typed contract type (e.g., from `contract.d.ts`),
26
+ * NOT a generic `SqlContract<SqlStorage>`.
27
+ *
28
+ * **Correct:**
29
+ * ```typescript
30
+ * import type { Contract } from './contract.d';
31
+ * const contract = validateContract<Contract>(contractJson);
32
+ * ```
33
+ *
34
+ * **Incorrect:**
35
+ * ```typescript
36
+ * import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';
37
+ * const contract = validateContract<SqlContract<SqlStorage>>(contractJson);
38
+ * // ❌ Types will be inferred as 'unknown' - this won't work!
39
+ * ```
40
+ *
41
+ * The type parameter provides the specific table structure, column types, and model definitions.
42
+ * This function validates the runtime structure matches the type, but does not infer types
43
+ * from JSON (as JSON imports lose literal type information).
44
+ *
45
+ * @param value - The contract value to validate (must be from a JSON import, not a builder)
46
+ * @returns A validated contract matching the TContract type
47
+ * @throws Error if the contract structure or logic is invalid
48
+ */
49
+ export declare function validateContract<TContract extends SqlContract<SqlStorage>>(value: unknown): TContract;
50
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,eAAe,EAIf,WAAW,EACX,WAAW,EACX,UAAU,EAIX,MAAM,iCAAiC,CAAC;AA2HzC;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACvC,QAAQ,EAAE,UAAU,EACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GACtC,WAAW,CAiCb;AAyMD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CA2E5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,WAAW,CAAC,UAAU,CAAC,EACxE,KAAK,EAAE,OAAO,GACb,SAAS,CAiCX"}
@@ -1,87 +1,3 @@
1
- import { TargetPackRef, ExtensionPackRef } from '@prisma-next/contract/framework-components';
2
- import { ColumnBuilderState, TableBuilderState, ModelBuilderState, RelationDefinition, ContractBuilder, BuildStorageColumn, ExtractColumns, ExtractPrimaryKey, BuildModels, BuildRelations, TableBuilder, ModelBuilder } from '@prisma-next/contract-authoring';
3
- import { SqlContract, SqlMappings } from '@prisma-next/sql-contract/types';
4
-
5
- /**
6
- * Type-level mappings structure for contracts built via `defineContract()`.
7
- *
8
- * Compile-time type helper (not a runtime object) that ensures mappings match what the builder
9
- * produces. `codecTypes` uses the generic `CodecTypes` parameter; `operationTypes` is always
10
- * empty since operations are added via extensions at runtime.
11
- *
12
- * **Difference from RuntimeContext**: This is a compile-time type for contract construction.
13
- * `RuntimeContext` is a runtime object with populated registries for query execution.
14
- *
15
- * @template C - The `CodecTypes` generic parameter passed to `defineContract<CodecTypes>()`
16
- */
17
- type ContractBuilderMappings<C extends Record<string, {
18
- output: unknown;
19
- }>> = Omit<SqlMappings, 'codecTypes' | 'operationTypes'> & {
20
- readonly codecTypes: C;
21
- readonly operationTypes: Record<string, never>;
22
- };
23
- type BuildStorageTable<_TableName extends string, Columns extends Record<string, ColumnBuilderState<string, boolean, string>>, PK extends readonly string[] | undefined> = {
24
- readonly columns: {
25
- readonly [K in keyof Columns]: Columns[K] extends ColumnBuilderState<string, infer Null, infer TType> ? BuildStorageColumn<Null & boolean, TType> : never;
26
- };
27
- readonly uniques: ReadonlyArray<never>;
28
- readonly indexes: ReadonlyArray<never>;
29
- readonly foreignKeys: ReadonlyArray<never>;
30
- } & (PK extends readonly string[] ? {
31
- readonly primaryKey: {
32
- readonly columns: PK;
33
- };
34
- } : Record<string, never>);
35
- type BuildStorage<Tables extends Record<string, TableBuilderState<string, Record<string, ColumnBuilderState<string, boolean, string>>, readonly string[] | undefined>>> = {
36
- readonly tables: {
37
- readonly [K in keyof Tables]: BuildStorageTable<K & string, ExtractColumns<Tables[K]>, ExtractPrimaryKey<Tables[K]>>;
38
- };
39
- };
40
- interface ColumnBuilder<Name extends string, Nullable extends boolean, Type extends string> {
41
- nullable<Value extends boolean>(value?: Value): ColumnBuilder<Name, Value, Type>;
42
- type<Id extends string>(id: Id): ColumnBuilder<Name, Nullable, Id>;
43
- build(): ColumnBuilderState<Name, Nullable, Type>;
44
- }
45
- declare class SqlContractBuilder<CodecTypes extends Record<string, {
46
- output: unknown;
47
- }> = Record<string, never>, Target extends string | undefined = undefined, Tables extends Record<string, TableBuilderState<string, Record<string, ColumnBuilderState<string, boolean, string>>, readonly string[] | undefined>> = Record<never, never>, Models extends Record<string, ModelBuilderState<string, string, Record<string, string>, Record<string, RelationDefinition>>> = Record<never, never>, CoreHash extends string | undefined = undefined, ExtensionPacks extends Record<string, unknown> | undefined = undefined, Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined> extends ContractBuilder<Target, Tables, Models, CoreHash, ExtensionPacks, Capabilities> {
48
- /**
49
- * This method is responsible for normalizing the contract IR by setting default values
50
- * for all required fields:
51
- * - `nullable`: defaults to `false` if not provided
52
- * - `uniques`: defaults to `[]` (empty array)
53
- * - `indexes`: defaults to `[]` (empty array)
54
- * - `foreignKeys`: defaults to `[]` (empty array)
55
- * - `relations`: defaults to `{}` (empty object) for both model-level and contract-level
56
- * - `nativeType`: required field set from column type descriptor when columns are defined
57
- *
58
- * The contract builder is the **only** place where normalization should occur.
59
- * Validators, parsers, and emitters should assume the contract is already normalized.
60
- *
61
- * **Required**: Use column type descriptors (e.g., `int4Column`, `textColumn`) when defining columns.
62
- * This ensures `nativeType` is set correctly at build time.
63
- *
64
- * @returns A normalized SqlContract with all required fields present
65
- */
66
- build(): Target extends string ? SqlContract<BuildStorage<Tables>, BuildModels<Models>, BuildRelations<Models>, ContractBuilderMappings<CodecTypes>> & {
67
- readonly schemaVersion: '1';
68
- readonly target: Target;
69
- readonly targetFamily: 'sql';
70
- readonly coreHash: CoreHash extends string ? CoreHash : string;
71
- } & (ExtensionPacks extends Record<string, unknown> ? {
72
- readonly extensionPacks: ExtensionPacks;
73
- } : Record<string, never>) & (Capabilities extends Record<string, Record<string, boolean>> ? {
74
- readonly capabilities: Capabilities;
75
- } : Record<string, never>) : never;
76
- target<T extends string>(packRef: TargetPackRef<'sql', T>): SqlContractBuilder<CodecTypes, T, Tables, Models, CoreHash, ExtensionPacks, Capabilities>;
77
- extensionPacks(packs: Record<string, ExtensionPackRef<'sql', string>>): SqlContractBuilder<CodecTypes, Target, Tables, Models, CoreHash, ExtensionPacks, Capabilities>;
78
- capabilities<C extends Record<string, Record<string, boolean>>>(capabilities: C): SqlContractBuilder<CodecTypes, Target, Tables, Models, CoreHash, ExtensionPacks, C>;
79
- coreHash<H extends string>(hash: H): SqlContractBuilder<CodecTypes, Target, Tables, Models, H, ExtensionPacks, Capabilities>;
80
- table<TableName extends string, T extends TableBuilder<TableName, Record<string, ColumnBuilderState<string, boolean, string>>, readonly string[] | undefined>>(name: TableName, callback: (t: TableBuilder<TableName>) => T | undefined): SqlContractBuilder<CodecTypes, Target, Tables & Record<TableName, ReturnType<T['build']>>, Models, CoreHash, ExtensionPacks, Capabilities>;
81
- model<ModelName extends string, TableName extends string, M extends ModelBuilder<ModelName, TableName, Record<string, string>, Record<string, RelationDefinition>>>(name: ModelName, table: TableName, callback: (m: ModelBuilder<ModelName, TableName, Record<string, string>, Record<never, never>>) => M | undefined): SqlContractBuilder<CodecTypes, Target, Tables, Models & Record<ModelName, ReturnType<M['build']>>, CoreHash, ExtensionPacks, Capabilities>;
82
- }
83
- declare function defineContract<CodecTypes extends Record<string, {
84
- output: unknown;
85
- }> = Record<string, never>>(): SqlContractBuilder<CodecTypes>;
86
-
87
- export { type ColumnBuilder, defineContract };
1
+ export type { ColumnBuilder } from '../contract-builder';
2
+ export { defineContract } from '../contract-builder';
3
+ //# sourceMappingURL=contract-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-builder.d.ts","sourceRoot":"","sources":["../../src/exports/contract-builder.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,51 +1,2 @@
1
- import { ModelDefinition, SqlStorage, SqlMappings, SqlContract } from '@prisma-next/sql-contract/types';
2
-
3
- /**
4
- * Computes mapping dictionaries from models and storage structures.
5
- * Assumes valid input - validation happens separately in validateContractLogic().
6
- *
7
- * @param models - Models object from contract
8
- * @param storage - Storage object from contract
9
- * @param existingMappings - Existing mappings from contract input (optional)
10
- * @returns Computed mappings dictionary
11
- */
12
- declare function computeMappings(models: Record<string, ModelDefinition>, _storage: SqlStorage, existingMappings?: Partial<SqlMappings>): SqlMappings;
13
- /**
14
- * Validates that a JSON import conforms to the SqlContract structure
15
- * and returns a fully typed SqlContract.
16
- *
17
- * This function is specifically for validating JSON imports (e.g., from contract.json).
18
- * Contracts created via the builder API (defineContract) are already valid and should
19
- * not be passed to this function - use them directly without validation.
20
- *
21
- * Performs both structural validation (using Arktype) and logical validation
22
- * (ensuring all references are valid).
23
- *
24
- *
25
- * The type parameter `TContract` must be a fully-typed contract type (e.g., from `contract.d.ts`),
26
- * NOT a generic `SqlContract<SqlStorage>`.
27
- *
28
- * **Correct:**
29
- * ```typescript
30
- * import type { Contract } from './contract.d';
31
- * const contract = validateContract<Contract>(contractJson);
32
- * ```
33
- *
34
- * **Incorrect:**
35
- * ```typescript
36
- * import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';
37
- * const contract = validateContract<SqlContract<SqlStorage>>(contractJson);
38
- * // ❌ Types will be inferred as 'unknown' - this won't work!
39
- * ```
40
- *
41
- * The type parameter provides the specific table structure, column types, and model definitions.
42
- * This function validates the runtime structure matches the type, but does not infer types
43
- * from JSON (as JSON imports lose literal type information).
44
- *
45
- * @param value - The contract value to validate (must be from a JSON import, not a builder)
46
- * @returns A validated contract matching the TContract type
47
- * @throws Error if the contract structure or logic is invalid
48
- */
49
- declare function validateContract<TContract extends SqlContract<SqlStorage>>(value: unknown): TContract;
50
-
51
- export { computeMappings, validateContract };
1
+ export { computeMappings, validateContract } from '../contract';
2
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/exports/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,27 +1,28 @@
1
1
  {
2
2
  "name": "@prisma-next/sql-contract-ts",
3
- "version": "0.3.0-pr.73.2",
3
+ "version": "0.3.0-pr.75.1",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "SQL-specific TypeScript contract authoring surface for Prisma Next",
7
7
  "dependencies": {
8
8
  "arktype": "^2.1.25",
9
9
  "ts-toolbelt": "^9.6.0",
10
- "@prisma-next/contract": "0.3.0-pr.73.2",
11
- "@prisma-next/contract-authoring": "0.3.0-pr.73.2",
12
- "@prisma-next/sql-contract": "0.3.0-pr.73.2"
10
+ "@prisma-next/contract-authoring": "0.3.0-pr.75.1",
11
+ "@prisma-next/contract": "0.3.0-pr.75.1",
12
+ "@prisma-next/sql-contract": "0.3.0-pr.75.1"
13
13
  },
14
14
  "devDependencies": {
15
- "@types/pg": "^8.11.10",
16
- "@vitest/coverage-v8": "^4.0.0",
17
- "pg": "^8.11.5",
18
- "tsup": "^8.3.0",
19
- "typescript": "^5.9.3",
20
- "vitest": "^4.0.16",
15
+ "@types/pg": "8.16.0",
16
+ "@vitest/coverage-v8": "4.0.16",
17
+ "pg": "8.16.3",
18
+ "tsup": "8.5.1",
19
+ "typescript": "5.9.3",
20
+ "vitest": "4.0.16",
21
21
  "@prisma-next/test-utils": "0.0.1"
22
22
  },
23
23
  "files": [
24
24
  "dist",
25
+ "src",
25
26
  "schemas"
26
27
  ],
27
28
  "exports": {
@@ -36,7 +37,7 @@
36
37
  "./schema-sql": "./schemas/data-contract-sql-v1.json"
37
38
  },
38
39
  "scripts": {
39
- "build": "tsup --config tsup.config.ts",
40
+ "build": "tsup --config tsup.config.ts && tsc --project tsconfig.build.json --declaration --declarationMap --emitDeclarationOnly",
40
41
  "test": "vitest run",
41
42
  "test:coverage": "vitest run --coverage",
42
43
  "typecheck": "tsc --project tsconfig.json --noEmit",