@prisma-next/sql-relational-core 0.3.0-dev.4 → 0.3.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 (138) hide show
  1. package/README.md +5 -2
  2. package/dist/errors-7_V3El9I.mjs +3 -0
  3. package/dist/errors-DVufq9PT.d.mts +2 -0
  4. package/dist/exports/ast.d.mts +189 -0
  5. package/dist/exports/ast.d.mts.map +1 -0
  6. package/dist/exports/ast.mjs +360 -0
  7. package/dist/exports/ast.mjs.map +1 -0
  8. package/dist/exports/errors.d.mts +2 -0
  9. package/dist/exports/errors.mjs +3 -0
  10. package/dist/exports/guards.d.mts +5 -0
  11. package/dist/exports/guards.mjs +3 -0
  12. package/dist/exports/operations-registry.d.mts +5 -0
  13. package/dist/exports/operations-registry.mjs +3 -0
  14. package/dist/exports/param.d.mts +5 -0
  15. package/dist/exports/param.mjs +3 -0
  16. package/dist/exports/plan.d.mts +2 -0
  17. package/dist/exports/plan.mjs +17 -0
  18. package/dist/exports/plan.mjs.map +1 -0
  19. package/dist/exports/query-lane-context.d.mts +2 -0
  20. package/dist/exports/query-lane-context.mjs +1 -0
  21. package/dist/exports/schema.d.mts +5 -0
  22. package/dist/exports/schema.mjs +4 -0
  23. package/dist/exports/types.d.mts +4 -0
  24. package/dist/exports/types.mjs +3 -0
  25. package/dist/exports/utils/guards.d.mts +5 -0
  26. package/dist/exports/utils/guards.mjs +4 -0
  27. package/dist/guards-0ycyntYX.mjs +132 -0
  28. package/dist/guards-0ycyntYX.mjs.map +1 -0
  29. package/dist/guards-l1R3q8pA.d.mts +87 -0
  30. package/dist/guards-l1R3q8pA.d.mts.map +1 -0
  31. package/dist/index.d.mts +12 -0
  32. package/dist/index.mjs +12 -0
  33. package/dist/{exports/operations-registry.d.ts → operations-registry-0GuSkOCC.d.mts} +7 -11
  34. package/dist/operations-registry-0GuSkOCC.d.mts.map +1 -0
  35. package/dist/operations-registry-DPZ5aElH.mjs +152 -0
  36. package/dist/operations-registry-DPZ5aElH.mjs.map +1 -0
  37. package/dist/param-ChBZwVcw.d.mts +8 -0
  38. package/dist/param-ChBZwVcw.d.mts.map +1 -0
  39. package/dist/param-DMU3OWfI.mjs +14 -0
  40. package/dist/param-DMU3OWfI.mjs.map +1 -0
  41. package/dist/plan-cjDF_yFX.d.mts +182 -0
  42. package/dist/plan-cjDF_yFX.d.mts.map +1 -0
  43. package/dist/query-lane-context-CgkPuKaR.d.mts +259 -0
  44. package/dist/query-lane-context-CgkPuKaR.d.mts.map +1 -0
  45. package/dist/schema-Bi5p4aAc.mjs +175 -0
  46. package/dist/schema-Bi5p4aAc.mjs.map +1 -0
  47. package/dist/schema-CEpzzWNY.d.mts +86 -0
  48. package/dist/schema-CEpzzWNY.d.mts.map +1 -0
  49. package/dist/types-Cdi4Whda.mjs +18 -0
  50. package/dist/types-Cdi4Whda.mjs.map +1 -0
  51. package/dist/types-DicmXfBm.d.mts +447 -0
  52. package/dist/types-DicmXfBm.d.mts.map +1 -0
  53. package/package.json +41 -57
  54. package/src/ast/adapter-types.ts +36 -0
  55. package/src/ast/codec-types.ts +444 -0
  56. package/src/ast/common.ts +36 -0
  57. package/src/ast/delete.ts +17 -0
  58. package/src/ast/driver-types.ts +42 -0
  59. package/src/ast/insert.ts +17 -0
  60. package/src/ast/join.ts +54 -0
  61. package/src/ast/order.ts +11 -0
  62. package/src/ast/predicate.ts +40 -0
  63. package/src/ast/select.ts +38 -0
  64. package/src/ast/sql-codecs.ts +67 -0
  65. package/src/ast/types.ts +187 -0
  66. package/src/ast/update.ts +19 -0
  67. package/src/ast/util.ts +9 -0
  68. package/src/exports/ast.ts +14 -0
  69. package/src/exports/errors.ts +1 -0
  70. package/src/exports/guards.ts +15 -0
  71. package/src/exports/operations-registry.ts +1 -0
  72. package/src/exports/param.ts +2 -0
  73. package/src/exports/plan.ts +1 -0
  74. package/src/exports/query-lane-context.ts +1 -0
  75. package/src/exports/schema.ts +6 -0
  76. package/src/exports/types.ts +1 -0
  77. package/src/exports/utils/guards.ts +1 -0
  78. package/src/index.ts +8 -0
  79. package/src/operations-registry.ts +276 -0
  80. package/src/param.ts +15 -0
  81. package/src/plan.ts +39 -0
  82. package/src/query-lane-context.ts +94 -0
  83. package/src/schema.ts +431 -0
  84. package/src/types.ts +799 -0
  85. package/src/utils/guards.ts +193 -0
  86. package/dist/chunk-2F7DSEOU.js +0 -8
  87. package/dist/chunk-2F7DSEOU.js.map +0 -1
  88. package/dist/chunk-36WJWNHT.js +0 -1
  89. package/dist/chunk-36WJWNHT.js.map +0 -1
  90. package/dist/chunk-5N34PNVZ.js +0 -62
  91. package/dist/chunk-5N34PNVZ.js.map +0 -1
  92. package/dist/chunk-7I3EMQID.js +0 -16
  93. package/dist/chunk-7I3EMQID.js.map +0 -1
  94. package/dist/chunk-CBTYMOX2.js +0 -152
  95. package/dist/chunk-CBTYMOX2.js.map +0 -1
  96. package/dist/chunk-G52ENULI.js +0 -1
  97. package/dist/chunk-G52ENULI.js.map +0 -1
  98. package/dist/chunk-KYSP7L5C.js +0 -16
  99. package/dist/chunk-KYSP7L5C.js.map +0 -1
  100. package/dist/chunk-M23L3JHG.js +0 -159
  101. package/dist/chunk-M23L3JHG.js.map +0 -1
  102. package/dist/chunk-MM74SVJ4.js +0 -13
  103. package/dist/chunk-MM74SVJ4.js.map +0 -1
  104. package/dist/chunk-U7AXAUJA.js +0 -1
  105. package/dist/chunk-U7AXAUJA.js.map +0 -1
  106. package/dist/chunk-WZBPVEZI.js +0 -320
  107. package/dist/chunk-WZBPVEZI.js.map +0 -1
  108. package/dist/exports/ast.d.ts +0 -119
  109. package/dist/exports/ast.js +0 -46
  110. package/dist/exports/ast.js.map +0 -1
  111. package/dist/exports/errors.js +0 -9
  112. package/dist/exports/errors.js.map +0 -1
  113. package/dist/exports/guards.d.ts +0 -63
  114. package/dist/exports/guards.js +0 -21
  115. package/dist/exports/guards.js.map +0 -1
  116. package/dist/exports/operations-registry.js +0 -9
  117. package/dist/exports/operations-registry.js.map +0 -1
  118. package/dist/exports/param.d.ts +0 -14
  119. package/dist/exports/param.js +0 -7
  120. package/dist/exports/param.js.map +0 -1
  121. package/dist/exports/plan.d.ts +0 -5
  122. package/dist/exports/plan.js +0 -7
  123. package/dist/exports/plan.js.map +0 -1
  124. package/dist/exports/query-lane-context.d.ts +0 -4
  125. package/dist/exports/query-lane-context.js +0 -2
  126. package/dist/exports/query-lane-context.js.map +0 -1
  127. package/dist/exports/schema.d.ts +0 -69
  128. package/dist/exports/schema.js +0 -14
  129. package/dist/exports/schema.js.map +0 -1
  130. package/dist/exports/types.d.ts +0 -335
  131. package/dist/exports/types.js +0 -10
  132. package/dist/exports/types.js.map +0 -1
  133. package/dist/index.d.ts +0 -13
  134. package/dist/index.js +0 -81
  135. package/dist/index.js.map +0 -1
  136. package/dist/plan-D0OG5qzy.d.ts +0 -142
  137. package/dist/query-lane-context-BhOMmb_K.d.ts +0 -158
  138. /package/{dist/exports/errors.d.ts → src/errors.ts} +0 -0
@@ -0,0 +1,193 @@
1
+ import type { StorageColumn } from '@prisma-next/sql-contract/types';
2
+ import type {
3
+ ColumnRef,
4
+ Expression,
5
+ ExpressionSource,
6
+ LiteralExpr,
7
+ OperationExpr,
8
+ ParamRef,
9
+ } from '../ast/types';
10
+ import type {
11
+ AnyColumnBuilder,
12
+ AnyExpressionSource,
13
+ ExpressionBuilder,
14
+ ParamPlaceholder,
15
+ ValueSource,
16
+ } from '../types';
17
+
18
+ /**
19
+ * Helper to extract columnMeta from a ColumnBuilder or ExpressionBuilder.
20
+ * Returns StorageColumn if present, undefined otherwise.
21
+ * Both ColumnBuilder and ExpressionBuilder have columnMeta property.
22
+ */
23
+ export function getColumnMeta(expr: AnyExpressionSource): StorageColumn | undefined {
24
+ // Both ColumnBuilder and ExpressionBuilder have columnMeta: StorageColumn
25
+ // TypeScript should narrow the type after the 'in' check
26
+ if ('columnMeta' in expr) {
27
+ return expr.columnMeta;
28
+ }
29
+ return undefined;
30
+ }
31
+
32
+ /**
33
+ * Type predicate to check if a value is a ParamPlaceholder.
34
+ */
35
+ export function isParamPlaceholder(value: unknown): value is ParamPlaceholder {
36
+ return (
37
+ typeof value === 'object' &&
38
+ value !== null &&
39
+ 'kind' in value &&
40
+ (value as { kind: unknown }).kind === 'param-placeholder' &&
41
+ 'name' in value &&
42
+ typeof (value as { name: unknown }).name === 'string'
43
+ );
44
+ }
45
+
46
+ /**
47
+ * Recursively extracts the base ColumnRef from an OperationExpr.
48
+ * If the expression is already a ColumnRef, it is returned directly.
49
+ */
50
+ export function extractBaseColumnRef(expr: ColumnRef | OperationExpr): ColumnRef {
51
+ if (expr.kind === 'col') {
52
+ return expr;
53
+ }
54
+ return extractBaseColumnRef(expr.self);
55
+ }
56
+
57
+ /**
58
+ * Recursively collects all ColumnRef nodes from an expression tree.
59
+ * Handles nested OperationExpr structures by traversing both self and args.
60
+ */
61
+ export function collectColumnRefs(
62
+ expr: ColumnRef | ParamRef | LiteralExpr | OperationExpr,
63
+ ): ColumnRef[] {
64
+ if (expr.kind === 'col') {
65
+ return [expr];
66
+ }
67
+ if (expr.kind === 'operation') {
68
+ const refs: ColumnRef[] = collectColumnRefs(expr.self);
69
+ for (const arg of expr.args) {
70
+ refs.push(...collectColumnRefs(arg));
71
+ }
72
+ return refs;
73
+ }
74
+ return [];
75
+ }
76
+
77
+ /**
78
+ * Type predicate to check if an expression is an OperationExpr.
79
+ */
80
+ export function isOperationExpr(
81
+ expr: AnyExpressionSource | OperationExpr | Expression,
82
+ ): expr is OperationExpr {
83
+ return typeof expr === 'object' && expr !== null && 'kind' in expr && expr.kind === 'operation';
84
+ }
85
+
86
+ /**
87
+ * Helper to extract table and column from a ColumnBuilder, ExpressionBuilder, or OperationExpr.
88
+ * For ExpressionBuilder or OperationExpr, recursively unwraps to find the base ColumnRef.
89
+ */
90
+ export function getColumnInfo(expr: AnyExpressionSource | OperationExpr): {
91
+ table: string;
92
+ column: string;
93
+ } {
94
+ if (isOperationExpr(expr)) {
95
+ const baseCol = extractBaseColumnRef(expr);
96
+ return { table: baseCol.table, column: baseCol.column };
97
+ }
98
+ if (isExpressionBuilder(expr)) {
99
+ const baseCol = extractBaseColumnRef(expr.expr);
100
+ return { table: baseCol.table, column: baseCol.column };
101
+ }
102
+ // expr is ColumnBuilder - TypeScript can't narrow properly
103
+ const colBuilder = expr as unknown as { table: string; column: string };
104
+ return { table: colBuilder.table, column: colBuilder.column };
105
+ }
106
+
107
+ /**
108
+ * Type predicate to check if a value is a ColumnBuilder.
109
+ */
110
+ export function isColumnBuilder(value: unknown): value is AnyColumnBuilder {
111
+ return (
112
+ typeof value === 'object' &&
113
+ value !== null &&
114
+ 'kind' in value &&
115
+ (value as { kind: unknown }).kind === 'column'
116
+ );
117
+ }
118
+
119
+ /**
120
+ * Type predicate to check if a value is an ExpressionBuilder.
121
+ */
122
+ export function isExpressionBuilder(value: unknown): value is ExpressionBuilder {
123
+ return (
124
+ typeof value === 'object' &&
125
+ value !== null &&
126
+ 'kind' in value &&
127
+ (value as { kind: unknown }).kind === 'expression'
128
+ );
129
+ }
130
+
131
+ /**
132
+ * Type predicate to check if a value is an ExpressionSource (has toExpr method).
133
+ */
134
+ export function isExpressionSource(value: unknown): value is ExpressionSource {
135
+ return (
136
+ typeof value === 'object' &&
137
+ value !== null &&
138
+ 'toExpr' in value &&
139
+ typeof (value as ExpressionSource).toExpr === 'function'
140
+ );
141
+ }
142
+
143
+ /**
144
+ * Converts any ExpressionSource to an Expression.
145
+ * This is the canonical way to get an AST Expression from a builder.
146
+ *
147
+ * @param source - A ColumnBuilder or ExpressionBuilder
148
+ * @returns The corresponding Expression (ColumnRef or OperationExpr)
149
+ */
150
+ export function toExpression(source: ExpressionSource): Expression {
151
+ return source.toExpr();
152
+ }
153
+
154
+ /**
155
+ * Converts an AnyExpressionSource to an Expression.
156
+ * Handles both ColumnBuilder and ExpressionBuilder.
157
+ *
158
+ * @param source - A ColumnBuilder or ExpressionBuilder
159
+ * @returns The corresponding Expression (ColumnRef or OperationExpr)
160
+ */
161
+ export function expressionFromSource(source: AnyExpressionSource): Expression {
162
+ return source.toExpr();
163
+ }
164
+
165
+ /**
166
+ * Type predicate to check if a value is a ValueSource.
167
+ * ValueSource is either a ParamPlaceholder or an ExpressionSource.
168
+ */
169
+ export function isValueSource(value: unknown): value is ValueSource {
170
+ return isParamPlaceholder(value) || isExpressionSource(value);
171
+ }
172
+
173
+ /**
174
+ * Extracts and returns an OperationExpr from a builder.
175
+ * Returns the OperationExpr if the builder is an OperationExpr or has an _operationExpr property,
176
+ * otherwise returns undefined.
177
+ *
178
+ * @deprecated Use isExpressionBuilder() instead. This function exists for backward compatibility
179
+ * with code that uses the hidden _operationExpr property pattern.
180
+ *
181
+ * @design-note: This function accesses the hidden `_operationExpr` property, which is a code smell.
182
+ * The ExpressionBuilder type (introduced in the operation-expr-refactoring) provides a cleaner
183
+ * approach by explicitly representing operation results as a distinct type.
184
+ */
185
+ export function getOperationExpr(
186
+ builder: AnyColumnBuilder | OperationExpr,
187
+ ): OperationExpr | undefined {
188
+ if (isOperationExpr(builder)) {
189
+ return builder;
190
+ }
191
+ const builderWithExpr = builder as unknown as { _operationExpr?: OperationExpr };
192
+ return builderWithExpr._operationExpr;
193
+ }
@@ -1,8 +0,0 @@
1
- // src/errors.ts
2
- import { planInvalid, planUnsupported } from "@prisma-next/plan";
3
-
4
- export {
5
- planInvalid,
6
- planUnsupported
7
- };
8
- //# sourceMappingURL=chunk-2F7DSEOU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/errors.ts"],"sourcesContent":["export { planInvalid, planUnsupported } from '@prisma-next/plan';\n"],"mappings":";AAAA,SAAS,aAAa,uBAAuB;","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-36WJWNHT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,62 +0,0 @@
1
- // src/utils/guards.ts
2
- function getColumnMeta(expr) {
3
- if ("columnMeta" in expr) {
4
- return expr.columnMeta;
5
- }
6
- return void 0;
7
- }
8
- function isParamPlaceholder(value) {
9
- return typeof value === "object" && value !== null && "kind" in value && value.kind === "param-placeholder" && "name" in value && typeof value.name === "string";
10
- }
11
- function extractBaseColumnRef(expr) {
12
- if (expr.kind === "col") {
13
- return expr;
14
- }
15
- return extractBaseColumnRef(expr.self);
16
- }
17
- function collectColumnRefs(expr) {
18
- if (expr.kind === "col") {
19
- return [expr];
20
- }
21
- if (expr.kind === "operation") {
22
- const refs = collectColumnRefs(expr.self);
23
- for (const arg of expr.args) {
24
- refs.push(...collectColumnRefs(arg));
25
- }
26
- return refs;
27
- }
28
- return [];
29
- }
30
- function isOperationExpr(expr) {
31
- return typeof expr === "object" && expr !== null && "kind" in expr && expr.kind === "operation";
32
- }
33
- function getColumnInfo(expr) {
34
- if (isOperationExpr(expr)) {
35
- const baseCol = extractBaseColumnRef(expr);
36
- return { table: baseCol.table, column: baseCol.column };
37
- }
38
- const colBuilder = expr;
39
- return { table: colBuilder.table, column: colBuilder.column };
40
- }
41
- function isColumnBuilder(value) {
42
- return typeof value === "object" && value !== null && "kind" in value && value.kind === "column";
43
- }
44
- function getOperationExpr(builder) {
45
- if (isOperationExpr(builder)) {
46
- return builder;
47
- }
48
- const builderWithExpr = builder;
49
- return builderWithExpr._operationExpr;
50
- }
51
-
52
- export {
53
- getColumnMeta,
54
- isParamPlaceholder,
55
- extractBaseColumnRef,
56
- collectColumnRefs,
57
- isOperationExpr,
58
- getColumnInfo,
59
- isColumnBuilder,
60
- getOperationExpr
61
- };
62
- //# sourceMappingURL=chunk-5N34PNVZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/guards.ts"],"sourcesContent":["import type { StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, LiteralExpr, OperationExpr, ParamRef } from '../ast/types';\nimport type { AnyColumnBuilder, ParamPlaceholder } from '../types';\n\n/**\n * Helper to extract columnMeta from a ColumnBuilder.\n * Returns StorageColumn if present, undefined otherwise.\n * AnyColumnBuilder is a union that includes types with columnMeta property,\n * so we can safely access it after checking for existence.\n */\nexport function getColumnMeta(expr: AnyColumnBuilder): StorageColumn | undefined {\n // AnyColumnBuilder includes AnyColumnBuilderBase which has columnMeta: StorageColumn\n // and ColumnBuilder which has columnMeta: ColumnMeta extends StorageColumn\n // TypeScript should narrow the type after the 'in' check\n if ('columnMeta' in expr) {\n return expr.columnMeta;\n }\n return undefined;\n}\n\n/**\n * Type predicate to check if a value is a ParamPlaceholder.\n */\nexport function isParamPlaceholder(value: unknown): value is ParamPlaceholder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'param-placeholder' &&\n 'name' in value &&\n typeof (value as { name: unknown }).name === 'string'\n );\n}\n\n/**\n * Recursively extracts the base ColumnRef from an OperationExpr.\n * If the expression is already a ColumnRef, it is returned directly.\n */\nexport function extractBaseColumnRef(expr: ColumnRef | OperationExpr): ColumnRef {\n if (expr.kind === 'col') {\n return expr;\n }\n return extractBaseColumnRef(expr.self);\n}\n\n/**\n * Recursively collects all ColumnRef nodes from an expression tree.\n * Handles nested OperationExpr structures by traversing both self and args.\n */\nexport function collectColumnRefs(\n expr: ColumnRef | ParamRef | LiteralExpr | OperationExpr,\n): ColumnRef[] {\n if (expr.kind === 'col') {\n return [expr];\n }\n if (expr.kind === 'operation') {\n const refs: ColumnRef[] = collectColumnRefs(expr.self);\n for (const arg of expr.args) {\n refs.push(...collectColumnRefs(arg));\n }\n return refs;\n }\n return [];\n}\n\n/**\n * Type predicate to check if an expression is an OperationExpr.\n */\nexport function isOperationExpr(expr: AnyColumnBuilder | OperationExpr): expr is OperationExpr {\n return typeof expr === 'object' && expr !== null && 'kind' in expr && expr.kind === 'operation';\n}\n\n/**\n * Helper to extract table and column from a ColumnBuilder or OperationExpr.\n * For OperationExpr, recursively unwraps to find the base ColumnRef.\n */\nexport function getColumnInfo(expr: AnyColumnBuilder | OperationExpr): {\n table: string;\n column: string;\n} {\n if (isOperationExpr(expr)) {\n const baseCol = extractBaseColumnRef(expr);\n return { table: baseCol.table, column: baseCol.column };\n }\n // expr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = expr as unknown as { table: string; column: string };\n return { table: colBuilder.table, column: colBuilder.column };\n}\n\n/**\n * Type predicate to check if a value is a ColumnBuilder.\n */\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'column'\n );\n}\n\n/**\n * Extracts and returns an OperationExpr from a builder.\n * Returns the OperationExpr if the builder is an OperationExpr or has an _operationExpr property,\n * otherwise returns undefined.\n *\n * @design-note: This function accesses the hidden `_operationExpr` property, which is a code smell.\n * The issue is that `executeOperation()` in relational-core returns a ColumnBuilder-shaped object\n * with a hidden `_operationExpr` property, creating coupling between lanes and relational-core\n * implementation details. A cleaner design would be to have operation results be a separate\n * type (e.g., `OperationResultBuilder`) that properly represents expression nodes rather than\n * pretending to be a ColumnBuilder. This would require refactoring the operation execution\n * system in relational-core to return proper expression types.\n */\nexport function getOperationExpr(\n builder: AnyColumnBuilder | OperationExpr,\n): OperationExpr | undefined {\n if (isOperationExpr(builder)) {\n return builder;\n }\n const builderWithExpr = builder as unknown as { _operationExpr?: OperationExpr };\n return builderWithExpr._operationExpr;\n}\n"],"mappings":";AAUO,SAAS,cAAc,MAAmD;AAI/E,MAAI,gBAAgB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAKO,SAAS,mBAAmB,OAA2C;AAC5E,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAA4B,SAAS,uBACtC,UAAU,SACV,OAAQ,MAA4B,SAAS;AAEjD;AAMO,SAAS,qBAAqB,MAA4C;AAC/E,MAAI,KAAK,SAAS,OAAO;AACvB,WAAO;AAAA,EACT;AACA,SAAO,qBAAqB,KAAK,IAAI;AACvC;AAMO,SAAS,kBACd,MACa;AACb,MAAI,KAAK,SAAS,OAAO;AACvB,WAAO,CAAC,IAAI;AAAA,EACd;AACA,MAAI,KAAK,SAAS,aAAa;AAC7B,UAAM,OAAoB,kBAAkB,KAAK,IAAI;AACrD,eAAW,OAAO,KAAK,MAAM;AAC3B,WAAK,KAAK,GAAG,kBAAkB,GAAG,CAAC;AAAA,IACrC;AACA,WAAO;AAAA,EACT;AACA,SAAO,CAAC;AACV;AAKO,SAAS,gBAAgB,MAA+D;AAC7F,SAAO,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU,QAAQ,KAAK,SAAS;AACtF;AAMO,SAAS,cAAc,MAG5B;AACA,MAAI,gBAAgB,IAAI,GAAG;AACzB,UAAM,UAAU,qBAAqB,IAAI;AACzC,WAAO,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO;AAAA,EACxD;AAEA,QAAM,aAAa;AACnB,SAAO,EAAE,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO;AAC9D;AAKO,SAAS,gBAAgB,OAA2C;AACzE,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAA4B,SAAS;AAE1C;AAeO,SAAS,iBACd,SAC2B;AAC3B,MAAI,gBAAgB,OAAO,GAAG;AAC5B,WAAO;AAAA,EACT;AACA,QAAM,kBAAkB;AACxB,SAAO,gBAAgB;AACzB;","names":[]}
@@ -1,16 +0,0 @@
1
- // src/param.ts
2
- import { planInvalid } from "@prisma-next/plan";
3
- function param(name) {
4
- if (typeof name !== "string" || name.length === 0) {
5
- throw planInvalid("Parameter name must be a non-empty string");
6
- }
7
- return Object.freeze({
8
- kind: "param-placeholder",
9
- name
10
- });
11
- }
12
-
13
- export {
14
- param
15
- };
16
- //# sourceMappingURL=chunk-7I3EMQID.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/param.ts"],"sourcesContent":["import { planInvalid } from '@prisma-next/plan';\nimport type { ParamPlaceholder } from './types';\n\nexport type Parameter = ParamPlaceholder;\n\nexport function param(name: string): Parameter {\n if (typeof name !== 'string' || name.length === 0) {\n throw planInvalid('Parameter name must be a non-empty string');\n }\n\n return Object.freeze({\n kind: 'param-placeholder' as const,\n name,\n }) satisfies Parameter;\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAKrB,SAAS,MAAM,MAAyB;AAC7C,MAAI,OAAO,SAAS,YAAY,KAAK,WAAW,GAAG;AACjD,UAAM,YAAY,2CAA2C;AAAA,EAC/D;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB,MAAM;AAAA,IACN;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -1,152 +0,0 @@
1
- import {
2
- attachOperationsToColumnBuilder
3
- } from "./chunk-M23L3JHG.js";
4
- import {
5
- isColumnBuilder
6
- } from "./chunk-MM74SVJ4.js";
7
-
8
- // src/schema.ts
9
- import { planInvalid } from "@prisma-next/plan";
10
- var ColumnBuilderImpl = class {
11
- constructor(table, column, storageColumn) {
12
- this.table = table;
13
- this.column = column;
14
- this.storageColumn = storageColumn;
15
- }
16
- kind = "column";
17
- get columnMeta() {
18
- return this.storageColumn;
19
- }
20
- // Type-level helper property (not used at runtime)
21
- get __jsType() {
22
- return void 0;
23
- }
24
- createBinaryBuilder(op, value) {
25
- if (value == null) {
26
- throw planInvalid("Parameter placeholder or column builder required for column comparison");
27
- }
28
- if (value.kind === "param-placeholder" || isColumnBuilder(value)) {
29
- return Object.freeze({
30
- kind: "binary",
31
- op,
32
- left: this,
33
- right: value
34
- });
35
- }
36
- throw planInvalid("Parameter placeholder or column builder required for column comparison");
37
- }
38
- eq(value) {
39
- return this.createBinaryBuilder("eq", value);
40
- }
41
- neq(value) {
42
- return this.createBinaryBuilder("neq", value);
43
- }
44
- gt(value) {
45
- return this.createBinaryBuilder("gt", value);
46
- }
47
- lt(value) {
48
- return this.createBinaryBuilder("lt", value);
49
- }
50
- gte(value) {
51
- return this.createBinaryBuilder("gte", value);
52
- }
53
- lte(value) {
54
- return this.createBinaryBuilder("lte", value);
55
- }
56
- asc() {
57
- return Object.freeze({
58
- kind: "order",
59
- expr: this,
60
- dir: "asc"
61
- });
62
- }
63
- desc() {
64
- return Object.freeze({
65
- kind: "order",
66
- expr: this,
67
- dir: "desc"
68
- });
69
- }
70
- };
71
- var TableBuilderImpl = class {
72
- kind = "table";
73
- columns;
74
- _name;
75
- constructor(name, columns) {
76
- this._name = name;
77
- this.columns = columns;
78
- }
79
- get name() {
80
- return this._name;
81
- }
82
- };
83
- function buildColumns(tableName, storage, _contract, operationRegistry, contractCapabilities) {
84
- const table = storage.tables[tableName];
85
- if (!table) {
86
- throw planInvalid(`Unknown table ${tableName}`);
87
- }
88
- const tableColumns = table.columns;
89
- const result = {};
90
- const assignColumn = (columnName, columnDef) => {
91
- const columnBuilder = new ColumnBuilderImpl(
92
- tableName,
93
- columnName,
94
- columnDef
95
- );
96
- const builderWithOps = attachOperationsToColumnBuilder(
97
- columnBuilder,
98
- columnDef,
99
- operationRegistry,
100
- contractCapabilities
101
- );
102
- result[columnName] = builderWithOps;
103
- };
104
- for (const columnName of Object.keys(tableColumns)) {
105
- const columnDef = tableColumns[columnName];
106
- if (!columnDef) continue;
107
- assignColumn(columnName, columnDef);
108
- }
109
- return result;
110
- }
111
- function createTableProxy(table) {
112
- return new Proxy(table, {
113
- get(target, prop) {
114
- if (prop === "name" || prop === "kind" || prop === "columns") {
115
- return Reflect.get(target, prop);
116
- }
117
- if (typeof prop === "string" && prop in target.columns) {
118
- return target.columns[prop];
119
- }
120
- return void 0;
121
- }
122
- });
123
- }
124
- function schema(context) {
125
- const contract = context.contract;
126
- const storage = contract.storage;
127
- const tables = {};
128
- const contractCapabilities = contract.capabilities;
129
- const operationRegistry = context.operations;
130
- for (const tableName of Object.keys(storage.tables)) {
131
- const columns = buildColumns(
132
- tableName,
133
- storage,
134
- contract,
135
- operationRegistry,
136
- contractCapabilities
137
- );
138
- const table = new TableBuilderImpl(tableName, columns);
139
- const proxiedTable = createTableProxy(table);
140
- tables[tableName] = Object.freeze(
141
- proxiedTable
142
- );
143
- }
144
- return Object.freeze({ tables });
145
- }
146
-
147
- export {
148
- ColumnBuilderImpl,
149
- TableBuilderImpl,
150
- schema
151
- };
152
- //# sourceMappingURL=chunk-CBTYMOX2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/schema.ts"],"sourcesContent":["import type { OperationRegistry } from '@prisma-next/operations';\nimport { planInvalid } from '@prisma-next/plan';\nimport type {\n ExtractCodecTypes,\n ExtractOperationTypes,\n SqlContract,\n SqlStorage,\n StorageColumn,\n} from '@prisma-next/sql-contract/types';\nimport type { BinaryOp, TableRef } from './ast/types';\nimport { attachOperationsToColumnBuilder } from './operations-registry';\nimport type { QueryLaneContext } from './query-lane-context';\nimport type {\n AnyColumnBuilderBase,\n BinaryBuilder,\n CodecTypes as CodecTypesType,\n ColumnBuilder,\n ComputeColumnJsType,\n OperationTypeSignature,\n OperationTypes,\n OrderBuilder,\n ParamPlaceholder,\n} from './types';\nimport { isColumnBuilder } from './types';\n\ntype TableColumns<Table extends { columns: Record<string, StorageColumn> }> = Table['columns'];\n\ntype ColumnBuilders<\n Contract extends SqlContract<SqlStorage>,\n TableName extends string,\n Columns extends Record<string, StorageColumn>,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n> = {\n readonly [K in keyof Columns]: ColumnBuilder<\n K & string,\n Columns[K],\n ComputeColumnJsType<Contract, TableName, K & string, Columns[K], CodecTypes>,\n Operations\n >;\n};\n\nexport class ColumnBuilderImpl<\n ColumnName extends string,\n ColumnMeta extends StorageColumn,\n JsType = unknown,\n> {\n readonly kind = 'column' as const;\n\n constructor(\n readonly table: string,\n readonly column: ColumnName,\n private readonly storageColumn: ColumnMeta,\n ) {}\n\n get columnMeta(): ColumnMeta {\n return this.storageColumn;\n }\n\n // Type-level helper property (not used at runtime)\n get __jsType(): JsType {\n return undefined as unknown as JsType;\n }\n\n private createBinaryBuilder(\n op: BinaryOp,\n value: ParamPlaceholder | AnyColumnBuilderBase,\n ): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n if (value == null) {\n throw planInvalid('Parameter placeholder or column builder required for column comparison');\n }\n if (value.kind === 'param-placeholder' || isColumnBuilder(value)) {\n return Object.freeze({\n kind: 'binary' as const,\n op,\n left: this as unknown as ColumnBuilder<ColumnName, ColumnMeta, JsType>,\n right: value,\n }) as BinaryBuilder<ColumnName, ColumnMeta, JsType>;\n }\n throw planInvalid('Parameter placeholder or column builder required for column comparison');\n }\n\n eq(\n value: ParamPlaceholder | AnyColumnBuilderBase,\n ): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('eq', value);\n }\n\n neq(\n value: ParamPlaceholder | AnyColumnBuilderBase,\n ): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('neq', value);\n }\n\n gt(\n value: ParamPlaceholder | AnyColumnBuilderBase,\n ): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('gt', value);\n }\n\n lt(\n value: ParamPlaceholder | AnyColumnBuilderBase,\n ): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('lt', value);\n }\n\n gte(\n value: ParamPlaceholder | AnyColumnBuilderBase,\n ): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('gte', value);\n }\n\n lte(\n value: ParamPlaceholder | AnyColumnBuilderBase,\n ): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('lte', value);\n }\n\n asc(): OrderBuilder<ColumnName, ColumnMeta, JsType> {\n return Object.freeze({\n kind: 'order' as const,\n expr: this as unknown as ColumnBuilder<ColumnName, ColumnMeta, JsType>,\n dir: 'asc' as const,\n }) as OrderBuilder<ColumnName, ColumnMeta, JsType>;\n }\n\n desc(): OrderBuilder<ColumnName, ColumnMeta, JsType> {\n return Object.freeze({\n kind: 'order' as const,\n expr: this as unknown as ColumnBuilder<ColumnName, ColumnMeta, JsType>,\n dir: 'desc' as const,\n }) as OrderBuilder<ColumnName, ColumnMeta, JsType>;\n }\n}\n\nexport class TableBuilderImpl<\n Contract extends SqlContract<SqlStorage>,\n TableName extends string,\n Columns extends Record<string, StorageColumn>,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n> implements TableRef\n{\n readonly kind = 'table' as const;\n readonly columns: ColumnBuilders<Contract, TableName, Columns, CodecTypes, Operations>;\n private readonly _name: TableName;\n\n constructor(\n name: TableName,\n columns: ColumnBuilders<Contract, TableName, Columns, CodecTypes, Operations>,\n ) {\n this._name = name;\n this.columns = columns;\n }\n\n get name(): string {\n return this._name;\n }\n}\n\nfunction buildColumns<\n Contract extends SqlContract<SqlStorage>,\n TableName extends keyof Contract['storage']['tables'] & string,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n>(\n tableName: TableName,\n storage: SqlStorage,\n _contract: Contract,\n operationRegistry?: OperationRegistry,\n contractCapabilities?: Record<string, Record<string, boolean>>,\n): ColumnBuilders<\n Contract,\n TableName,\n Contract['storage']['tables'][TableName]['columns'],\n CodecTypes,\n Operations\n> {\n const table = storage.tables[tableName];\n\n if (!table) {\n throw planInvalid(`Unknown table ${tableName}`);\n }\n\n type Columns = Contract['storage']['tables'][TableName]['columns'];\n const tableColumns = table.columns as Columns;\n\n const result = {} as {\n [K in keyof Columns]: ColumnBuilder<\n K & string,\n Columns[K],\n ComputeColumnJsType<Contract, TableName, K & string, Columns[K], CodecTypes>,\n Operations\n >;\n };\n\n const assignColumn = <ColumnKey extends keyof Columns & string>(\n columnName: ColumnKey,\n columnDef: Columns[ColumnKey],\n ) => {\n type JsType = ComputeColumnJsType<\n Contract,\n TableName,\n ColumnKey,\n Columns[ColumnKey],\n CodecTypes\n >;\n\n const columnBuilder = new ColumnBuilderImpl<ColumnKey, Columns[ColumnKey], JsType>(\n tableName,\n columnName,\n columnDef,\n );\n\n const builderWithOps = attachOperationsToColumnBuilder<\n ColumnKey,\n Columns[ColumnKey],\n JsType,\n Operations\n >(\n columnBuilder as unknown as ColumnBuilder<\n ColumnKey,\n Columns[ColumnKey],\n JsType,\n Record<string, never>\n >,\n columnDef,\n operationRegistry,\n contractCapabilities,\n );\n\n (result as Record<string, unknown>)[columnName] = builderWithOps;\n };\n\n for (const columnName of Object.keys(tableColumns) as Array<keyof Columns & string>) {\n const columnDef = tableColumns[columnName];\n if (!columnDef) continue;\n assignColumn(columnName, columnDef);\n }\n\n return result as ColumnBuilders<Contract, TableName, Columns, CodecTypes, Operations>;\n}\n\n/**\n * Creates a Proxy that enables accessing table columns directly on the table object,\n * in addition to the standard `table.columns.columnName` syntax.\n *\n * This allows both access patterns:\n * - `tables.user.columns.id` (standard access)\n * - `tables.user.id` (convenience access via proxy)\n *\n * The proxy intercepts property access and routes column name lookups to\n * `table.columns[prop]`, while preserving direct access to table properties\n * like `name`, `kind`, and `columns`.\n */\nfunction createTableProxy<\n Contract extends SqlContract<SqlStorage>,\n TableName extends string,\n Columns extends Record<string, StorageColumn>,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n>(\n table: TableBuilderImpl<Contract, TableName, Columns, CodecTypes, Operations>,\n): TableBuilderImpl<Contract, TableName, Columns, CodecTypes, Operations> {\n return new Proxy(table, {\n get(target, prop) {\n if (prop === 'name' || prop === 'kind' || prop === 'columns') {\n return Reflect.get(target, prop);\n }\n if (typeof prop === 'string' && prop in target.columns) {\n return target.columns[prop as keyof typeof target.columns];\n }\n return undefined;\n },\n });\n}\n\ntype ExtractSchemaTables<\n Contract extends SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n> = {\n readonly [TableName in keyof Contract['storage']['tables']]: TableBuilderImpl<\n Contract,\n TableName & string,\n TableColumns<Contract['storage']['tables'][TableName]>,\n CodecTypes,\n Operations\n > &\n TableRef;\n};\n\nexport type SchemaHandle<\n Contract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesType = CodecTypesType,\n Operations extends OperationTypes = Record<string, never>,\n> = {\n readonly tables: ExtractSchemaTables<Contract, CodecTypes, Operations>;\n};\n\ntype SchemaReturnType<Contract extends SqlContract<SqlStorage>> = SchemaHandle<\n Contract,\n ExtractCodecTypes<Contract>,\n ToOperationTypes<ExtractOperationTypes<Contract>>\n>;\n\ntype NormalizeOperationTypes<T> = {\n [TypeId in keyof T]: {\n [Method in keyof T[TypeId]]: T[TypeId][Method] extends OperationTypeSignature\n ? T[TypeId][Method]\n : OperationTypeSignature;\n };\n};\n\ntype ToOperationTypes<T> = T extends OperationTypes ? T : NormalizeOperationTypes<T>;\n\n/**\n * Creates a schema handle for building SQL queries.\n *\n * @param context - Query lane context containing contract, codec and operation registries\n * @returns A schema handle with typed table builders\n *\n * @example\n * ```typescript\n * const schemaHandle = schema<Contract>(context);\n * const userTable = schemaHandle.tables.user;\n * ```\n */\nexport function schema<Contract extends SqlContract<SqlStorage>>(\n context: QueryLaneContext<Contract>,\n): SchemaReturnType<Contract> {\n const contract = context.contract;\n const storage = contract.storage;\n type CodecTypes = ExtractCodecTypes<Contract>;\n type Operations = ToOperationTypes<ExtractOperationTypes<Contract>>;\n const tables = {} as ExtractSchemaTables<Contract, CodecTypes, Operations>;\n const contractCapabilities = contract.capabilities;\n\n const operationRegistry = context.operations;\n\n for (const tableName of Object.keys(storage.tables) as Array<\n keyof Contract['storage']['tables'] & string\n >) {\n const columns = buildColumns<Contract, typeof tableName, CodecTypes, Operations>(\n tableName,\n storage,\n contract,\n operationRegistry,\n contractCapabilities,\n );\n const table = new TableBuilderImpl<\n Contract,\n typeof tableName & string,\n Contract['storage']['tables'][typeof tableName]['columns'],\n CodecTypes,\n Operations\n >(tableName, columns);\n const proxiedTable = createTableProxy<\n Contract,\n typeof tableName & string,\n Contract['storage']['tables'][typeof tableName]['columns'],\n CodecTypes,\n Operations\n >(table);\n (tables as Record<string, unknown>)[tableName] = Object.freeze(\n proxiedTable,\n ) as ExtractSchemaTables<Contract, CodecTypes, Operations>[typeof tableName];\n }\n\n return Object.freeze({ tables }) as SchemaReturnType<Contract>;\n}\n\nexport type { ColumnBuilderImpl as Column, TableBuilderImpl as Table };\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-G52ENULI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,16 +0,0 @@
1
- // src/plan.ts
2
- function augmentDescriptorWithColumnMeta(descriptors, columnMeta) {
3
- const descriptor = descriptors[descriptors.length - 1];
4
- if (descriptor && columnMeta) {
5
- descriptors[descriptors.length - 1] = {
6
- ...descriptor,
7
- codecId: columnMeta.codecId,
8
- nativeType: columnMeta.nativeType
9
- };
10
- }
11
- }
12
-
13
- export {
14
- augmentDescriptorWithColumnMeta
15
- };
16
- //# sourceMappingURL=chunk-KYSP7L5C.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plan.ts"],"sourcesContent":["import type { ExecutionPlan, ParamDescriptor } from '@prisma-next/contract/types';\nimport type { StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { QueryAst } from './ast/types';\n\n/**\n * SQL query plan produced by lanes before lowering.\n *\n * Lanes build ASTs and metadata but do not perform SQL lowering.\n * The `sql` field is absent - lowering happens in the runtime executor.\n *\n * Structurally aligns with ExecutionPlan<Row, QueryAst> (without sql field) to maintain\n * compatibility with ExecutionPlan/Plan-based utilities.\n * The generic parameter `_Row` is preserved for type extraction via ResultType.\n */\nexport interface SqlQueryPlan<_Row = unknown>\n extends Pick<ExecutionPlan<_Row, QueryAst>, 'params' | 'meta'> {\n readonly ast: QueryAst;\n // Phantom property to preserve generic parameter for type extraction\n // This allows ResultType to extract _Row for SqlQueryPlan values.\n readonly _Row?: _Row;\n}\n\n/**\n * Augments the last ParamDescriptor in the array with codecId and nativeType from columnMeta.\n * This is used when building WHERE expressions to ensure param descriptors have type information.\n */\nexport function augmentDescriptorWithColumnMeta(\n descriptors: ParamDescriptor[],\n columnMeta: StorageColumn | undefined,\n): void {\n const descriptor = descriptors[descriptors.length - 1];\n if (descriptor && columnMeta) {\n descriptors[descriptors.length - 1] = {\n ...descriptor,\n codecId: columnMeta.codecId,\n nativeType: columnMeta.nativeType,\n };\n }\n}\n"],"mappings":";AA0BO,SAAS,gCACd,aACA,YACM;AACN,QAAM,aAAa,YAAY,YAAY,SAAS,CAAC;AACrD,MAAI,cAAc,YAAY;AAC5B,gBAAY,YAAY,SAAS,CAAC,IAAI;AAAA,MACpC,GAAG;AAAA,MACH,SAAS,WAAW;AAAA,MACpB,YAAY,WAAW;AAAA,IACzB;AAAA,EACF;AACF;","names":[]}