@prisma-next/sql-contract 0.14.0-dev.4 → 0.14.0-dev.40
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/contract-view.d.mts +61 -0
- package/dist/contract-view.d.mts.map +1 -0
- package/dist/contract-view.mjs +39 -0
- package/dist/contract-view.mjs.map +1 -0
- package/dist/entity-kinds-CHiydmat.mjs +131 -0
- package/dist/entity-kinds-CHiydmat.mjs.map +1 -0
- package/dist/entity-kinds.d.mts +1 -1
- package/dist/entity-kinds.mjs +1 -1
- package/dist/factories.d.mts +5 -3
- package/dist/factories.d.mts.map +1 -1
- package/dist/factories.mjs +5 -4
- package/dist/factories.mjs.map +1 -1
- package/dist/index-type-validation.d.mts +1 -1
- package/dist/resolve-storage-table.d.mts +2 -2
- package/dist/{sql-storage-Dga0jwP2.d.mts → sql-storage-Dc1Dy3Vb.d.mts} +60 -19
- package/dist/sql-storage-Dc1Dy3Vb.d.mts.map +1 -0
- package/dist/{entity-kinds-Cl36zL5j.mjs → storage-value-set-C4XInPlX.mjs} +21 -128
- package/dist/storage-value-set-C4XInPlX.mjs.map +1 -0
- package/dist/{storage-value-set-WnYsIFM8.d.mts → storage-value-set-DXL-7PYo.d.mts} +14 -2
- package/dist/storage-value-set-DXL-7PYo.d.mts.map +1 -0
- package/dist/{types-B1N8w0I2.d.mts → types-ChH7hULD.d.mts} +24 -54
- package/dist/types-ChH7hULD.d.mts.map +1 -0
- package/dist/types-KiOT4SAV.mjs +114 -0
- package/dist/types-KiOT4SAV.mjs.map +1 -0
- package/dist/types.d.mts +10 -4
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +3 -3
- package/dist/validators.d.mts +9 -6
- package/dist/validators.d.mts.map +1 -1
- package/dist/validators.mjs +109 -17
- package/dist/validators.mjs.map +1 -1
- package/package.json +8 -7
- package/src/column-type-resolution.ts +26 -0
- package/src/contract-view.ts +98 -0
- package/src/exports/contract-view.ts +11 -0
- package/src/exports/types.ts +17 -4
- package/src/factories.ts +12 -2
- package/src/ir/sql-storage.ts +80 -17
- package/src/ir/storage-column.ts +3 -0
- package/src/ir/storage-entry-schemas.ts +1 -0
- package/src/ir/storage-table.ts +21 -0
- package/src/ir/storage-value-set.ts +5 -0
- package/src/types.ts +51 -8
- package/src/validators.ts +215 -40
- package/dist/entity-kinds-Cl36zL5j.mjs.map +0 -1
- package/dist/sql-storage-Dga0jwP2.d.mts.map +0 -1
- package/dist/storage-value-set-WnYsIFM8.d.mts.map +0 -1
- package/dist/types-B-eiQXff.mjs +0 -191
- package/dist/types-B-eiQXff.mjs.map +0 -1
- package/dist/types-B1N8w0I2.d.mts.map +0 -1
- package/src/ir/build-sql-namespace.ts +0 -110
- package/src/ir/sql-unbound-namespace.ts +0 -74
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-B1N8w0I2.d.mts","names":[],"sources":["../src/ir/build-sql-namespace.ts","../src/ir/sql-unbound-namespace.ts","../src/types.ts"],"mappings":"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"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
freezeNode,
|
|
3
|
-
hydrateNamespaceEntities,
|
|
4
|
-
type Namespace,
|
|
5
|
-
NamespaceBase,
|
|
6
|
-
UNBOUND_NAMESPACE_ID,
|
|
7
|
-
} from '@prisma-next/framework-components/ir';
|
|
8
|
-
import { blindCast } from '@prisma-next/utils/casts';
|
|
9
|
-
import { composeSqlEntityKinds } from '../entity-kinds';
|
|
10
|
-
import type { SqlNamespace, SqlNamespaceEntries, SqlNamespaceTablesInput } from './sql-storage';
|
|
11
|
-
import { SqlUnboundNamespace } from './sql-unbound-namespace';
|
|
12
|
-
import type { StorageTable } from './storage-table';
|
|
13
|
-
import type { StorageValueSet } from './storage-value-set';
|
|
14
|
-
|
|
15
|
-
const SQL_NAMESPACE_KIND = 'sql-namespace' as const;
|
|
16
|
-
|
|
17
|
-
function isMaterializedSqlNamespace(ns: Namespace | SqlNamespaceTablesInput): ns is SqlNamespace {
|
|
18
|
-
if (typeof ns !== 'object' || ns === null) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
const proto = Object.getPrototypeOf(ns);
|
|
22
|
-
if (proto === Object.prototype || proto === null) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
return (ns as Namespace).kind === SQL_NAMESPACE_KIND;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
class SqlBoundNamespace extends NamespaceBase {
|
|
29
|
-
declare readonly kind: string;
|
|
30
|
-
|
|
31
|
-
readonly id: string;
|
|
32
|
-
readonly entries: SqlNamespaceEntries;
|
|
33
|
-
|
|
34
|
-
static fromTablesInput(input: SqlNamespaceTablesInput): SqlNamespace {
|
|
35
|
-
const tableKind = input.entries['table'];
|
|
36
|
-
const tableCount = tableKind !== undefined ? Object.keys(tableKind).length : 0;
|
|
37
|
-
const valueSetKind = input.entries['valueSet'];
|
|
38
|
-
const hasValueSets = valueSetKind !== undefined && Object.keys(valueSetKind).length > 0;
|
|
39
|
-
const hasUnknownKinds = Object.keys(input.entries).some(
|
|
40
|
-
(kind) => kind !== 'table' && kind !== 'valueSet',
|
|
41
|
-
);
|
|
42
|
-
if (
|
|
43
|
-
input.id === UNBOUND_NAMESPACE_ID &&
|
|
44
|
-
tableCount === 0 &&
|
|
45
|
-
!hasValueSets &&
|
|
46
|
-
!hasUnknownKinds
|
|
47
|
-
) {
|
|
48
|
-
return SqlUnboundNamespace.instance;
|
|
49
|
-
}
|
|
50
|
-
return new SqlBoundNamespace(input);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
private constructor(input: SqlNamespaceTablesInput) {
|
|
54
|
-
super();
|
|
55
|
-
this.id = input.id;
|
|
56
|
-
|
|
57
|
-
const dispatched = hydrateNamespaceEntities(input.entries, composeSqlEntityKinds(), 'carry');
|
|
58
|
-
|
|
59
|
-
this.entries = Object.freeze(
|
|
60
|
-
blindCast<
|
|
61
|
-
SqlNamespaceEntries,
|
|
62
|
-
'composeSqlEntityKinds() supplies table→StorageTable and valueSet→StorageValueSet descriptors, so this open-dict result holds exactly the typed members SqlNamespaceEntries declares; the descriptor Map erases those per-kind Node types from the return.'
|
|
63
|
-
>(dispatched),
|
|
64
|
-
);
|
|
65
|
-
Object.defineProperty(this, 'kind', {
|
|
66
|
-
value: SQL_NAMESPACE_KIND,
|
|
67
|
-
writable: false,
|
|
68
|
-
enumerable: false,
|
|
69
|
-
configurable: true,
|
|
70
|
-
});
|
|
71
|
-
freezeNode(this);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
get table(): Readonly<Record<string, StorageTable>> {
|
|
75
|
-
return this.entries.table ?? Object.freeze({});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
get valueSet(): Readonly<Record<string, StorageValueSet>> | undefined {
|
|
79
|
-
return this.entries.valueSet;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
qualifyTable(tableName: string): string {
|
|
83
|
-
if (this.id === UNBOUND_NAMESPACE_ID) {
|
|
84
|
-
return `"${tableName}"`;
|
|
85
|
-
}
|
|
86
|
-
return `"${this.id}"."${tableName}"`;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export function buildSqlNamespace(input: SqlNamespaceTablesInput): SqlNamespace {
|
|
91
|
-
return SqlBoundNamespace.fromTablesInput(input);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export function buildSqlNamespaceMap(
|
|
95
|
-
namespaces: Readonly<Record<string, Namespace | SqlNamespaceTablesInput>>,
|
|
96
|
-
): Readonly<Record<string, SqlNamespace>> {
|
|
97
|
-
return Object.fromEntries(
|
|
98
|
-
Object.entries(namespaces).map(([nsKey, ns]) => [
|
|
99
|
-
nsKey,
|
|
100
|
-
isMaterializedSqlNamespace(ns)
|
|
101
|
-
? ns
|
|
102
|
-
: SqlBoundNamespace.fromTablesInput(
|
|
103
|
-
blindCast<
|
|
104
|
-
SqlNamespaceTablesInput,
|
|
105
|
-
'non-materialized SQL namespace map entry is a SqlNamespaceTablesInput'
|
|
106
|
-
>(ns),
|
|
107
|
-
),
|
|
108
|
-
]),
|
|
109
|
-
);
|
|
110
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
freezeNode,
|
|
3
|
-
NamespaceBase,
|
|
4
|
-
UNBOUND_NAMESPACE_ID,
|
|
5
|
-
} from '@prisma-next/framework-components/ir';
|
|
6
|
-
import { blindCast } from '@prisma-next/utils/casts';
|
|
7
|
-
import type { SqlNamespaceEntries } from './sql-storage';
|
|
8
|
-
import type { StorageTable } from './storage-table';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Family-layer placeholder for the SQL unbound-namespace singleton —
|
|
12
|
-
* the late-bound slot whose binding the target resolves at connection
|
|
13
|
-
* time rather than at authoring time.
|
|
14
|
-
*
|
|
15
|
-
* SQL contracts honour the framework `Storage.namespaces` invariant from
|
|
16
|
-
* the moment they appear in the IR. Today `SqlStorage` is family-shared
|
|
17
|
-
* (Postgres + SQLite consume the same class); a per-target namespace
|
|
18
|
-
* concretion (`PostgresSchema.unbound`, `SqliteUnboundDatabase.instance`)
|
|
19
|
-
* earns its existence when each target's namespace shape lands. Until
|
|
20
|
-
* then the family ships a single placeholder singleton so the JSON
|
|
21
|
-
* envelope and runtime walk are honest at every layer.
|
|
22
|
-
*
|
|
23
|
-
* The `kind` discriminator is installed as a non-enumerable own property
|
|
24
|
-
* so the JSON envelope reads `{ "id": "__unbound__", "entries": { … } }`
|
|
25
|
-
* — symmetric with the family-level non-enumerable `kind` on `SqlNode`
|
|
26
|
-
* and bounded to the minimum data the framework `Namespace` interface
|
|
27
|
-
* promises.
|
|
28
|
-
*
|
|
29
|
-
* **Freeze-trap warning.** The leaf constructor calls
|
|
30
|
-
* `freezeNode(this)` after installing `kind`. The leaf-class shape
|
|
31
|
-
* works today only because `NamespaceBase` does NOT freeze in its
|
|
32
|
-
* constructor — the `Object.defineProperty(this, 'kind', …)` call after
|
|
33
|
-
* `super()` succeeds because the instance is still mutable at that
|
|
34
|
-
* point. Subclasses that add instance fields will still hit the freeze
|
|
35
|
-
* trap once leaf-class `freezeNode(this)` runs; and if a future
|
|
36
|
-
* framework change lifts the freeze to `NamespaceBase`, even the
|
|
37
|
-
* `defineProperty` here would silently fail. To add subclass instance
|
|
38
|
-
* fields safely, lift `freezeNode` to a leaf-class `seal()` hook each
|
|
39
|
-
* leaf calls explicitly at the end of its own constructor.
|
|
40
|
-
*/
|
|
41
|
-
export class SqlUnboundNamespace extends NamespaceBase {
|
|
42
|
-
static readonly instance: SqlUnboundNamespace = new SqlUnboundNamespace();
|
|
43
|
-
|
|
44
|
-
readonly id = UNBOUND_NAMESPACE_ID;
|
|
45
|
-
readonly entries: SqlNamespaceEntries = Object.freeze({
|
|
46
|
-
table: blindCast<
|
|
47
|
-
Readonly<Record<string, StorageTable>>,
|
|
48
|
-
'empty frozen map is a valid Readonly<Record<string, StorageTable>>'
|
|
49
|
-
>(Object.freeze({})),
|
|
50
|
-
});
|
|
51
|
-
declare readonly kind: string;
|
|
52
|
-
|
|
53
|
-
private constructor() {
|
|
54
|
-
super();
|
|
55
|
-
Object.defineProperty(this, 'kind', {
|
|
56
|
-
value: 'sql-namespace',
|
|
57
|
-
writable: false,
|
|
58
|
-
enumerable: false,
|
|
59
|
-
configurable: true,
|
|
60
|
-
});
|
|
61
|
-
freezeNode(this);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
get table(): Readonly<Record<string, StorageTable>> {
|
|
65
|
-
return blindCast<
|
|
66
|
-
Readonly<Record<string, StorageTable>>,
|
|
67
|
-
'entries[table] holds only StorageTable by construction'
|
|
68
|
-
>(this.entries['table']);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
qualifyTable(tableName: string): string {
|
|
72
|
-
return `"${tableName}"`;
|
|
73
|
-
}
|
|
74
|
-
}
|