@rudderjs/orm 1.9.0 → 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.
Files changed (36) hide show
  1. package/README.md +53 -0
  2. package/boost/skills/orm-models/SKILL.md +24 -251
  3. package/boost/skills/orm-models/rules/crud-and-observers.md +130 -0
  4. package/boost/skills/orm-models/rules/defining-models.md +137 -0
  5. package/boost/skills/orm-models/rules/factories.md +73 -0
  6. package/boost/skills/orm-models/rules/querying.md +117 -0
  7. package/boost/skills/orm-models/rules/resources.md +111 -0
  8. package/dist/aggregate.d.ts +16 -7
  9. package/dist/aggregate.d.ts.map +1 -1
  10. package/dist/aggregate.js +27 -29
  11. package/dist/aggregate.js.map +1 -1
  12. package/dist/index.d.ts +41 -124
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +55 -892
  15. package/dist/index.js.map +1 -1
  16. package/dist/relations/pivot-accessors.d.ts +127 -0
  17. package/dist/relations/pivot-accessors.d.ts.map +1 -0
  18. package/dist/relations/pivot-accessors.js +211 -0
  19. package/dist/relations/pivot-accessors.js.map +1 -0
  20. package/dist/relations/pivot-deferred.d.ts +13 -0
  21. package/dist/relations/pivot-deferred.d.ts.map +1 -0
  22. package/dist/relations/pivot-deferred.js +210 -0
  23. package/dist/relations/pivot-deferred.js.map +1 -0
  24. package/dist/relations/pivot-meta.d.ts +50 -0
  25. package/dist/relations/pivot-meta.d.ts.map +1 -0
  26. package/dist/relations/pivot-meta.js +34 -0
  27. package/dist/relations/pivot-meta.js.map +1 -0
  28. package/dist/relations/where-has.d.ts +53 -0
  29. package/dist/relations/where-has.d.ts.map +1 -0
  30. package/dist/relations/where-has.js +239 -0
  31. package/dist/relations/where-has.js.map +1 -0
  32. package/dist/utils.d.ts +35 -0
  33. package/dist/utils.d.ts.map +1 -0
  34. package/dist/utils.js +63 -0
  35. package/dist/utils.js.map +1 -0
  36. 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"}