@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/README.md
CHANGED
|
@@ -441,6 +441,96 @@ const user = await service.get(id, {
|
|
|
441
441
|
// user.teams → TeamRow[]
|
|
442
442
|
```
|
|
443
443
|
|
|
444
|
+
#### FK joins vs PK joins
|
|
445
|
+
|
|
446
|
+
By default, a direct (`kind: 'one'`) join uses `localPk` on the base table in the
|
|
447
|
+
`ON` clause (`base.localPk = remote.pk`) — the classic `users.id = profiles.user_id`
|
|
448
|
+
pattern when `remote.pk` is the FK column.
|
|
449
|
+
|
|
450
|
+
When the FK lives on the **base** table instead (e.g.
|
|
451
|
+
`integrated_account.environment_integration_id → environment_integration.id`),
|
|
452
|
+
use `localColumn`:
|
|
453
|
+
|
|
454
|
+
```typescript
|
|
455
|
+
environment_integration: {
|
|
456
|
+
kind: 'one' as const,
|
|
457
|
+
localColumn: 'environment_integration_id', // FK on base table
|
|
458
|
+
remote: {
|
|
459
|
+
table: 'environment_integration',
|
|
460
|
+
pk: 'id',
|
|
461
|
+
select: ['id', 'environment_id', 'integration_id'],
|
|
462
|
+
},
|
|
463
|
+
schema: EnvironmentIntegrationSchema,
|
|
464
|
+
}
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
`localPk` remains supported for existing join configs.
|
|
468
|
+
|
|
469
|
+
#### Chained (multi-hop) joins
|
|
470
|
+
|
|
471
|
+
Nest `joins` inside a `JoinDef` to traverse multiple tables in one query:
|
|
472
|
+
|
|
473
|
+
```typescript
|
|
474
|
+
include: {
|
|
475
|
+
environment_integration: {
|
|
476
|
+
integration: true,
|
|
477
|
+
},
|
|
478
|
+
}
|
|
479
|
+
// → row.environment_integration.integration
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
#### Top-level `expose`
|
|
483
|
+
|
|
484
|
+
Project joined columns onto the row root (e.g. for wire-compat APIs):
|
|
485
|
+
|
|
486
|
+
```typescript
|
|
487
|
+
createService({
|
|
488
|
+
// ...
|
|
489
|
+
expose: [
|
|
490
|
+
{ from: '$environment_integration.environment_id', as: 'environment_id' },
|
|
491
|
+
],
|
|
492
|
+
})
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
#### Join-aware filters, sort, and count
|
|
496
|
+
|
|
497
|
+
Filter, sort, and count on joined or exposed columns:
|
|
498
|
+
|
|
499
|
+
```typescript
|
|
500
|
+
await service.list({
|
|
501
|
+
auth,
|
|
502
|
+
where: { environment_id: { in: ['env-1'] } },
|
|
503
|
+
orderBy: [{ column: '$integration.name', direction: 'asc' }],
|
|
504
|
+
include: { environment_integration: { integration: true } },
|
|
505
|
+
})
|
|
506
|
+
|
|
507
|
+
await service.count({
|
|
508
|
+
auth,
|
|
509
|
+
where: { environment_id: 'env-1' },
|
|
510
|
+
include: { environment_integration: true },
|
|
511
|
+
})
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
Use `$table` alias blocks in `where` for explicit qualification. Expose aliases
|
|
515
|
+
(e.g. `environment_id`) are translated automatically.
|
|
516
|
+
|
|
517
|
+
#### List vs detail projections
|
|
518
|
+
|
|
519
|
+
Override joined columns per call via nested `include.select`:
|
|
520
|
+
|
|
521
|
+
```typescript
|
|
522
|
+
// list — stripped integration
|
|
523
|
+
include: {
|
|
524
|
+
environment_integration: {
|
|
525
|
+
select: ['id', 'environment_id'],
|
|
526
|
+
integration: { select: ['id', 'name'] },
|
|
527
|
+
},
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
// detail — full configured columns
|
|
531
|
+
include: { environment_integration: { integration: true } }
|
|
532
|
+
```
|
|
533
|
+
|
|
444
534
|
### Field selection
|
|
445
535
|
|
|
446
536
|
Limit the columns returned by `list` / `get` / `create` / `update` with a flat
|
|
@@ -751,7 +841,7 @@ CREATE TABLE profiles (
|
|
|
751
841
|
- A supported SQLite backend: Cloudflare D1, `bun:sqlite`, or Durable Object `SqlStorage`
|
|
752
842
|
- TypeScript 5.0+
|
|
753
843
|
- Zod 3.25+ (v4)
|
|
754
|
-
- @truto/sqlite-builder
|
|
844
|
+
- @truto/sqlite-builder 2.0+
|
|
755
845
|
|
|
756
846
|
## Development
|
|
757
847
|
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - Safe SQL generation
|
|
13
13
|
*/
|
|
14
14
|
export { Service } from './service.js';
|
|
15
|
-
export type { AuthContext, BaseCtx, BaseService, ComputeJoins, CountParams, CreateParams, CursorToken, Database, ExecResult, PreparedStatement, QueryResult, DeleteParams, ErrorCtx, GetParams, Hook, HookMap, HookPhase, JoinDef, JoinKind, KeyProvider, ListParams, ListResult, MethodName, MethodOptions, OrderBy, OrderDirection, QueryParams, SecretFieldDef, SelectedRow, SelectField, ServiceCreate, ServiceDeps, ServiceOptions, ServiceRow, TimestampConfig, ServiceUpdate, UpdateParams, } from './types.js';
|
|
15
|
+
export type { AuthContext, BaseCtx, BaseService, ComputeExposed, ComputeJoins, CountParams, CreateParams, CursorToken, Database, ExecResult, ExposeDef, PreparedStatement, QueryResult, DeleteParams, ErrorCtx, GetParams, Hook, HookMap, HookPhase, IncludeMap, IncludeNode, IncludeSpec, JoinDef, JoinKind, KeyProvider, ListParams, ListResult, MethodName, MethodOptions, OrderBy, OrderDirection, QueryParams, SecretFieldDef, SelectedRow, SelectField, ServiceCreate, ServiceDeps, ServiceOptions, ServiceRow, TimestampConfig, ServiceUpdate, UpdateParams, } from './types.js';
|
|
16
16
|
export { AuthError, CursorError, DatabaseError, DependencyError, EncryptionError, HookError, NotFoundError, ServiceError, SqlBuilderError, ValidationError, } from './errors.js';
|
|
17
17
|
export { decrypt, decryptSecrets, DefaultKeyProvider, encrypt, encryptSecrets, generateSecretKey, getSecretColumns, getSecretLogicalNames, } from './crypto.js';
|
|
18
18
|
export { buildCursorConditions, createCursor, decodeCursor, encodeCursor, getDefaultOrderBy, reverseOrderBy, validateOrderBy, } from './pagination.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,YAAY,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EAEX,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,OAAO,EACP,SAAS,EAET,OAAO,EACP,QAAQ,EACR,WAAW,EAEX,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,OAAO,EACP,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EAEd,UAAU,EACV,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC7E,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,SAAS,OAAO,QAAQ,EAAE,UAAU,EACxC,OAAO,SAAS,OAAO,QAAQ,EAAE,UAAU,EAC3C,OAAO,SAAS,OAAO,QAAQ,EAAE,UAAU,EAC3C,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,OAAO,CAAC,GAAG,MAAM,CAClE,MAAM,EACN,KAAK,CACN,EACD,QAAQ,SACJ,SAAS,OAAO,YAAY,EAAE,cAAc,EAAE,GAC9C,SAAS,GAAG,SAAS,EAEzB,OAAO,EAAE,OAAO,YAAY,EAAE,cAAc,CAC1C,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,CACT,GACA,OAAO,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAE1E;;;;AAGD,wBAEC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,YAAY,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EAEX,QAAQ,EACR,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,OAAO,EACP,SAAS,EAET,UAAU,EACV,WAAW,EACX,WAAW,EACX,OAAO,EACP,QAAQ,EACR,WAAW,EAEX,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,OAAO,EACP,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EAEd,UAAU,EACV,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC7E,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,SAAS,OAAO,QAAQ,EAAE,UAAU,EACxC,OAAO,SAAS,OAAO,QAAQ,EAAE,UAAU,EAC3C,OAAO,SAAS,OAAO,QAAQ,EAAE,UAAU,EAC3C,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,OAAO,CAAC,GAAG,MAAM,CAClE,MAAM,EACN,KAAK,CACN,EACD,QAAQ,SACJ,SAAS,OAAO,YAAY,EAAE,cAAc,EAAE,GAC9C,SAAS,GAAG,SAAS,EAEzB,OAAO,EAAE,OAAO,YAAY,EAAE,cAAc,CAC1C,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,CACT,GACA,OAAO,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAE1E;;;;AAGD,wBAEC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,qBAAqB;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,qBAAqB;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAoDtC,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAA;AAEpB,uBAAuB;AACvB,OAAO,EACL,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,aAAa,CAAA;AAEpB,uBAAuB;AACvB,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAExB,wBAAwB;AACxB,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,kBAAkB,CAAA;AAEzB,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAQ7E,mCAAmC;AACnC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,aAAa,CAY3B,OAMC;IAED,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC;AAED,iCAAiC;AACjC,eAAe;IACb,aAAa;CACd,CAAA"}
|
package/dist/joins.d.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { sql } from '@truto/sqlite-builder';
|
|
2
|
+
import type { ExposeDef, IncludeMap, JoinDef, OrderBy } from './types.js';
|
|
3
|
+
/** True when `key` must not be used for dynamic assignment on a plain object. */
|
|
4
|
+
export declare function isUnsafeObjectKey(key: string): boolean;
|
|
5
|
+
/** Normalized include tree node after parsing boolean / object include specs. */
|
|
6
|
+
export interface NormalizedIncludeNode {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
select?: string[] | undefined;
|
|
9
|
+
children: Record<string, NormalizedIncludeNode>;
|
|
10
|
+
}
|
|
11
|
+
/** A single join edge resolved from the include tree, in dependency order. */
|
|
12
|
+
export interface ResolvedJoin {
|
|
13
|
+
/** Dot-separated path, e.g. `environment_integration.integration`. */
|
|
14
|
+
path: string;
|
|
15
|
+
/** Key in the parent joins map. */
|
|
16
|
+
name: string;
|
|
17
|
+
joinDef: JoinDef;
|
|
18
|
+
parentTable: string;
|
|
19
|
+
localColumn: string;
|
|
20
|
+
sqlTable: string;
|
|
21
|
+
/** Prefix for flat SQL column aliases (`${columnPrefix}_${col}` by default). */
|
|
22
|
+
columnPrefix: string;
|
|
23
|
+
select: string[];
|
|
24
|
+
/** Collision-safe flat SQL alias per selected column (assigned after resolve). */
|
|
25
|
+
columnAliases: Record<string, string>;
|
|
26
|
+
}
|
|
27
|
+
export declare function getLocalJoinColumn(joinDef: JoinDef): string;
|
|
28
|
+
/**
|
|
29
|
+
* Parse an include map into a normalized tree. `true` enables a join with
|
|
30
|
+
* default columns; an object enables the join when it has `select` and/or
|
|
31
|
+
* nested children.
|
|
32
|
+
*/
|
|
33
|
+
export declare function normalizeInclude(include: IncludeMap | undefined): Record<string, NormalizedIncludeNode>;
|
|
34
|
+
/**
|
|
35
|
+
* Flatten the include tree into an ordered list of joins (parents before
|
|
36
|
+
* children). Also auto-includes joins required by `expose` paths.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveActiveJoins(rootJoins: Record<string, JoinDef> | undefined, include: Record<string, NormalizedIncludeNode>, expose: readonly ExposeDef[] | undefined, baseTable: string, joinColumnOverrides?: Record<string, string[]>, reservedColumnNames?: readonly string[]): ResolvedJoin[];
|
|
39
|
+
/** Parse `$join.path.column` or `$table.column` qualified paths. */
|
|
40
|
+
export declare function parseQualifiedPath(qualified: string): {
|
|
41
|
+
joinPath: string;
|
|
42
|
+
column: string;
|
|
43
|
+
isTableQualified: boolean;
|
|
44
|
+
};
|
|
45
|
+
/** Build LEFT JOIN fragments for all resolved joins in order. */
|
|
46
|
+
export declare function buildJoinFragments(resolved: ResolvedJoin[]): ReturnType<typeof sql>[];
|
|
47
|
+
/** Legacy flat SQL alias (`prefix_col`) — default for join columns. */
|
|
48
|
+
export declare function legacyJoinColumnAlias(columnPrefix: string, column: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Assign collision-safe flat SQL aliases on each resolved join.
|
|
51
|
+
*
|
|
52
|
+
* Uses the legacy `prefix_col` form unless that name is already taken by a
|
|
53
|
+
* base-table column, an expose alias, or another join column — then falls
|
|
54
|
+
* back to `prefix__col`.
|
|
55
|
+
*/
|
|
56
|
+
export declare function assignJoinColumnAliases(resolved: ResolvedJoin[], reserved: ReadonlySet<string>): void;
|
|
57
|
+
/** Flat SQL alias for a column on a resolved join. */
|
|
58
|
+
export declare function flatAliasForJoinColumn(join: ResolvedJoin, column: string): string;
|
|
59
|
+
/** SELECT column fragments for resolved joins. */
|
|
60
|
+
export declare function buildJoinSelectColumns(resolved: ResolvedJoin[]): ReturnType<typeof sql>[];
|
|
61
|
+
/** SELECT fragments for exposed top-level columns. */
|
|
62
|
+
export declare function buildExposeSelectColumns(expose: readonly ExposeDef[], resolved: ResolvedJoin[], _baseTable: string): ReturnType<typeof sql>[];
|
|
63
|
+
/**
|
|
64
|
+
* Map of SQL table name → join path for compileFilter `$alias` blocks.
|
|
65
|
+
* Also maps expose aliases to their source table.
|
|
66
|
+
*/
|
|
67
|
+
export declare function buildJoinFilterContext(resolved: ResolvedJoin[], expose: readonly ExposeDef[] | undefined, baseTable: string): {
|
|
68
|
+
tableToPath: Map<string, string>;
|
|
69
|
+
exposeColumns: Map<string, {
|
|
70
|
+
table: string;
|
|
71
|
+
column: string;
|
|
72
|
+
}>;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Rewrite a where filter so expose aliases and join-table columns compile
|
|
76
|
+
* correctly when joins are active.
|
|
77
|
+
*/
|
|
78
|
+
export declare function translateWhereForJoins(where: Record<string, unknown>, baseTable: string, resolved: ResolvedJoin[], expose: readonly ExposeDef[] | undefined): Record<string, unknown>;
|
|
79
|
+
/** Resolve an orderBy column to a SQL identifier string (`table.col`). */
|
|
80
|
+
export declare function resolveOrderByColumn(column: string, baseTable: string, resolved: ResolvedJoin[], expose?: readonly ExposeDef[]): string;
|
|
81
|
+
/** Flat row key used for cursor pagination values. */
|
|
82
|
+
export declare function flatColumnKeyForOrderBy(column: string, _baseTable: string, resolved: ResolvedJoin[], expose: readonly ExposeDef[] | undefined): string;
|
|
83
|
+
/**
|
|
84
|
+
* Nest flat join columns into the include tree shape. Only nests joins present
|
|
85
|
+
* in `include`; expose columns remain at the top level.
|
|
86
|
+
*/
|
|
87
|
+
export declare function nestJoinedData(row: Record<string, unknown>, rootJoins: Record<string, JoinDef>, include: Record<string, NormalizedIncludeNode>, resolved: ResolvedJoin[]): Record<string, unknown>;
|
|
88
|
+
/** Whether include tree has any enabled joins. */
|
|
89
|
+
export declare function hasActiveIncludes(include: Record<string, NormalizedIncludeNode>): boolean;
|
|
90
|
+
/** Expand include for API compat: boolean map for top-level only. */
|
|
91
|
+
export declare function topLevelIncludeFlags(include: Record<string, NormalizedIncludeNode>): Record<string, boolean>;
|
|
92
|
+
export declare function validateOrderByWithJoins(orderBy: OrderBy[], baseColumns: string[], _resolved: ResolvedJoin[], expose: readonly ExposeDef[] | undefined, _baseTable: string): void;
|
|
93
|
+
//# sourceMappingURL=joins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joins.d.ts","sourceRoot":"","sources":["../src/joins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAKzE,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEtD;AAYD,iFAAiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;CAChD;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,kFAAkF;IAClF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAQ3D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,UAAU,GAAG,SAAS,GAC9B,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAUvC;AA6BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC9C,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EACxC,SAAS,EAAE,MAAM,EACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC9C,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,GACtC,YAAY,EAAE,CAqEhB;AAmFD,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG;IACrD,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,OAAO,CAAA;CAC1B,CAgBA;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EAAE,GACvB,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,CA0B1B;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,EAAE,EACxB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,IAAI,CAYN;AAED,sDAAsD;AACtD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAKR;AAED,kDAAkD;AAClD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,YAAY,EAAE,GACvB,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,CAU1B;AAED,sDAAsD;AACtD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,QAAQ,EAAE,YAAY,EAAE,EACxB,UAAU,EAAE,MAAM,GACjB,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,CAsB1B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EACxC,SAAS,EAAE,MAAM,GAChB;IACD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC9D,CAyBA;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkGzB;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,GAC5B,MAAM,CAkCR;AAED,sDAAsD;AACtD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,GACvC,MAAM,CAcR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC9C,QAAQ,EAAE,YAAY,EAAE,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuDzB;AAED,kDAAkD;AAClD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAC7C,OAAO,CAET;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAC7C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAAE,EAClB,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,YAAY,EAAE,EACzB,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EACxC,UAAU,EAAE,MAAM,GACjB,IAAI,CAaN"}
|