@rudderjs/orm 1.9.1 → 1.9.2
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/aggregate.d.ts +16 -7
- package/dist/aggregate.d.ts.map +1 -1
- package/dist/aggregate.js +27 -29
- package/dist/aggregate.js.map +1 -1
- package/dist/index.d.ts +41 -124
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -892
- package/dist/index.js.map +1 -1
- package/dist/relations/pivot-accessors.d.ts +127 -0
- package/dist/relations/pivot-accessors.d.ts.map +1 -0
- package/dist/relations/pivot-accessors.js +211 -0
- package/dist/relations/pivot-accessors.js.map +1 -0
- package/dist/relations/pivot-deferred.d.ts +13 -0
- package/dist/relations/pivot-deferred.d.ts.map +1 -0
- package/dist/relations/pivot-deferred.js +210 -0
- package/dist/relations/pivot-deferred.js.map +1 -0
- package/dist/relations/pivot-meta.d.ts +50 -0
- package/dist/relations/pivot-meta.d.ts.map +1 -0
- package/dist/relations/pivot-meta.js +34 -0
- package/dist/relations/pivot-meta.js.map +1 -0
- package/dist/relations/where-has.d.ts +53 -0
- package/dist/relations/where-has.d.ts.map +1 -0
- package/dist/relations/where-has.js +239 -0
- package/dist/relations/where-has.js.map +1 -0
- package/dist/utils.d.ts +35 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +63 -0
- package/dist/utils.js.map +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pivot-accessors.js","sourceRoot":"","sources":["../../src/relations/pivot-accessors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { QueryBuilder } from '@rudderjs/contracts';
|
|
2
|
+
import { Model } from '../index.js';
|
|
3
|
+
import type { BelongsToManyDef, BelongsToManyMeta, MorphParentDef, MorphToManyDef, MorphToManyMeta, MorphedByManyDef, MorphedByManyMeta } from './pivot-meta.js';
|
|
4
|
+
/**
|
|
5
|
+
* Build a non-deferred QueryBuilder that fetches the polymorphic children
|
|
6
|
+
* of `self` for `morphMany` / `morphOne` declarations. Direct fetch — no
|
|
7
|
+
* pivot table — so no Proxy/deferred wrapping needed.
|
|
8
|
+
*/
|
|
9
|
+
export declare function morphParentQuery(self: Model, ctor: typeof Model, def: MorphParentDef, name: string): QueryBuilder<Model>;
|
|
10
|
+
export declare function belongsToManyDeferredQb(Related: typeof Model, _def: BelongsToManyDef, meta: BelongsToManyMeta, parentVal: unknown): QueryBuilder<Model>;
|
|
11
|
+
export declare function morphToManyDeferredQb(Related: typeof Model, _def: MorphToManyDef, meta: MorphToManyMeta, parentVal: unknown): QueryBuilder<Model>;
|
|
12
|
+
export declare function morphedByManyDeferredQb(Related: typeof Model, _def: MorphedByManyDef, meta: MorphedByManyMeta, parentVal: unknown): QueryBuilder<Model>;
|
|
13
|
+
//# sourceMappingURL=pivot-deferred.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pivot-deferred.d.ts","sourceRoot":"","sources":["../../src/relations/pivot-deferred.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,iBAAiB,CAAA;AAIxB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,OAAO,KAAK,EAClB,GAAG,EAAG,cAAc,EACpB,IAAI,EAAE,MAAM,GACX,YAAY,CAAC,KAAK,CAAC,CAWrB;AAuJD,wBAAgB,uBAAuB,CACrC,OAAO,EAAI,OAAO,KAAK,EACvB,IAAI,EAAO,gBAAgB,EAC3B,IAAI,EAAO,iBAAiB,EAC5B,SAAS,EAAE,OAAO,GACjB,YAAY,CAAC,KAAK,CAAC,CA0BrB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAI,OAAO,KAAK,EACvB,IAAI,EAAO,cAAc,EACzB,IAAI,EAAO,eAAe,EAC1B,SAAS,EAAE,OAAO,GACjB,YAAY,CAAC,KAAK,CAAC,CAyBrB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAI,OAAO,KAAK,EACvB,IAAI,EAAO,gBAAgB,EAC3B,IAAI,EAAO,iBAAiB,EAC5B,SAAS,EAAE,OAAO,GACjB,YAAY,CAAC,KAAK,CAAC,CAyBrB"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { ModelRegistry } from '../index.js';
|
|
2
|
+
// ─── morphMany / morphOne read query ───────────────────────
|
|
3
|
+
/**
|
|
4
|
+
* Build a non-deferred QueryBuilder that fetches the polymorphic children
|
|
5
|
+
* of `self` for `morphMany` / `morphOne` declarations. Direct fetch — no
|
|
6
|
+
* pivot table — so no Proxy/deferred wrapping needed.
|
|
7
|
+
*/
|
|
8
|
+
export function morphParentQuery(self, ctor, def, name) {
|
|
9
|
+
const Related = def.model();
|
|
10
|
+
const idCol = `${def.morphName}Id`;
|
|
11
|
+
const typeCol = `${def.morphName}Type`;
|
|
12
|
+
const localCol = def.localKey ?? ctor.primaryKey;
|
|
13
|
+
const localVal = self[localCol];
|
|
14
|
+
const typeVal = def.morphType ?? ctor.morphAlias ?? ctor.name;
|
|
15
|
+
if (localVal === undefined || localVal === null) {
|
|
16
|
+
throw new Error(`[RudderJS ORM] Cannot resolve "${name}" on ${ctor.name} — ${localCol} is unset.`);
|
|
17
|
+
}
|
|
18
|
+
return Related.where(idCol, localVal).where(typeCol, typeVal);
|
|
19
|
+
}
|
|
20
|
+
// ─── Deferred Proxy machinery ──────────────────────────────
|
|
21
|
+
const CHAIN_METHODS = new Set([
|
|
22
|
+
'where', 'orWhere', 'orderBy', 'limit', 'offset', 'with', 'withTrashed', 'onlyTrashed',
|
|
23
|
+
]);
|
|
24
|
+
const TERMINAL_METHODS = new Set([
|
|
25
|
+
'first', 'find', 'get', 'all', 'count', 'paginate',
|
|
26
|
+
]);
|
|
27
|
+
const UNSUPPORTED_TERMINALS = new Set([
|
|
28
|
+
'create', 'update', 'delete', 'restore', 'forceDelete', 'increment', 'decrement', 'insertMany', 'deleteAll', 'updateAll',
|
|
29
|
+
]);
|
|
30
|
+
function replayChain(q, recorded) {
|
|
31
|
+
let cur = q;
|
|
32
|
+
for (const [m, args] of recorded) {
|
|
33
|
+
const fn = cur[m];
|
|
34
|
+
if (fn)
|
|
35
|
+
cur = fn.apply(cur, args);
|
|
36
|
+
}
|
|
37
|
+
return cur;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Build a deferred QueryBuilder that runs the pivot lookup on terminal
|
|
41
|
+
* evaluation. Chain methods (where/orderBy/etc.) are recorded and replayed
|
|
42
|
+
* against `Related.where(relatedKey, 'IN', ids)` once ids are resolved.
|
|
43
|
+
*
|
|
44
|
+
* Mutations (`create`/`update`/`delete`/`insertMany`/`deleteAll`) throw —
|
|
45
|
+
* write the pivot via `belongsToMany().attach/detach/sync` and write the
|
|
46
|
+
* related rows via the related model directly.
|
|
47
|
+
*/
|
|
48
|
+
function makeDeferredProxy(buildResolved, recorded, relationKind, hooks = {}) {
|
|
49
|
+
const proxy = new Proxy({}, {
|
|
50
|
+
get(_t, prop) {
|
|
51
|
+
const name = String(prop);
|
|
52
|
+
if (name === 'withPivot') {
|
|
53
|
+
return (...cols) => {
|
|
54
|
+
if (cols.length === 0) {
|
|
55
|
+
throw new Error('[RudderJS ORM] withPivot() requires at least one column name.');
|
|
56
|
+
}
|
|
57
|
+
hooks.onWithPivot?.(cols);
|
|
58
|
+
return proxy;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (CHAIN_METHODS.has(name)) {
|
|
62
|
+
return (...args) => {
|
|
63
|
+
recorded.push([name, args]);
|
|
64
|
+
return proxy;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (TERMINAL_METHODS.has(name)) {
|
|
68
|
+
return async (...args) => {
|
|
69
|
+
const q = await buildResolved();
|
|
70
|
+
const fn = q[name];
|
|
71
|
+
const raw = fn ? await fn.apply(q, args) : undefined;
|
|
72
|
+
return hooks.postProcess ? hooks.postProcess(raw, name) : raw;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (UNSUPPORTED_TERMINALS.has(name)) {
|
|
76
|
+
return () => {
|
|
77
|
+
throw new Error(`[RudderJS ORM] "${name}" is not supported on a ${relationKind} lazy-fetch query. ` +
|
|
78
|
+
`Use Model.${relationKind}(parent, name) for pivot mutations or call methods on the related Model directly.`);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
return proxy;
|
|
85
|
+
}
|
|
86
|
+
// ─── Pivot stamping (read-side) ────────────────────────────
|
|
87
|
+
/**
|
|
88
|
+
* Stamp `row.pivot = { col: value, ... }` for every row in `rows` whose
|
|
89
|
+
* `relatedKey` matches a pivot row. Used by the three deferred QBs after the
|
|
90
|
+
* second-step `Related` query resolves. Mutates rows in place; rows whose
|
|
91
|
+
* pivot row is absent are left untouched (`pivot` stays undefined).
|
|
92
|
+
*/
|
|
93
|
+
function stampPivotOnRows(rows, relatedKey, pivotRows, relatedPivotKey, pivotColumns) {
|
|
94
|
+
if (pivotColumns.length === 0)
|
|
95
|
+
return;
|
|
96
|
+
const byId = new Map();
|
|
97
|
+
for (const p of pivotRows)
|
|
98
|
+
byId.set(p[relatedPivotKey], p);
|
|
99
|
+
for (const row of rows) {
|
|
100
|
+
if (row === null || row === undefined)
|
|
101
|
+
continue;
|
|
102
|
+
const pivot = byId.get(row[relatedKey]);
|
|
103
|
+
if (!pivot)
|
|
104
|
+
continue;
|
|
105
|
+
const projected = {};
|
|
106
|
+
for (const col of pivotColumns)
|
|
107
|
+
projected[col] = pivot[col];
|
|
108
|
+
row['pivot'] = projected;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Stamp `pivot` onto a single result (object or array). Used by the deferred
|
|
113
|
+
* proxy's `postProcess` hook — the terminal name (`first` / `find` / `get` /
|
|
114
|
+
* `all` / `paginate`) determines whether to walk the result.
|
|
115
|
+
*/
|
|
116
|
+
function stampPivotOnResult(result, terminal, relatedKey, pivotRows, relatedPivotKey, pivotColumns) {
|
|
117
|
+
if (pivotColumns.length === 0)
|
|
118
|
+
return result;
|
|
119
|
+
if (result === null || result === undefined)
|
|
120
|
+
return result;
|
|
121
|
+
if (terminal === 'first' || terminal === 'find') {
|
|
122
|
+
stampPivotOnRows([result], relatedKey, pivotRows, relatedPivotKey, pivotColumns);
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
if (terminal === 'get' || terminal === 'all') {
|
|
126
|
+
stampPivotOnRows(result, relatedKey, pivotRows, relatedPivotKey, pivotColumns);
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
if (terminal === 'paginate') {
|
|
130
|
+
const page = result;
|
|
131
|
+
stampPivotOnRows(page.data, relatedKey, pivotRows, relatedPivotKey, pivotColumns);
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
// ─── Public deferred-QB builders ───────────────────────────
|
|
137
|
+
export function belongsToManyDeferredQb(Related, _def, meta, parentVal) {
|
|
138
|
+
const recorded = [];
|
|
139
|
+
const pivotColumns = [];
|
|
140
|
+
let lastPivotRows = [];
|
|
141
|
+
const buildResolved = async () => {
|
|
142
|
+
const adapter = ModelRegistry.getAdapter();
|
|
143
|
+
const pivotRows = await adapter
|
|
144
|
+
.query(meta.pivotTable)
|
|
145
|
+
.where(meta.foreignPivotKey, parentVal)
|
|
146
|
+
.get();
|
|
147
|
+
lastPivotRows = pivotRows;
|
|
148
|
+
const ids = pivotRows.map(r => r[meta.relatedPivotKey]);
|
|
149
|
+
// Empty IN list — short-circuit with a guaranteed-empty query so
|
|
150
|
+
// adapters don't have to handle the edge case.
|
|
151
|
+
const q = Related.query()
|
|
152
|
+
.where(meta.relatedKey, 'IN', ids.length === 0 ? [] : ids);
|
|
153
|
+
return replayChain(q, recorded);
|
|
154
|
+
};
|
|
155
|
+
return makeDeferredProxy(buildResolved, recorded, 'belongsToMany', {
|
|
156
|
+
onWithPivot(cols) { pivotColumns.push(...cols); },
|
|
157
|
+
postProcess(result, terminal) {
|
|
158
|
+
return stampPivotOnResult(result, terminal, meta.relatedKey, lastPivotRows, meta.relatedPivotKey, pivotColumns);
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
export function morphToManyDeferredQb(Related, _def, meta, parentVal) {
|
|
163
|
+
const recorded = [];
|
|
164
|
+
const pivotColumns = [];
|
|
165
|
+
let lastPivotRows = [];
|
|
166
|
+
const buildResolved = async () => {
|
|
167
|
+
const adapter = ModelRegistry.getAdapter();
|
|
168
|
+
const pivotRows = await adapter
|
|
169
|
+
.query(meta.pivotTable)
|
|
170
|
+
.where(meta.foreignPivotKey, parentVal)
|
|
171
|
+
.where(meta.morphTypeKey, meta.morphTypeValue)
|
|
172
|
+
.get();
|
|
173
|
+
lastPivotRows = pivotRows;
|
|
174
|
+
const ids = pivotRows.map(r => r[meta.relatedPivotKey]);
|
|
175
|
+
const q = Related.query()
|
|
176
|
+
.where(meta.relatedKey, 'IN', ids.length === 0 ? [] : ids);
|
|
177
|
+
return replayChain(q, recorded);
|
|
178
|
+
};
|
|
179
|
+
return makeDeferredProxy(buildResolved, recorded, 'morphToMany', {
|
|
180
|
+
onWithPivot(cols) { pivotColumns.push(...cols); },
|
|
181
|
+
postProcess(result, terminal) {
|
|
182
|
+
return stampPivotOnResult(result, terminal, meta.relatedKey, lastPivotRows, meta.relatedPivotKey, pivotColumns);
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
export function morphedByManyDeferredQb(Related, _def, meta, parentVal) {
|
|
187
|
+
const recorded = [];
|
|
188
|
+
const pivotColumns = [];
|
|
189
|
+
let lastPivotRows = [];
|
|
190
|
+
const buildResolved = async () => {
|
|
191
|
+
const adapter = ModelRegistry.getAdapter();
|
|
192
|
+
const pivotRows = await adapter
|
|
193
|
+
.query(meta.pivotTable)
|
|
194
|
+
.where(meta.foreignPivotKey, parentVal)
|
|
195
|
+
.where(meta.morphTypeKey, meta.morphTypeValue)
|
|
196
|
+
.get();
|
|
197
|
+
lastPivotRows = pivotRows;
|
|
198
|
+
const ids = pivotRows.map(r => r[meta.relatedPivotKey]);
|
|
199
|
+
const q = Related.query()
|
|
200
|
+
.where(meta.relatedKey, 'IN', ids.length === 0 ? [] : ids);
|
|
201
|
+
return replayChain(q, recorded);
|
|
202
|
+
};
|
|
203
|
+
return makeDeferredProxy(buildResolved, recorded, 'morphedByMany', {
|
|
204
|
+
onWithPivot(cols) { pivotColumns.push(...cols); },
|
|
205
|
+
postProcess(result, terminal) {
|
|
206
|
+
return stampPivotOnResult(result, terminal, meta.relatedKey, lastPivotRows, meta.relatedPivotKey, pivotColumns);
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=pivot-deferred.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pivot-deferred.js","sourceRoot":"","sources":["../../src/relations/pivot-deferred.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Model, RelationDefinition } from '../index.js';
|
|
2
|
+
export type BelongsToManyDef = Extract<RelationDefinition, {
|
|
3
|
+
type: 'belongsToMany';
|
|
4
|
+
}>;
|
|
5
|
+
export type MorphParentDef = Extract<RelationDefinition, {
|
|
6
|
+
type: 'morphMany' | 'morphOne';
|
|
7
|
+
}>;
|
|
8
|
+
export type MorphToManyDef = Extract<RelationDefinition, {
|
|
9
|
+
type: 'morphToMany';
|
|
10
|
+
}>;
|
|
11
|
+
export type MorphedByManyDef = Extract<RelationDefinition, {
|
|
12
|
+
type: 'morphedByMany';
|
|
13
|
+
}>;
|
|
14
|
+
export interface BelongsToManyMeta {
|
|
15
|
+
pivotTable: string;
|
|
16
|
+
foreignPivotKey: string;
|
|
17
|
+
relatedPivotKey: string;
|
|
18
|
+
parentKey: string;
|
|
19
|
+
relatedKey: string;
|
|
20
|
+
}
|
|
21
|
+
export interface MorphToManyMeta {
|
|
22
|
+
pivotTable: string;
|
|
23
|
+
/** `{morphName}Id` — pivot column for the parent (the polymorphic side). */
|
|
24
|
+
foreignPivotKey: string;
|
|
25
|
+
/** `{morphName}Type` — discriminator column on the pivot. */
|
|
26
|
+
morphTypeKey: string;
|
|
27
|
+
/** Discriminator value to write/match for the parent class. */
|
|
28
|
+
morphTypeValue: string;
|
|
29
|
+
/** Pivot column for the related (strong) row. */
|
|
30
|
+
relatedPivotKey: string;
|
|
31
|
+
parentKey: string;
|
|
32
|
+
relatedKey: string;
|
|
33
|
+
}
|
|
34
|
+
export interface MorphedByManyMeta {
|
|
35
|
+
pivotTable: string;
|
|
36
|
+
/** `{morphName}Id` — pivot column for the related (polymorphic-side) row. */
|
|
37
|
+
relatedPivotKey: string;
|
|
38
|
+
/** `{morphName}Type` — discriminator column on the pivot. */
|
|
39
|
+
morphTypeKey: string;
|
|
40
|
+
/** Discriminator value used to match rows that point at Related. */
|
|
41
|
+
morphTypeValue: string;
|
|
42
|
+
/** Pivot column for the parent (strong) row. */
|
|
43
|
+
foreignPivotKey: string;
|
|
44
|
+
parentKey: string;
|
|
45
|
+
relatedKey: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function resolveBelongsToManyMeta(Parent: typeof Model, Related: typeof Model, def: BelongsToManyDef): BelongsToManyMeta;
|
|
48
|
+
export declare function resolveMorphToManyMeta(Parent: typeof Model, Related: typeof Model, def: MorphToManyDef): MorphToManyMeta;
|
|
49
|
+
export declare function resolveMorphedByManyMeta(Parent: typeof Model, Related: typeof Model, def: MorphedByManyDef): MorphedByManyMeta;
|
|
50
|
+
//# sourceMappingURL=pivot-meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pivot-meta.d.ts","sourceRoot":"","sources":["../../src/relations/pivot-meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAK5D,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC,CAAA;AACrF,MAAM,MAAM,cAAc,GAAK,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAA;CAAE,CAAC,CAAA;AAC9F,MAAM,MAAM,cAAc,GAAK,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,CAAA;AACnF,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC,CAAA;AAIrF,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAO,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAQ,MAAM,CAAA;IACvB,UAAU,EAAO,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAO,MAAM,CAAA;IACvB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAA;IACvB,6DAA6D;IAC7D,YAAY,EAAK,MAAM,CAAA;IACvB,+DAA+D;IAC/D,cAAc,EAAG,MAAM,CAAA;IACvB,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAQ,MAAM,CAAA;IACvB,UAAU,EAAO,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAO,MAAM,CAAA;IACvB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAA;IACvB,6DAA6D;IAC7D,YAAY,EAAK,MAAM,CAAA;IACvB,oEAAoE;IACpE,cAAc,EAAG,MAAM,CAAA;IACvB,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAQ,MAAM,CAAA;IACvB,UAAU,EAAO,MAAM,CAAA;CACxB;AAID,wBAAgB,wBAAwB,CACtC,MAAM,EAAG,OAAO,KAAK,EACrB,OAAO,EAAE,OAAO,KAAK,EACrB,GAAG,EAAM,gBAAgB,GACxB,iBAAiB,CAQnB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAG,OAAO,KAAK,EACrB,OAAO,EAAE,OAAO,KAAK,EACrB,GAAG,EAAM,cAAc,GACtB,eAAe,CAUjB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAG,OAAO,KAAK,EACrB,OAAO,EAAE,OAAO,KAAK,EACrB,GAAG,EAAM,gBAAgB,GACxB,iBAAiB,CAUnB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { camelHead } from '../utils.js';
|
|
2
|
+
// ─── Resolvers ─────────────────────────────────────────────
|
|
3
|
+
export function resolveBelongsToManyMeta(Parent, Related, def) {
|
|
4
|
+
return {
|
|
5
|
+
pivotTable: def.pivotTable,
|
|
6
|
+
foreignPivotKey: def.foreignPivotKey ?? `${camelHead(Parent.name)}Id`,
|
|
7
|
+
relatedPivotKey: def.relatedPivotKey ?? `${camelHead(Related.name)}Id`,
|
|
8
|
+
parentKey: def.parentKey ?? Parent.primaryKey,
|
|
9
|
+
relatedKey: def.relatedKey ?? Related.primaryKey,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function resolveMorphToManyMeta(Parent, Related, def) {
|
|
13
|
+
return {
|
|
14
|
+
pivotTable: def.pivotTable,
|
|
15
|
+
foreignPivotKey: `${def.morphName}Id`,
|
|
16
|
+
morphTypeKey: `${def.morphName}Type`,
|
|
17
|
+
morphTypeValue: def.morphType ?? Parent.morphAlias ?? Parent.name,
|
|
18
|
+
relatedPivotKey: def.relatedPivotKey ?? `${camelHead(Related.name)}Id`,
|
|
19
|
+
parentKey: def.parentKey ?? Parent.primaryKey,
|
|
20
|
+
relatedKey: def.relatedKey ?? Related.primaryKey,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function resolveMorphedByManyMeta(Parent, Related, def) {
|
|
24
|
+
return {
|
|
25
|
+
pivotTable: def.pivotTable,
|
|
26
|
+
relatedPivotKey: `${def.morphName}Id`,
|
|
27
|
+
morphTypeKey: `${def.morphName}Type`,
|
|
28
|
+
morphTypeValue: def.morphType ?? Related.morphAlias ?? Related.name,
|
|
29
|
+
foreignPivotKey: def.foreignPivotKey ?? `${camelHead(Parent.name)}Id`,
|
|
30
|
+
parentKey: def.parentKey ?? Parent.primaryKey,
|
|
31
|
+
relatedKey: def.relatedKey ?? Related.primaryKey,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=pivot-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pivot-meta.js","sourceRoot":"","sources":["../../src/relations/pivot-meta.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AA+CvC,8DAA8D;AAE9D,MAAM,UAAU,wBAAwB,CACtC,MAAqB,EACrB,OAAqB,EACrB,GAAyB;IAEzB,OAAO;QACL,UAAU,EAAO,GAAG,CAAC,UAAU;QAC/B,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;QACrE,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;QACtE,SAAS,EAAQ,GAAG,CAAC,SAAS,IAAU,MAAM,CAAC,UAAU;QACzD,UAAU,EAAO,GAAG,CAAC,UAAU,IAAS,OAAO,CAAC,UAAU;KAC3D,CAAA;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAqB,EACrB,OAAqB,EACrB,GAAuB;IAEvB,OAAO;QACL,UAAU,EAAO,GAAG,CAAC,UAAU;QAC/B,eAAe,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI;QACrC,YAAY,EAAK,GAAG,GAAG,CAAC,SAAS,MAAM;QACvC,cAAc,EAAG,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI;QAClE,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;QACtE,SAAS,EAAQ,GAAG,CAAC,SAAS,IAAU,MAAM,CAAC,UAAU;QACzD,UAAU,EAAO,GAAG,CAAC,UAAU,IAAS,OAAO,CAAC,UAAU;KAC3D,CAAA;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAqB,EACrB,OAAqB,EACrB,GAAyB;IAEzB,OAAO;QACL,UAAU,EAAO,GAAG,CAAC,UAAU;QAC/B,eAAe,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI;QACrC,YAAY,EAAK,GAAG,GAAG,CAAC,SAAS,MAAM;QACvC,cAAc,EAAG,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI;QACpE,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;QACrE,SAAS,EAAQ,GAAG,CAAC,SAAS,IAAU,MAAM,CAAC,UAAU;QACzD,UAAU,EAAO,GAAG,CAAC,UAAU,IAAS,OAAO,CAAC,UAAU;KAC3D,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { QueryBuilder, RelationExistencePredicate, WhereClause } from '@rudderjs/contracts';
|
|
2
|
+
import type { Model, RelationDefinition } from '../index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Variant shape of `RelationDefinition` for `hasOne | hasMany | belongsTo`.
|
|
5
|
+
* Those three live in a single union member with a literal-union `type`
|
|
6
|
+
* field, so `Extract<RelationDefinition, { type: 'belongsTo' }>` evaluates
|
|
7
|
+
* to `never` (the wider literal union doesn't extend the narrower one). We
|
|
8
|
+
* model the merged variant explicitly and runtime-check `type === 'belongsTo'`.
|
|
9
|
+
*/
|
|
10
|
+
export type HasOrBelongsToDef = Exclude<RelationDefinition, {
|
|
11
|
+
type: 'belongsToMany' | 'morphMany' | 'morphOne' | 'morphTo' | 'morphToMany' | 'morphedByMany';
|
|
12
|
+
}>;
|
|
13
|
+
/**
|
|
14
|
+
* Run the constrain callback against a recording-only QueryBuilder that
|
|
15
|
+
* captures `.where()` calls into a flat `WhereClause[]` and treats every
|
|
16
|
+
* other chainable method as a no-op. Nested `whereHas` inside the callback
|
|
17
|
+
* throws — recursive predicates are deferred to v2.
|
|
18
|
+
*/
|
|
19
|
+
export declare function captureConstraintWheres(constrain: (q: QueryBuilder<Model>) => void): WhereClause[];
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the `belongsTo` relation declaration on `Self` that points at
|
|
22
|
+
* `ParentCtor`. When `relation` is given, looks it up directly. Otherwise
|
|
23
|
+
* scans `Self.relations` for a single `belongsTo` whose `model()` resolves
|
|
24
|
+
* to `ParentCtor` — throws on zero or multiple candidates.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveBelongsToFor(Self: typeof Model, ParentCtor: typeof Model, relation?: string): HasOrBelongsToDef;
|
|
27
|
+
/**
|
|
28
|
+
* Build the {@link RelationExistencePredicate} for a relation declared on
|
|
29
|
+
* `Parent`. `morphTo` is rejected before reaching this function (the related
|
|
30
|
+
* table is dynamic).
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildRelationPredicate(Parent: typeof Model, relation: string, def: Exclude<RelationDefinition, {
|
|
33
|
+
type: 'morphTo';
|
|
34
|
+
}>, exists: boolean, constraintWheres: WhereClause[]): RelationExistencePredicate;
|
|
35
|
+
/**
|
|
36
|
+
* Build the predicate for a relation declared on `Parent` and dispatch it to
|
|
37
|
+
* the adapter via `q.whereRelationExists(predicate)`. Returns the same
|
|
38
|
+
* QueryBuilder for chaining (the adapter mutates in place).
|
|
39
|
+
*
|
|
40
|
+
* `morphTo` throws — the related table isn't statically known so a single
|
|
41
|
+
* EXISTS subquery can't represent it. Filter on the discriminator + id
|
|
42
|
+
* columns directly when you need that semantic.
|
|
43
|
+
*/
|
|
44
|
+
export declare function attachWhereHas<TQ>(Parent: typeof Model, q: QueryBuilder<TQ>, relation: string, exists: boolean, constrain?: (q: QueryBuilder<Model>) => void): QueryBuilder<TQ>;
|
|
45
|
+
/**
|
|
46
|
+
* `withWhereHas` — run `whereHas` AND eager-load the relation under the
|
|
47
|
+
* same constraint when the adapter implements `withConstrained`. Adapters
|
|
48
|
+
* without it fall back to plain `with(relation)` (constraint applies only
|
|
49
|
+
* to the parent filter, not the eagerly loaded children).
|
|
50
|
+
*/
|
|
51
|
+
export declare function attachWithWhereHas<TQ>(Parent: typeof Model, q: QueryBuilder<TQ>, relation: string, constrain?: (q: QueryBuilder<Model>) => void): QueryBuilder<TQ>;
|
|
52
|
+
export declare function attachWhereBelongsTo<TQ>(Self: typeof Model, q: QueryBuilder<TQ>, parent: Model, relation?: string): QueryBuilder<TQ>;
|
|
53
|
+
//# sourceMappingURL=where-has.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where-has.d.ts","sourceRoot":"","sources":["../../src/relations/where-has.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,WAAW,EAEZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAQ5D;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC,kBAAkB,EAClB;IAAE,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,eAAe,CAAA;CAAE,CACnG,CAAA;AAID;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,GAC1C,WAAW,EAAE,CA2Cf;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAQ,OAAO,KAAK,EACxB,UAAU,EAAE,OAAO,KAAK,EACxB,QAAQ,CAAC,EAAG,MAAM,GACjB,iBAAiB,CA6BnB;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAY,OAAO,KAAK,EAC9B,QAAQ,EAAU,MAAM,EACxB,GAAG,EAAe,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,EAClE,MAAM,EAAY,OAAO,EACzB,gBAAgB,EAAE,WAAW,EAAE,GAC9B,0BAA0B,CAgG5B;AAID;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAC/B,MAAM,EAAK,OAAO,KAAK,EACvB,CAAC,EAAU,YAAY,CAAC,EAAE,CAAC,EAC3B,QAAQ,EAAG,MAAM,EACjB,MAAM,EAAK,OAAO,EAClB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,GAC3C,YAAY,CAAC,EAAE,CAAC,CAelB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EACnC,MAAM,EAAK,OAAO,KAAK,EACvB,CAAC,EAAU,YAAY,CAAC,EAAE,CAAC,EAC3B,QAAQ,EAAG,MAAM,EACjB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,GAC3C,YAAY,CAAC,EAAE,CAAC,CAalB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EACrC,IAAI,EAAO,OAAO,KAAK,EACvB,CAAC,EAAU,YAAY,CAAC,EAAE,CAAC,EAC3B,MAAM,EAAK,KAAK,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,YAAY,CAAC,EAAE,CAAC,CAalB"}
|