@truto/ginger 2.0.0 → 2.1.0
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/README.md +91 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/joins.d.ts +93 -0
- package/dist/joins.d.ts.map +1 -0
- package/dist/joins.js +507 -0
- package/dist/joins.js.map +1 -0
- package/dist/pagination.d.ts +1 -1
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +11 -13
- package/dist/pagination.js.map +1 -1
- package/dist/service.d.ts +8 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +125 -37
- package/dist/service.js.map +1 -1
- package/dist/sql-builder.d.ts +33 -22
- package/dist/sql-builder.d.ts.map +1 -1
- package/dist/sql-builder.js +103 -67
- package/dist/sql-builder.js.map +1 -1
- package/dist/types.d.ts +58 -8
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/sql-builder.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { sql } from '@truto/sqlite-builder';
|
|
2
|
-
import
|
|
2
|
+
import { type ResolvedJoin } from './joins.js';
|
|
3
|
+
import type { ExposeDef, JoinDef, OrderBy } from './types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Coerce an untrusted value into a scalar that is safe to bind as a SQL
|
|
5
6
|
* parameter, throwing on anything else.
|
|
@@ -12,25 +13,30 @@ import type { JoinDef, OrderBy } from './types.js';
|
|
|
12
13
|
* unescaped — it is always emitted as a bound `?` placeholder instead.
|
|
13
14
|
*/
|
|
14
15
|
export declare function toBindableValue(value: unknown): string | number | boolean | Date | null;
|
|
15
|
-
|
|
16
|
-
* Build a SELECT query with joins and pagination.
|
|
17
|
-
*
|
|
18
|
-
* `joinColumnOverrides[joinName]` overrides the columns pulled from that
|
|
19
|
-
* join's remote table for this query only (instead of using the join's
|
|
20
|
-
* configured `remote.select`). The base service uses this to honour the
|
|
21
|
-
* caller's `select: ['$alias.col', ...]` request.
|
|
22
|
-
*/
|
|
23
|
-
export declare function buildSelect(table: string, options?: {
|
|
16
|
+
export interface BuildSelectOptions {
|
|
24
17
|
columns?: string[];
|
|
25
18
|
where?: Record<string, unknown>;
|
|
19
|
+
/** @deprecated Use resolvedJoins instead. */
|
|
26
20
|
joins?: Record<string, JoinDef>;
|
|
21
|
+
/** @deprecated Use resolvedJoins instead. */
|
|
27
22
|
include?: Record<string, boolean>;
|
|
23
|
+
/** @deprecated Use resolvedJoins instead. */
|
|
28
24
|
joinColumnOverrides?: Record<string, string[]>;
|
|
25
|
+
resolvedJoins?: ResolvedJoin[];
|
|
26
|
+
expose?: readonly ExposeDef[];
|
|
29
27
|
orderBy?: OrderBy[];
|
|
30
28
|
limit?: number;
|
|
31
29
|
offset?: number;
|
|
32
30
|
cursorConditions?: ReturnType<typeof sql>;
|
|
33
|
-
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build a SELECT query with joins and pagination.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildSelect(table: string, options?: BuildSelectOptions): ReturnType<typeof sql>;
|
|
36
|
+
/**
|
|
37
|
+
* Build a JOIN clause from the base table (legacy single-hop API).
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildJoin(baseTable: string, joinDef: JoinDef): ReturnType<typeof sql>;
|
|
34
40
|
/**
|
|
35
41
|
* Build an INSERT query
|
|
36
42
|
*/
|
|
@@ -43,24 +49,29 @@ export declare function buildUpdate(table: string, data: Record<string, unknown>
|
|
|
43
49
|
* Build a DELETE query
|
|
44
50
|
*/
|
|
45
51
|
export declare function buildDelete(table: string, where: Record<string, unknown>): ReturnType<typeof sql>;
|
|
52
|
+
export interface BuildCountOptions {
|
|
53
|
+
where?: Record<string, unknown>;
|
|
54
|
+
resolvedJoins?: ResolvedJoin[];
|
|
55
|
+
expose?: readonly ExposeDef[];
|
|
56
|
+
primaryKey?: string;
|
|
57
|
+
}
|
|
46
58
|
/**
|
|
47
|
-
* Build a COUNT query
|
|
48
|
-
*/
|
|
49
|
-
export declare function buildCount(table: string, where?: Record<string, unknown>): ReturnType<typeof sql>;
|
|
50
|
-
/**
|
|
51
|
-
* Build a SELECT query for a single record by primary key
|
|
59
|
+
* Build a COUNT query, optionally with the same join graph as list/get.
|
|
52
60
|
*/
|
|
53
|
-
export declare function
|
|
61
|
+
export declare function buildCount(table: string, whereOrOptions?: Record<string, unknown> | BuildCountOptions, legacyWhere?: Record<string, unknown>): ReturnType<typeof sql>;
|
|
62
|
+
export interface BuildSelectByIdOptions {
|
|
54
63
|
columns?: string[];
|
|
55
64
|
joins?: Record<string, JoinDef>;
|
|
56
65
|
include?: Record<string, boolean>;
|
|
57
66
|
joinColumnOverrides?: Record<string, string[]>;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
* match (used to enforce ownership / tenant isolation).
|
|
61
|
-
*/
|
|
67
|
+
resolvedJoins?: ResolvedJoin[];
|
|
68
|
+
expose?: readonly ExposeDef[];
|
|
62
69
|
where?: Record<string, unknown>;
|
|
63
|
-
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build a SELECT query for a single record by primary key
|
|
73
|
+
*/
|
|
74
|
+
export declare function buildSelectById(table: string, primaryKey: string | string[], id: string | number | Record<string, unknown>, options?: BuildSelectByIdOptions): ReturnType<typeof sql>;
|
|
64
75
|
/**
|
|
65
76
|
* Escape a column name using sql.ident
|
|
66
77
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-builder.d.ts","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE1D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"sql-builder.d.ts","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/sql-builder.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { compileFilter, sql } from '@truto/sqlite-builder';
|
|
2
2
|
import { SqlBuilderError } from './errors.js';
|
|
3
|
+
import { buildExposeSelectColumns, buildJoinFragments, buildJoinSelectColumns, isUnsafeObjectKey, legacyJoinColumnAlias, resolveOrderByColumn, translateWhereForJoins, } from './joins.js';
|
|
3
4
|
/**
|
|
4
5
|
* Coerce an untrusted value into a scalar that is safe to bind as a SQL
|
|
5
6
|
* parameter, throwing on anything else.
|
|
@@ -24,41 +25,44 @@ export function toBindableValue(value) {
|
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
27
|
* Build a SELECT query with joins and pagination.
|
|
27
|
-
*
|
|
28
|
-
* `joinColumnOverrides[joinName]` overrides the columns pulled from that
|
|
29
|
-
* join's remote table for this query only (instead of using the join's
|
|
30
|
-
* configured `remote.select`). The base service uses this to honour the
|
|
31
|
-
* caller's `select: ['$alias.col', ...]` request.
|
|
32
28
|
*/
|
|
33
29
|
export function buildSelect(table, options = {}) {
|
|
34
30
|
try {
|
|
35
|
-
// Build column list
|
|
36
31
|
const selectColumns = [];
|
|
37
32
|
if (options.columns && options.columns.length > 0) {
|
|
38
|
-
selectColumns.push(...options.columns.map((col) =>
|
|
39
|
-
// A bare '*' must be emitted as `"table".*`, not run through
|
|
40
|
-
// sql.ident('table.*') (which rejects the wildcard identifier).
|
|
41
|
-
col === '*'
|
|
33
|
+
selectColumns.push(...options.columns.map((col) => col === '*'
|
|
42
34
|
? sql `${sql.ident(table)}.*`
|
|
43
35
|
: sql.ident(`${table}.${col}`)));
|
|
44
36
|
}
|
|
45
37
|
else {
|
|
46
38
|
selectColumns.push(sql `${sql.ident(table)}.*`);
|
|
47
39
|
}
|
|
48
|
-
|
|
40
|
+
const resolved = options.resolvedJoins ?? [];
|
|
41
|
+
if (resolved.length > 0) {
|
|
42
|
+
selectColumns.push(...buildJoinSelectColumns(resolved));
|
|
43
|
+
}
|
|
44
|
+
else if (options.joins && options.include) {
|
|
45
|
+
// Legacy flat join path (backward compat)
|
|
49
46
|
for (const [joinName, joinDef] of Object.entries(options.joins)) {
|
|
50
47
|
if (options.include[joinName]) {
|
|
51
48
|
const joinAlias = joinDef.remote.alias || joinName;
|
|
52
49
|
const cols = options.joinColumnOverrides?.[joinName] ?? joinDef.remote.select;
|
|
53
|
-
const joinColumns = cols.map((col) => sql `${sql.ident(`${joinDef.remote.table}.${col}`)} as ${sql.ident(
|
|
50
|
+
const joinColumns = cols.map((col) => sql `${sql.ident(`${joinDef.remote.table}.${col}`)} as ${sql.ident(legacyJoinColumnAlias(joinAlias, col))}`);
|
|
54
51
|
selectColumns.push(...joinColumns);
|
|
55
52
|
}
|
|
56
53
|
}
|
|
57
54
|
}
|
|
58
|
-
|
|
55
|
+
if (options.expose && options.expose.length > 0) {
|
|
56
|
+
selectColumns.push(...buildExposeSelectColumns(options.expose, resolved, table));
|
|
57
|
+
}
|
|
59
58
|
let query = sql `SELECT ${sql.join(selectColumns, ', ')} FROM ${sql.ident(table)}`;
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
if (resolved.length > 0) {
|
|
60
|
+
const joinFragments = buildJoinFragments(resolved);
|
|
61
|
+
if (joinFragments.length > 0) {
|
|
62
|
+
query = sql.join([query, ...joinFragments], ' ');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (options.joins && options.include) {
|
|
62
66
|
const joinFragments = [];
|
|
63
67
|
for (const [joinName, joinDef] of Object.entries(options.joins)) {
|
|
64
68
|
if (options.include[joinName]) {
|
|
@@ -69,28 +73,25 @@ export function buildSelect(table, options = {}) {
|
|
|
69
73
|
query = sql.join([query, ...joinFragments], ' ');
|
|
70
74
|
}
|
|
71
75
|
}
|
|
72
|
-
// Build final query parts
|
|
73
76
|
const finalParts = [query];
|
|
74
|
-
// Build WHERE conditions
|
|
75
77
|
const whereFragments = [];
|
|
76
|
-
// Regular WHERE conditions
|
|
77
78
|
if (options.where && Object.keys(options.where).length > 0) {
|
|
78
|
-
const
|
|
79
|
-
|
|
79
|
+
const translated = resolved.length > 0
|
|
80
|
+
? translateWhereForJoins(options.where, table, resolved, options.expose)
|
|
81
|
+
: options.where;
|
|
82
|
+
whereFragments.push(compileFilter(translated));
|
|
80
83
|
}
|
|
81
|
-
// Cursor conditions
|
|
82
84
|
if (options.cursorConditions && options.cursorConditions.text) {
|
|
83
85
|
whereFragments.push(options.cursorConditions);
|
|
84
86
|
}
|
|
85
|
-
// Add WHERE clause if needed
|
|
86
87
|
if (whereFragments.length > 0) {
|
|
87
88
|
const whereClause = sql.join(whereFragments, ' AND ');
|
|
88
89
|
finalParts.push(sql `WHERE ${whereClause}`);
|
|
89
90
|
}
|
|
90
|
-
// Add ORDER BY
|
|
91
91
|
if (options.orderBy && options.orderBy.length > 0) {
|
|
92
92
|
const orderFragments = options.orderBy.map((order) => {
|
|
93
|
-
const
|
|
93
|
+
const colRef = resolveOrderByColumn(order.column, table, resolved, options.expose);
|
|
94
|
+
const col = sql.ident(colRef);
|
|
94
95
|
switch (order.direction.toLowerCase()) {
|
|
95
96
|
case 'asc':
|
|
96
97
|
return sql `${col} ASC`;
|
|
@@ -102,15 +103,12 @@ export function buildSelect(table, options = {}) {
|
|
|
102
103
|
});
|
|
103
104
|
finalParts.push(sql `ORDER BY ${sql.join(orderFragments, ', ')}`);
|
|
104
105
|
}
|
|
105
|
-
// Add LIMIT
|
|
106
106
|
if (options.limit) {
|
|
107
107
|
finalParts.push(sql `LIMIT ${options.limit}`);
|
|
108
108
|
}
|
|
109
|
-
// Add OFFSET
|
|
110
109
|
if (options.offset) {
|
|
111
110
|
finalParts.push(sql `OFFSET ${options.offset}`);
|
|
112
111
|
}
|
|
113
|
-
// If no WHERE conditions, just join all parts
|
|
114
112
|
return sql.join(finalParts, ' ');
|
|
115
113
|
}
|
|
116
114
|
catch (error) {
|
|
@@ -118,13 +116,18 @@ export function buildSelect(table, options = {}) {
|
|
|
118
116
|
}
|
|
119
117
|
}
|
|
120
118
|
/**
|
|
121
|
-
* Build a JOIN clause
|
|
119
|
+
* Build a JOIN clause from the base table (legacy single-hop API).
|
|
122
120
|
*/
|
|
123
|
-
function buildJoin(baseTable, joinDef) {
|
|
124
|
-
const
|
|
121
|
+
export function buildJoin(baseTable, joinDef) {
|
|
122
|
+
const localCol = joinDef.localColumn ?? joinDef.localPk;
|
|
123
|
+
if (!localCol) {
|
|
124
|
+
throw new SqlBuilderError('JoinDef requires localColumn or localPk', {
|
|
125
|
+
joinDef,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
const { remote, through } = joinDef;
|
|
125
129
|
if (through) {
|
|
126
|
-
|
|
127
|
-
const throughJoin = sql `LEFT JOIN ${sql.ident(through.table)} ON ${sql.ident(`${baseTable}.${localPk}`)} = ${sql.ident(`${through.table}.${through.from}`)}`;
|
|
130
|
+
const throughJoin = sql `LEFT JOIN ${sql.ident(through.table)} ON ${sql.ident(`${baseTable}.${localCol}`)} = ${sql.ident(`${through.table}.${through.from}`)}`;
|
|
128
131
|
const remoteJoin = sql `LEFT JOIN ${sql.ident(remote.table)} ON ${sql.ident(`${through.table}.${through.to}`)} = ${sql.ident(`${remote.table}.${remote.pk}`)}`;
|
|
129
132
|
const joinFragments = [throughJoin, remoteJoin];
|
|
130
133
|
if (joinDef.where && Object.keys(joinDef.where).length > 0) {
|
|
@@ -132,16 +135,13 @@ function buildJoin(baseTable, joinDef) {
|
|
|
132
135
|
}
|
|
133
136
|
return sql.join(joinFragments, ' ');
|
|
134
137
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (joinDef.where && Object.keys(joinDef.where).length > 0) {
|
|
141
|
-
joinFragments.push(sql `AND ${compileFilter(joinDef.where)}`);
|
|
142
|
-
}
|
|
143
|
-
return sql.join(joinFragments, ' ');
|
|
138
|
+
const joinFragments = [
|
|
139
|
+
sql `LEFT JOIN ${sql.ident(remote.table)} ON ${sql.ident(`${baseTable}.${localCol}`)} = ${sql.ident(`${remote.table}.${remote.pk}`)}`,
|
|
140
|
+
];
|
|
141
|
+
if (joinDef.where && Object.keys(joinDef.where).length > 0) {
|
|
142
|
+
joinFragments.push(sql `AND ${compileFilter(joinDef.where)}`);
|
|
144
143
|
}
|
|
144
|
+
return sql.join(joinFragments, ' ');
|
|
145
145
|
}
|
|
146
146
|
/**
|
|
147
147
|
* Build an INSERT query
|
|
@@ -150,10 +150,6 @@ export function buildInsert(table, data) {
|
|
|
150
150
|
try {
|
|
151
151
|
const columns = Object.keys(data);
|
|
152
152
|
const values = Object.values(data);
|
|
153
|
-
// Create individual placeholders for the VALUES clause. `toBindableValue`
|
|
154
|
-
// forces each value to be bound as a parameter and throws on non-scalar
|
|
155
|
-
// objects — preventing a `{ text, values }`-shaped value from being
|
|
156
|
-
// spliced in as a raw SQL fragment.
|
|
157
153
|
const placeholderFragments = values.map((value) => sql `${toBindableValue(value)}`);
|
|
158
154
|
const query = sql `
|
|
159
155
|
INSERT INTO ${sql.ident(table)} (${sql.ident(columns)})
|
|
@@ -170,12 +166,7 @@ export function buildInsert(table, data) {
|
|
|
170
166
|
*/
|
|
171
167
|
export function buildUpdate(table, data, where) {
|
|
172
168
|
try {
|
|
173
|
-
// Build SET clauses using sql fragments. `toBindableValue` forces each
|
|
174
|
-
// value to be bound as a parameter (and rejects non-scalar objects),
|
|
175
|
-
// preventing a `{ text, values }`-shaped value from being spliced in as
|
|
176
|
-
// raw SQL.
|
|
177
169
|
const setFragments = Object.entries(data).map(([column, value]) => sql `${sql.ident(column)} = ${toBindableValue(value)}`);
|
|
178
|
-
// Build WHERE clause
|
|
179
170
|
const whereFilter = compileFilter(where);
|
|
180
171
|
const queryParts = [
|
|
181
172
|
sql `UPDATE ${sql.ident(table)}`,
|
|
@@ -205,19 +196,50 @@ export function buildDelete(table, where) {
|
|
|
205
196
|
}
|
|
206
197
|
}
|
|
207
198
|
/**
|
|
208
|
-
* Build a COUNT query
|
|
199
|
+
* Build a COUNT query, optionally with the same join graph as list/get.
|
|
209
200
|
*/
|
|
210
|
-
export function buildCount(table,
|
|
201
|
+
export function buildCount(table, whereOrOptions, legacyWhere) {
|
|
211
202
|
try {
|
|
212
|
-
|
|
203
|
+
let where;
|
|
204
|
+
let resolved = [];
|
|
205
|
+
let expose;
|
|
206
|
+
let primaryKey = 'id';
|
|
207
|
+
if (whereOrOptions &&
|
|
208
|
+
('resolvedJoins' in whereOrOptions ||
|
|
209
|
+
'expose' in whereOrOptions ||
|
|
210
|
+
'primaryKey' in whereOrOptions)) {
|
|
211
|
+
const opts = whereOrOptions;
|
|
212
|
+
where = opts.where;
|
|
213
|
+
resolved = opts.resolvedJoins ?? [];
|
|
214
|
+
expose = opts.expose;
|
|
215
|
+
primaryKey = opts.primaryKey ?? 'id';
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
where = whereOrOptions ?? legacyWhere;
|
|
219
|
+
}
|
|
220
|
+
const countExpr = resolved.length > 0
|
|
221
|
+
? sql `COUNT(DISTINCT ${sql.ident(`${table}.${primaryKey}`)})`
|
|
222
|
+
: sql `COUNT(*)`;
|
|
223
|
+
const queryParts = [
|
|
224
|
+
sql `SELECT ${countExpr} as count FROM ${sql.ident(table)}`,
|
|
225
|
+
];
|
|
226
|
+
if (resolved.length > 0) {
|
|
227
|
+
const joinFragments = buildJoinFragments(resolved);
|
|
228
|
+
if (joinFragments.length > 0) {
|
|
229
|
+
queryParts.push(sql.join(joinFragments, ' '));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
213
232
|
if (where && Object.keys(where).length > 0) {
|
|
214
|
-
const
|
|
233
|
+
const translated = resolved.length > 0
|
|
234
|
+
? translateWhereForJoins(where, table, resolved, expose)
|
|
235
|
+
: where;
|
|
236
|
+
const whereFilter = compileFilter(translated);
|
|
215
237
|
queryParts.push(sql `WHERE ${whereFilter}`);
|
|
216
238
|
}
|
|
217
239
|
return sql.join(queryParts, ' ');
|
|
218
240
|
}
|
|
219
241
|
catch (error) {
|
|
220
|
-
throw new SqlBuilderError(`Failed to build COUNT query: ${error instanceof Error ? error.message : 'Unknown error'}`, { table,
|
|
242
|
+
throw new SqlBuilderError(`Failed to build COUNT query: ${error instanceof Error ? error.message : 'Unknown error'}`, { table, whereOrOptions, error });
|
|
221
243
|
}
|
|
222
244
|
}
|
|
223
245
|
/**
|
|
@@ -226,36 +248,50 @@ export function buildCount(table, where) {
|
|
|
226
248
|
export function buildSelectById(table, primaryKey, id, options = {}) {
|
|
227
249
|
const { where: scope, ...restOptions } = options;
|
|
228
250
|
const where = {};
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
// The scope filter columns live on the base table, so when joins are active
|
|
234
|
-
// they must be qualified under `$table` (same as the PK) to avoid ambiguity.
|
|
251
|
+
const hasActiveJoins = (options.resolvedJoins && options.resolvedJoins.length > 0) ||
|
|
252
|
+
(options.joins &&
|
|
253
|
+
options.include &&
|
|
254
|
+
Object.keys(options.include).some((key) => options.include[key]));
|
|
235
255
|
const hasScope = scope && Object.keys(scope).length > 0;
|
|
256
|
+
let baseScope = {};
|
|
257
|
+
let joinScope = {};
|
|
258
|
+
if (hasScope) {
|
|
259
|
+
const translated = hasActiveJoins
|
|
260
|
+
? translateWhereForJoins(scope, table, options.resolvedJoins ?? [], options.expose)
|
|
261
|
+
: { ...scope };
|
|
262
|
+
for (const [key, value] of Object.entries(translated)) {
|
|
263
|
+
if (key.startsWith('$')) {
|
|
264
|
+
if (!isUnsafeObjectKey(key.slice(1)))
|
|
265
|
+
joinScope[key] = value;
|
|
266
|
+
}
|
|
267
|
+
else if (!isUnsafeObjectKey(key)) {
|
|
268
|
+
baseScope[key] = value;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
236
272
|
if (Array.isArray(primaryKey)) {
|
|
237
273
|
if (typeof id !== 'object' || id === null || Array.isArray(id)) {
|
|
238
274
|
throw new SqlBuilderError('Composite primary key requires an object with key-value pairs', { primaryKey, id });
|
|
239
275
|
}
|
|
240
276
|
if (hasActiveJoins) {
|
|
241
|
-
|
|
242
|
-
where
|
|
277
|
+
where[`$${table}`] = { ...id, ...baseScope };
|
|
278
|
+
Object.assign(where, joinScope);
|
|
243
279
|
}
|
|
244
280
|
else {
|
|
245
281
|
Object.assign(where, id);
|
|
246
282
|
if (hasScope)
|
|
247
|
-
Object.assign(where,
|
|
283
|
+
Object.assign(where, baseScope);
|
|
248
284
|
}
|
|
249
285
|
}
|
|
250
286
|
else {
|
|
251
287
|
if (hasActiveJoins) {
|
|
252
|
-
|
|
253
|
-
where
|
|
288
|
+
where[`$${table}`] = { [primaryKey]: id, ...baseScope };
|
|
289
|
+
Object.assign(where, joinScope);
|
|
254
290
|
}
|
|
255
291
|
else {
|
|
256
292
|
where[primaryKey] = id;
|
|
257
293
|
if (hasScope)
|
|
258
|
-
Object.assign(where,
|
|
294
|
+
Object.assign(where, baseScope);
|
|
259
295
|
}
|
|
260
296
|
}
|
|
261
297
|
return buildSelect(table, {
|
package/dist/sql-builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-builder.js","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sql-builder.js","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -153,7 +153,7 @@ export interface ListParams<TSelect extends readonly SelectField[] | undefined =
|
|
|
153
153
|
limit?: number;
|
|
154
154
|
orderBy?: OrderBy[];
|
|
155
155
|
where?: Record<string, unknown>;
|
|
156
|
-
include?:
|
|
156
|
+
include?: IncludeMap;
|
|
157
157
|
includeSecrets?: boolean;
|
|
158
158
|
select?: TSelect;
|
|
159
159
|
}
|
|
@@ -170,12 +170,14 @@ export interface ListResult<T> {
|
|
|
170
170
|
*/
|
|
171
171
|
export interface CountParams {
|
|
172
172
|
where?: Record<string, unknown>;
|
|
173
|
+
/** Join graph to use when filtering on joined / exposed columns. */
|
|
174
|
+
include?: IncludeMap;
|
|
173
175
|
}
|
|
174
176
|
/**
|
|
175
177
|
* Get parameters
|
|
176
178
|
*/
|
|
177
179
|
export interface GetParams<TSelect extends readonly SelectField[] | undefined = undefined> {
|
|
178
|
-
include?:
|
|
180
|
+
include?: IncludeMap;
|
|
179
181
|
includeSecrets?: boolean;
|
|
180
182
|
select?: TSelect;
|
|
181
183
|
/**
|
|
@@ -190,7 +192,7 @@ export interface GetParams<TSelect extends readonly SelectField[] | undefined =
|
|
|
190
192
|
* Create parameters
|
|
191
193
|
*/
|
|
192
194
|
export interface CreateParams<TSelect extends readonly SelectField[] | undefined = undefined> {
|
|
193
|
-
include?:
|
|
195
|
+
include?: IncludeMap;
|
|
194
196
|
includeSecrets?: boolean;
|
|
195
197
|
select?: TSelect;
|
|
196
198
|
}
|
|
@@ -198,7 +200,7 @@ export interface CreateParams<TSelect extends readonly SelectField[] | undefined
|
|
|
198
200
|
* Update parameters
|
|
199
201
|
*/
|
|
200
202
|
export interface UpdateParams<TSelect extends readonly SelectField[] | undefined = undefined> {
|
|
201
|
-
include?:
|
|
203
|
+
include?: IncludeMap;
|
|
202
204
|
includeSecrets?: boolean;
|
|
203
205
|
select?: TSelect;
|
|
204
206
|
/**
|
|
@@ -213,7 +215,7 @@ export interface UpdateParams<TSelect extends readonly SelectField[] | undefined
|
|
|
213
215
|
* Delete parameters
|
|
214
216
|
*/
|
|
215
217
|
export interface DeleteParams {
|
|
216
|
-
include?:
|
|
218
|
+
include?: IncludeMap;
|
|
217
219
|
/**
|
|
218
220
|
* Additional row-level scoping filter, AND-combined with the primary-key
|
|
219
221
|
* match. Use this (typically from a `before` hook) to enforce ownership /
|
|
@@ -238,12 +240,43 @@ export interface MethodOptions {
|
|
|
238
240
|
* Join definition kinds
|
|
239
241
|
*/
|
|
240
242
|
export type JoinKind = 'one' | 'many';
|
|
243
|
+
/**
|
|
244
|
+
* Top-level column projection from a joined column.
|
|
245
|
+
*
|
|
246
|
+
* @example `{ from: '$environment_integration.environment_id', as: 'environment_id' }`
|
|
247
|
+
*/
|
|
248
|
+
export interface ExposeDef {
|
|
249
|
+
/** Qualified join path, e.g. `$environment_integration.environment_id`. */
|
|
250
|
+
from: string;
|
|
251
|
+
/** Top-level alias on the returned row. */
|
|
252
|
+
as: string;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Include spec for a single join. `true` includes default columns; an object
|
|
256
|
+
* may set `select` and/or enable nested joins by key.
|
|
257
|
+
*/
|
|
258
|
+
export type IncludeSpec = boolean | IncludeNode;
|
|
259
|
+
export interface IncludeNode {
|
|
260
|
+
select?: string[];
|
|
261
|
+
[nestedJoin: string]: boolean | IncludeSpec | string[] | undefined;
|
|
262
|
+
}
|
|
263
|
+
/** Map of join names to include specs (supports nested includes). */
|
|
264
|
+
export type IncludeMap = Record<string, IncludeSpec>;
|
|
241
265
|
/**
|
|
242
266
|
* Join definition
|
|
243
267
|
*/
|
|
244
268
|
export interface JoinDef {
|
|
245
269
|
kind: JoinKind;
|
|
246
|
-
|
|
270
|
+
/**
|
|
271
|
+
* @deprecated Prefer `localColumn` for FK joins; kept for backward compat.
|
|
272
|
+
* Parent-table column used in the ON clause when `localColumn` is omitted.
|
|
273
|
+
*/
|
|
274
|
+
localPk?: string;
|
|
275
|
+
/**
|
|
276
|
+
* Local FK column on the parent table (base table or parent join's remote
|
|
277
|
+
* table). Falls back to `localPk` when omitted.
|
|
278
|
+
*/
|
|
279
|
+
localColumn?: string;
|
|
247
280
|
through?: {
|
|
248
281
|
table: string;
|
|
249
282
|
from: string;
|
|
@@ -257,6 +290,8 @@ export interface JoinDef {
|
|
|
257
290
|
};
|
|
258
291
|
where?: Record<string, unknown>;
|
|
259
292
|
schema: z.ZodTypeAny;
|
|
293
|
+
/** Nested joins reachable from this join's remote table. */
|
|
294
|
+
joins?: Record<string, JoinDef>;
|
|
260
295
|
}
|
|
261
296
|
/**
|
|
262
297
|
* Secret field definition.
|
|
@@ -331,6 +366,11 @@ export interface ServiceOptions<TRow extends z.ZodTypeAny, TCreate extends z.Zod
|
|
|
331
366
|
createSchema: TCreate;
|
|
332
367
|
updateSchema: TUpdate;
|
|
333
368
|
joins?: TJoins;
|
|
369
|
+
/**
|
|
370
|
+
* Project joined columns onto the top-level row, e.g.
|
|
371
|
+
* `{ from: '$environment_integration.environment_id', as: 'environment_id' }`.
|
|
372
|
+
*/
|
|
373
|
+
expose?: ExposeDef[];
|
|
334
374
|
secrets?: TSecrets;
|
|
335
375
|
timestamps?: TimestampConfig;
|
|
336
376
|
hooks?: Partial<HookMap<BaseCtx>>;
|
|
@@ -343,8 +383,17 @@ export interface ServiceOptions<TRow extends z.ZodTypeAny, TCreate extends z.Zod
|
|
|
343
383
|
/**
|
|
344
384
|
* Compute join types based on include parameter
|
|
345
385
|
*/
|
|
346
|
-
|
|
347
|
-
|
|
386
|
+
type IncludeEnabled<T> = T extends true ? true : T extends Record<string, unknown> ? true : false;
|
|
387
|
+
type JoinResultType<TJoin extends JoinDef> = TJoin['kind'] extends 'one' ? z.infer<TJoin['schema']> | null : z.infer<TJoin['schema']>[];
|
|
388
|
+
type ComputeNestedJoins<TNested extends Record<string, JoinDef> | undefined, TInclude extends IncludeNode | undefined> = TNested extends Record<string, JoinDef> ? TInclude extends IncludeNode ? {
|
|
389
|
+
[K in keyof TNested & keyof TInclude]: K extends 'select' ? never : IncludeEnabled<TInclude[K]> extends true ? TNested[K] extends JoinDef ? JoinResultType<TNested[K]> & (TNested[K]['joins'] extends Record<string, JoinDef> ? ComputeNestedJoins<TNested[K]['joins'], TInclude[K] extends IncludeNode ? TInclude[K] : undefined> : Record<string, never>) : never : never;
|
|
390
|
+
} : Record<string, never> : Record<string, never>;
|
|
391
|
+
export type ComputeJoins<TJoins extends Record<string, JoinDef>, TInclude extends IncludeMap | undefined> = TInclude extends IncludeMap ? {
|
|
392
|
+
[K in keyof TInclude & keyof TJoins]: IncludeEnabled<TInclude[K]> extends true ? TJoins[K] extends JoinDef ? JoinResultType<TJoins[K]> & ComputeNestedJoins<TJoins[K]['joins'], TInclude[K] extends IncludeNode ? TInclude[K] : undefined> : never : never;
|
|
393
|
+
} : Record<string, never>;
|
|
394
|
+
/** Merge exposed column types onto a row type. */
|
|
395
|
+
export type ComputeExposed<TExpose extends readonly ExposeDef[] | undefined> = TExpose extends readonly ExposeDef[] ? {
|
|
396
|
+
[E in TExpose[number] as E['as']]: unknown;
|
|
348
397
|
} : Record<string, never>;
|
|
349
398
|
/**
|
|
350
399
|
* Extract row type from service
|
|
@@ -358,4 +407,5 @@ export type ServiceCreate<T> = T extends BaseService<any, infer TCreate, any, an
|
|
|
358
407
|
* Extract update type from service
|
|
359
408
|
*/
|
|
360
409
|
export type ServiceUpdate<T> = T extends BaseService<any, any, infer TUpdate, any, any> ? z.infer<TUpdate> : never;
|
|
410
|
+
export {};
|
|
361
411
|
//# sourceMappingURL=types.d.ts.map
|