@prisma-next/sql-contract 0.14.0-dev.4 → 0.14.0-dev.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/contract-view.d.mts +61 -0
  2. package/dist/contract-view.d.mts.map +1 -0
  3. package/dist/contract-view.mjs +39 -0
  4. package/dist/contract-view.mjs.map +1 -0
  5. package/dist/entity-kinds-CHiydmat.mjs +131 -0
  6. package/dist/entity-kinds-CHiydmat.mjs.map +1 -0
  7. package/dist/entity-kinds.d.mts +1 -1
  8. package/dist/entity-kinds.mjs +1 -1
  9. package/dist/factories.d.mts +5 -3
  10. package/dist/factories.d.mts.map +1 -1
  11. package/dist/factories.mjs +5 -4
  12. package/dist/factories.mjs.map +1 -1
  13. package/dist/index-type-validation.d.mts +1 -1
  14. package/dist/resolve-storage-table.d.mts +2 -2
  15. package/dist/{sql-storage-Dga0jwP2.d.mts → sql-storage-Dc1Dy3Vb.d.mts} +60 -19
  16. package/dist/sql-storage-Dc1Dy3Vb.d.mts.map +1 -0
  17. package/dist/{entity-kinds-Cl36zL5j.mjs → storage-value-set-C4XInPlX.mjs} +21 -128
  18. package/dist/storage-value-set-C4XInPlX.mjs.map +1 -0
  19. package/dist/{storage-value-set-WnYsIFM8.d.mts → storage-value-set-DXL-7PYo.d.mts} +14 -2
  20. package/dist/storage-value-set-DXL-7PYo.d.mts.map +1 -0
  21. package/dist/{types-B1N8w0I2.d.mts → types-ChH7hULD.d.mts} +24 -54
  22. package/dist/types-ChH7hULD.d.mts.map +1 -0
  23. package/dist/types-KiOT4SAV.mjs +114 -0
  24. package/dist/types-KiOT4SAV.mjs.map +1 -0
  25. package/dist/types.d.mts +10 -4
  26. package/dist/types.d.mts.map +1 -0
  27. package/dist/types.mjs +3 -3
  28. package/dist/validators.d.mts +9 -6
  29. package/dist/validators.d.mts.map +1 -1
  30. package/dist/validators.mjs +109 -17
  31. package/dist/validators.mjs.map +1 -1
  32. package/package.json +8 -7
  33. package/src/column-type-resolution.ts +26 -0
  34. package/src/contract-view.ts +98 -0
  35. package/src/exports/contract-view.ts +11 -0
  36. package/src/exports/types.ts +17 -4
  37. package/src/factories.ts +12 -2
  38. package/src/ir/sql-storage.ts +80 -17
  39. package/src/ir/storage-column.ts +3 -0
  40. package/src/ir/storage-entry-schemas.ts +1 -0
  41. package/src/ir/storage-table.ts +21 -0
  42. package/src/ir/storage-value-set.ts +5 -0
  43. package/src/types.ts +51 -8
  44. package/src/validators.ts +215 -40
  45. package/dist/entity-kinds-Cl36zL5j.mjs.map +0 -1
  46. package/dist/sql-storage-Dga0jwP2.d.mts.map +0 -1
  47. package/dist/storage-value-set-WnYsIFM8.d.mts.map +0 -1
  48. package/dist/types-B-eiQXff.mjs +0 -191
  49. package/dist/types-B-eiQXff.mjs.map +0 -1
  50. package/dist/types-B1N8w0I2.d.mts.map +0 -1
  51. package/src/ir/build-sql-namespace.ts +0 -110
  52. 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
- }