@atscript/db 0.1.60 → 0.1.62
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/{db-readable-CKQHMqVH.d.cts → db-readable-D3bZPucw.d.cts} +25 -1
- package/dist/{db-readable-CkeVx10t.d.mts → db-readable-Dj9to0bC.d.mts} +25 -1
- package/dist/{db-space-BAfXlRiV.d.mts → db-space-CK11BW4j.d.cts} +2 -2
- package/dist/{db-space-Dycn4usM.d.cts → db-space-Dy4GqZrK.d.mts} +2 -2
- package/dist/{db-view-CuPkKCnU.cjs → db-view-Jj46sTBk.cjs} +65 -55
- package/dist/{db-view-cBN0YqrV.mjs → db-view-T2BrLhwh.mjs} +65 -55
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/rel.d.cts +1 -1
- package/dist/rel.d.mts +1 -1
- package/dist/sync.cjs +1 -1
- package/dist/sync.d.cts +2 -2
- package/dist/sync.d.mts +2 -2
- package/dist/sync.mjs +1 -1
- package/package.json +1 -1
|
@@ -163,6 +163,15 @@ declare class TableMetadata {
|
|
|
163
163
|
* (when present) followed by every unique index. Must run BEFORE
|
|
164
164
|
* `_finalizeIndexes` rewrites `index.fields[i].name` from logical to
|
|
165
165
|
* physical, so the field lists stay logical.
|
|
166
|
+
*
|
|
167
|
+
* Sources:
|
|
168
|
+
* - `this.primaryKeys` — composite-aware PK (one identification covering
|
|
169
|
+
* the PK columns).
|
|
170
|
+
* - `this.indexes` — user-declared `@db.index.unique` (single or compound).
|
|
171
|
+
* - `this.uniqueProps` — single-field uniques contributed by adapter
|
|
172
|
+
* overrides (`addUniqueFields`); these aren't reflected in
|
|
173
|
+
* `this.indexes` but still legitimate addressing identifications.
|
|
174
|
+
* Deduped against any single-field unique index already captured.
|
|
166
175
|
*/
|
|
167
176
|
private _buildIdentifications;
|
|
168
177
|
/** Legitimate row-identifier shapes — primary key first, then each unique index. */
|
|
@@ -286,6 +295,14 @@ interface TDbActionInfo {
|
|
|
286
295
|
* a UI hint.
|
|
287
296
|
*/
|
|
288
297
|
disabled?: string;
|
|
298
|
+
/**
|
|
299
|
+
* Name of the `.as` interface the action's `@InputForm()` parameter expects
|
|
300
|
+
* (the compiled class's `.name`). Present only when the handler declares an
|
|
301
|
+
* `@InputForm(FormType)` parameter. Clients fetch the serialized schema via
|
|
302
|
+
* `GET /meta/form/:name` on the same controller and render a form to
|
|
303
|
+
* collect the `input` field of the action's request envelope.
|
|
304
|
+
*/
|
|
305
|
+
inputForm?: string;
|
|
289
306
|
}
|
|
290
307
|
interface TDbInsertResult {
|
|
291
308
|
insertedId: unknown;
|
|
@@ -1358,9 +1375,16 @@ declare class AtscriptDbReadable<T extends TAtscriptAnnotatedType = TAtscriptAnn
|
|
|
1358
1375
|
controls?: UniqueryControls<OwnProps, NavType>;
|
|
1359
1376
|
} = Record<string, never>>(id: IdType, query?: Q): Promise<DbResponse<DataType, NavType, Q> | null>;
|
|
1360
1377
|
/**
|
|
1361
|
-
*
|
|
1378
|
+
* Resolve an id value into a filter expression.
|
|
1379
|
+
*
|
|
1380
|
+
* When `preferredId` differs from the PK, scalar ids resolve only against
|
|
1381
|
+
* the preferred field (deterministic addressing). Otherwise scalars try PK
|
|
1382
|
+
* + every single-field unique index; objects try PK + compound unique
|
|
1383
|
+
* indexes.
|
|
1362
1384
|
*/
|
|
1363
1385
|
protected _resolveIdFilter(id: unknown): FilterExpr | null;
|
|
1386
|
+
/** Build a single-key filter from `idObj` over `fields`, or null if any field is missing/incompatible. */
|
|
1387
|
+
private _tryCompoundFilter;
|
|
1364
1388
|
/**
|
|
1365
1389
|
* Attempts to build a single-field filter `{ field: preparedId }`.
|
|
1366
1390
|
*/
|
|
@@ -163,6 +163,15 @@ declare class TableMetadata {
|
|
|
163
163
|
* (when present) followed by every unique index. Must run BEFORE
|
|
164
164
|
* `_finalizeIndexes` rewrites `index.fields[i].name` from logical to
|
|
165
165
|
* physical, so the field lists stay logical.
|
|
166
|
+
*
|
|
167
|
+
* Sources:
|
|
168
|
+
* - `this.primaryKeys` — composite-aware PK (one identification covering
|
|
169
|
+
* the PK columns).
|
|
170
|
+
* - `this.indexes` — user-declared `@db.index.unique` (single or compound).
|
|
171
|
+
* - `this.uniqueProps` — single-field uniques contributed by adapter
|
|
172
|
+
* overrides (`addUniqueFields`); these aren't reflected in
|
|
173
|
+
* `this.indexes` but still legitimate addressing identifications.
|
|
174
|
+
* Deduped against any single-field unique index already captured.
|
|
166
175
|
*/
|
|
167
176
|
private _buildIdentifications;
|
|
168
177
|
/** Legitimate row-identifier shapes — primary key first, then each unique index. */
|
|
@@ -286,6 +295,14 @@ interface TDbActionInfo {
|
|
|
286
295
|
* a UI hint.
|
|
287
296
|
*/
|
|
288
297
|
disabled?: string;
|
|
298
|
+
/**
|
|
299
|
+
* Name of the `.as` interface the action's `@InputForm()` parameter expects
|
|
300
|
+
* (the compiled class's `.name`). Present only when the handler declares an
|
|
301
|
+
* `@InputForm(FormType)` parameter. Clients fetch the serialized schema via
|
|
302
|
+
* `GET /meta/form/:name` on the same controller and render a form to
|
|
303
|
+
* collect the `input` field of the action's request envelope.
|
|
304
|
+
*/
|
|
305
|
+
inputForm?: string;
|
|
289
306
|
}
|
|
290
307
|
interface TDbInsertResult {
|
|
291
308
|
insertedId: unknown;
|
|
@@ -1358,9 +1375,16 @@ declare class AtscriptDbReadable<T extends TAtscriptAnnotatedType = TAtscriptAnn
|
|
|
1358
1375
|
controls?: UniqueryControls<OwnProps, NavType>;
|
|
1359
1376
|
} = Record<string, never>>(id: IdType, query?: Q): Promise<DbResponse<DataType, NavType, Q> | null>;
|
|
1360
1377
|
/**
|
|
1361
|
-
*
|
|
1378
|
+
* Resolve an id value into a filter expression.
|
|
1379
|
+
*
|
|
1380
|
+
* When `preferredId` differs from the PK, scalar ids resolve only against
|
|
1381
|
+
* the preferred field (deterministic addressing). Otherwise scalars try PK
|
|
1382
|
+
* + every single-field unique index; objects try PK + compound unique
|
|
1383
|
+
* indexes.
|
|
1362
1384
|
*/
|
|
1363
1385
|
protected _resolveIdFilter(id: unknown): FilterExpr | null;
|
|
1386
|
+
/** Build a single-key filter from `idObj` over `fields`, or null if any field is missing/incompatible. */
|
|
1387
|
+
private _tryCompoundFilter;
|
|
1364
1388
|
/**
|
|
1365
1389
|
* Attempts to build a single-field filter `{ field: preparedId }`.
|
|
1366
1390
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { B as TDbInsertResult, J as TFkLookupResolver, N as TDbDeleteResult, W as TDbUpdateResult, dt as TableMetadata, it as TTableResolver, o as BaseDbAdapter, ot as TWriteTableResolver, pt as TGenericLogger, t as AtscriptDbReadable, x as TCascadeResolver, z as TDbInsertManyResult } from "./db-readable-
|
|
2
|
-
import { AtscriptQueryComparison, AtscriptQueryFieldRef, AtscriptQueryFieldRef as AtscriptQueryFieldRef$1, AtscriptQueryNode, AtscriptQueryNode as AtscriptQueryNode$1, AtscriptRef, FlatOf, NavPropsOf, OwnPropsOf, PrimaryKeyOf, TAtscriptAnnotatedType, TAtscriptDataType, Validator } from "@atscript/typescript/utils";
|
|
1
|
+
import { B as TDbInsertResult, J as TFkLookupResolver, N as TDbDeleteResult, W as TDbUpdateResult, dt as TableMetadata, it as TTableResolver, o as BaseDbAdapter, ot as TWriteTableResolver, pt as TGenericLogger, t as AtscriptDbReadable, x as TCascadeResolver, z as TDbInsertManyResult } from "./db-readable-D3bZPucw.cjs";
|
|
3
2
|
import { FilterExpr } from "@uniqu/core";
|
|
3
|
+
import { AtscriptQueryComparison, AtscriptQueryFieldRef, AtscriptQueryFieldRef as AtscriptQueryFieldRef$1, AtscriptQueryNode, AtscriptQueryNode as AtscriptQueryNode$1, AtscriptRef, FlatOf, NavPropsOf, OwnPropsOf, PrimaryKeyOf, TAtscriptAnnotatedType, TAtscriptDataType, Validator } from "@atscript/typescript/utils";
|
|
4
4
|
|
|
5
5
|
//#region src/strategies/integrity.d.ts
|
|
6
6
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { B as TDbInsertResult, J as TFkLookupResolver, N as TDbDeleteResult, W as TDbUpdateResult, dt as TableMetadata, it as TTableResolver, o as BaseDbAdapter, ot as TWriteTableResolver, pt as TGenericLogger, t as AtscriptDbReadable, x as TCascadeResolver, z as TDbInsertManyResult } from "./db-readable-
|
|
2
|
-
import { FilterExpr } from "@uniqu/core";
|
|
1
|
+
import { B as TDbInsertResult, J as TFkLookupResolver, N as TDbDeleteResult, W as TDbUpdateResult, dt as TableMetadata, it as TTableResolver, o as BaseDbAdapter, ot as TWriteTableResolver, pt as TGenericLogger, t as AtscriptDbReadable, x as TCascadeResolver, z as TDbInsertManyResult } from "./db-readable-Dj9to0bC.mjs";
|
|
3
2
|
import { AtscriptQueryComparison, AtscriptQueryFieldRef, AtscriptQueryFieldRef as AtscriptQueryFieldRef$1, AtscriptQueryNode, AtscriptQueryNode as AtscriptQueryNode$1, AtscriptRef, FlatOf, NavPropsOf, OwnPropsOf, PrimaryKeyOf, TAtscriptAnnotatedType, TAtscriptDataType, Validator } from "@atscript/typescript/utils";
|
|
3
|
+
import { FilterExpr } from "@uniqu/core";
|
|
4
4
|
|
|
5
5
|
//#region src/strategies/integrity.d.ts
|
|
6
6
|
/**
|
|
@@ -449,17 +449,39 @@ var TableMetadata = class {
|
|
|
449
449
|
* (when present) followed by every unique index. Must run BEFORE
|
|
450
450
|
* `_finalizeIndexes` rewrites `index.fields[i].name` from logical to
|
|
451
451
|
* physical, so the field lists stay logical.
|
|
452
|
+
*
|
|
453
|
+
* Sources:
|
|
454
|
+
* - `this.primaryKeys` — composite-aware PK (one identification covering
|
|
455
|
+
* the PK columns).
|
|
456
|
+
* - `this.indexes` — user-declared `@db.index.unique` (single or compound).
|
|
457
|
+
* - `this.uniqueProps` — single-field uniques contributed by adapter
|
|
458
|
+
* overrides (`addUniqueFields`); these aren't reflected in
|
|
459
|
+
* `this.indexes` but still legitimate addressing identifications.
|
|
460
|
+
* Deduped against any single-field unique index already captured.
|
|
452
461
|
*/
|
|
453
462
|
_buildIdentifications() {
|
|
454
463
|
const out = [];
|
|
464
|
+
const seenSingleFields = /* @__PURE__ */ new Set();
|
|
455
465
|
if (this.primaryKeys.length > 0) out.push({
|
|
456
466
|
fields: [...this.primaryKeys],
|
|
457
467
|
source: "primaryKey"
|
|
458
468
|
});
|
|
459
|
-
for (const index of this.indexes.values()) if (index.type === "unique")
|
|
460
|
-
fields
|
|
461
|
-
|
|
462
|
-
|
|
469
|
+
for (const index of this.indexes.values()) if (index.type === "unique") {
|
|
470
|
+
const fields = index.fields.map((field) => field.name);
|
|
471
|
+
out.push({
|
|
472
|
+
fields,
|
|
473
|
+
source: index.name
|
|
474
|
+
});
|
|
475
|
+
if (fields.length === 1) seenSingleFields.add(fields[0]);
|
|
476
|
+
}
|
|
477
|
+
for (const field of this.uniqueProps) {
|
|
478
|
+
if (seenSingleFields.has(field)) continue;
|
|
479
|
+
if (this.primaryKeys.length === 1 && this.primaryKeys[0] === field) continue;
|
|
480
|
+
out.push({
|
|
481
|
+
fields: [field],
|
|
482
|
+
source: `unique:${field}`
|
|
483
|
+
});
|
|
484
|
+
}
|
|
463
485
|
this._identifications = out;
|
|
464
486
|
}
|
|
465
487
|
/** Legitimate row-identifier shapes — primary key first, then each unique index. */
|
|
@@ -1508,68 +1530,56 @@ var AtscriptDbReadable = class {
|
|
|
1508
1530
|
});
|
|
1509
1531
|
}
|
|
1510
1532
|
/**
|
|
1511
|
-
*
|
|
1533
|
+
* Resolve an id value into a filter expression.
|
|
1534
|
+
*
|
|
1535
|
+
* When `preferredId` differs from the PK, scalar ids resolve only against
|
|
1536
|
+
* the preferred field (deterministic addressing). Otherwise scalars try PK
|
|
1537
|
+
* + every single-field unique index; objects try PK + compound unique
|
|
1538
|
+
* indexes.
|
|
1512
1539
|
*/
|
|
1513
1540
|
_resolveIdFilter(id) {
|
|
1514
|
-
const orFilters = [];
|
|
1515
1541
|
const pkFields = this.primaryKeys;
|
|
1516
|
-
|
|
1517
|
-
|
|
1542
|
+
const preferredFields = this.preferredId;
|
|
1543
|
+
const isExplicitPreferred = preferredFields.length !== pkFields.length || preferredFields.some((f, i) => f !== pkFields[i]);
|
|
1544
|
+
const isScalar = id === null || typeof id !== "object";
|
|
1545
|
+
if (isScalar && isExplicitPreferred && preferredFields.length === 1) return this._tryFieldFilter(preferredFields[0], id);
|
|
1546
|
+
const tryScalarOrField = (field) => {
|
|
1547
|
+
const value = isScalar ? id : id[field];
|
|
1548
|
+
return value === void 0 ? null : this._tryFieldFilter(field, value);
|
|
1549
|
+
};
|
|
1550
|
+
const orFilters = [];
|
|
1551
|
+
const idObj = isScalar ? null : id;
|
|
1552
|
+
for (const ident of this.identifications) {
|
|
1553
|
+
if (ident.fields.length !== 1) continue;
|
|
1554
|
+
const filter = tryScalarOrField(ident.fields[0]);
|
|
1518
1555
|
if (filter) orFilters.push(filter);
|
|
1519
|
-
} else if (pkFields.length > 1 && typeof id === "object" && id !== null) {
|
|
1520
|
-
const idObj = id;
|
|
1521
|
-
const compositeFilter = {};
|
|
1522
|
-
let valid = true;
|
|
1523
|
-
for (const field of pkFields) {
|
|
1524
|
-
const fieldType = this.flatMap.get(field);
|
|
1525
|
-
if (fieldType && !isIdCompatible(idObj[field], fieldType)) {
|
|
1526
|
-
valid = false;
|
|
1527
|
-
break;
|
|
1528
|
-
}
|
|
1529
|
-
try {
|
|
1530
|
-
compositeFilter[field] = fieldType ? this.adapter.prepareId(idObj[field], fieldType) : idObj[field];
|
|
1531
|
-
} catch {
|
|
1532
|
-
valid = false;
|
|
1533
|
-
break;
|
|
1534
|
-
}
|
|
1535
|
-
}
|
|
1536
|
-
if (valid) orFilters.push(compositeFilter);
|
|
1537
1556
|
}
|
|
1538
|
-
for (const
|
|
1539
|
-
|
|
1557
|
+
if (idObj) for (const ident of this.identifications) {
|
|
1558
|
+
if (ident.fields.length < 2) continue;
|
|
1559
|
+
if (ident.source !== "primaryKey" && orFilters.length > 0) break;
|
|
1560
|
+
const filter = this._tryCompoundFilter(ident.fields, idObj);
|
|
1540
1561
|
if (filter) orFilters.push(filter);
|
|
1541
1562
|
}
|
|
1542
|
-
if (typeof id === "object" && id !== null && orFilters.length === 0) {
|
|
1543
|
-
const idObj = id;
|
|
1544
|
-
for (const index of this._meta.indexes.values()) {
|
|
1545
|
-
if (index.type !== "unique" || index.fields.length < 2) continue;
|
|
1546
|
-
const compoundFilter = {};
|
|
1547
|
-
let valid = true;
|
|
1548
|
-
for (const indexField of index.fields) {
|
|
1549
|
-
const fieldName = indexField.name;
|
|
1550
|
-
if (idObj[fieldName] === void 0) {
|
|
1551
|
-
valid = false;
|
|
1552
|
-
break;
|
|
1553
|
-
}
|
|
1554
|
-
const fieldType = this.flatMap.get(fieldName);
|
|
1555
|
-
if (fieldType && !isIdCompatible(idObj[fieldName], fieldType)) {
|
|
1556
|
-
valid = false;
|
|
1557
|
-
break;
|
|
1558
|
-
}
|
|
1559
|
-
try {
|
|
1560
|
-
compoundFilter[fieldName] = fieldType ? this.adapter.prepareId(idObj[fieldName], fieldType) : idObj[fieldName];
|
|
1561
|
-
} catch {
|
|
1562
|
-
valid = false;
|
|
1563
|
-
break;
|
|
1564
|
-
}
|
|
1565
|
-
}
|
|
1566
|
-
if (valid) orFilters.push(compoundFilter);
|
|
1567
|
-
}
|
|
1568
|
-
}
|
|
1569
1563
|
if (orFilters.length === 0) return null;
|
|
1570
1564
|
if (orFilters.length === 1) return orFilters[0];
|
|
1571
1565
|
return { $or: orFilters };
|
|
1572
1566
|
}
|
|
1567
|
+
/** Build a single-key filter from `idObj` over `fields`, or null if any field is missing/incompatible. */
|
|
1568
|
+
_tryCompoundFilter(fields, idObj) {
|
|
1569
|
+
const filter = {};
|
|
1570
|
+
for (const field of fields) {
|
|
1571
|
+
const value = idObj[field];
|
|
1572
|
+
if (value === void 0) return null;
|
|
1573
|
+
const fieldType = this.flatMap.get(field);
|
|
1574
|
+
if (fieldType && !isIdCompatible(value, fieldType)) return null;
|
|
1575
|
+
try {
|
|
1576
|
+
filter[field] = fieldType ? this.adapter.prepareId(value, fieldType) : value;
|
|
1577
|
+
} catch {
|
|
1578
|
+
return null;
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
return filter;
|
|
1582
|
+
}
|
|
1573
1583
|
/**
|
|
1574
1584
|
* Attempts to build a single-field filter `{ field: preparedId }`.
|
|
1575
1585
|
*/
|
|
@@ -449,17 +449,39 @@ var TableMetadata = class {
|
|
|
449
449
|
* (when present) followed by every unique index. Must run BEFORE
|
|
450
450
|
* `_finalizeIndexes` rewrites `index.fields[i].name` from logical to
|
|
451
451
|
* physical, so the field lists stay logical.
|
|
452
|
+
*
|
|
453
|
+
* Sources:
|
|
454
|
+
* - `this.primaryKeys` — composite-aware PK (one identification covering
|
|
455
|
+
* the PK columns).
|
|
456
|
+
* - `this.indexes` — user-declared `@db.index.unique` (single or compound).
|
|
457
|
+
* - `this.uniqueProps` — single-field uniques contributed by adapter
|
|
458
|
+
* overrides (`addUniqueFields`); these aren't reflected in
|
|
459
|
+
* `this.indexes` but still legitimate addressing identifications.
|
|
460
|
+
* Deduped against any single-field unique index already captured.
|
|
452
461
|
*/
|
|
453
462
|
_buildIdentifications() {
|
|
454
463
|
const out = [];
|
|
464
|
+
const seenSingleFields = /* @__PURE__ */ new Set();
|
|
455
465
|
if (this.primaryKeys.length > 0) out.push({
|
|
456
466
|
fields: [...this.primaryKeys],
|
|
457
467
|
source: "primaryKey"
|
|
458
468
|
});
|
|
459
|
-
for (const index of this.indexes.values()) if (index.type === "unique")
|
|
460
|
-
fields
|
|
461
|
-
|
|
462
|
-
|
|
469
|
+
for (const index of this.indexes.values()) if (index.type === "unique") {
|
|
470
|
+
const fields = index.fields.map((field) => field.name);
|
|
471
|
+
out.push({
|
|
472
|
+
fields,
|
|
473
|
+
source: index.name
|
|
474
|
+
});
|
|
475
|
+
if (fields.length === 1) seenSingleFields.add(fields[0]);
|
|
476
|
+
}
|
|
477
|
+
for (const field of this.uniqueProps) {
|
|
478
|
+
if (seenSingleFields.has(field)) continue;
|
|
479
|
+
if (this.primaryKeys.length === 1 && this.primaryKeys[0] === field) continue;
|
|
480
|
+
out.push({
|
|
481
|
+
fields: [field],
|
|
482
|
+
source: `unique:${field}`
|
|
483
|
+
});
|
|
484
|
+
}
|
|
463
485
|
this._identifications = out;
|
|
464
486
|
}
|
|
465
487
|
/** Legitimate row-identifier shapes — primary key first, then each unique index. */
|
|
@@ -1508,68 +1530,56 @@ var AtscriptDbReadable = class {
|
|
|
1508
1530
|
});
|
|
1509
1531
|
}
|
|
1510
1532
|
/**
|
|
1511
|
-
*
|
|
1533
|
+
* Resolve an id value into a filter expression.
|
|
1534
|
+
*
|
|
1535
|
+
* When `preferredId` differs from the PK, scalar ids resolve only against
|
|
1536
|
+
* the preferred field (deterministic addressing). Otherwise scalars try PK
|
|
1537
|
+
* + every single-field unique index; objects try PK + compound unique
|
|
1538
|
+
* indexes.
|
|
1512
1539
|
*/
|
|
1513
1540
|
_resolveIdFilter(id) {
|
|
1514
|
-
const orFilters = [];
|
|
1515
1541
|
const pkFields = this.primaryKeys;
|
|
1516
|
-
|
|
1517
|
-
|
|
1542
|
+
const preferredFields = this.preferredId;
|
|
1543
|
+
const isExplicitPreferred = preferredFields.length !== pkFields.length || preferredFields.some((f, i) => f !== pkFields[i]);
|
|
1544
|
+
const isScalar = id === null || typeof id !== "object";
|
|
1545
|
+
if (isScalar && isExplicitPreferred && preferredFields.length === 1) return this._tryFieldFilter(preferredFields[0], id);
|
|
1546
|
+
const tryScalarOrField = (field) => {
|
|
1547
|
+
const value = isScalar ? id : id[field];
|
|
1548
|
+
return value === void 0 ? null : this._tryFieldFilter(field, value);
|
|
1549
|
+
};
|
|
1550
|
+
const orFilters = [];
|
|
1551
|
+
const idObj = isScalar ? null : id;
|
|
1552
|
+
for (const ident of this.identifications) {
|
|
1553
|
+
if (ident.fields.length !== 1) continue;
|
|
1554
|
+
const filter = tryScalarOrField(ident.fields[0]);
|
|
1518
1555
|
if (filter) orFilters.push(filter);
|
|
1519
|
-
} else if (pkFields.length > 1 && typeof id === "object" && id !== null) {
|
|
1520
|
-
const idObj = id;
|
|
1521
|
-
const compositeFilter = {};
|
|
1522
|
-
let valid = true;
|
|
1523
|
-
for (const field of pkFields) {
|
|
1524
|
-
const fieldType = this.flatMap.get(field);
|
|
1525
|
-
if (fieldType && !isIdCompatible(idObj[field], fieldType)) {
|
|
1526
|
-
valid = false;
|
|
1527
|
-
break;
|
|
1528
|
-
}
|
|
1529
|
-
try {
|
|
1530
|
-
compositeFilter[field] = fieldType ? this.adapter.prepareId(idObj[field], fieldType) : idObj[field];
|
|
1531
|
-
} catch {
|
|
1532
|
-
valid = false;
|
|
1533
|
-
break;
|
|
1534
|
-
}
|
|
1535
|
-
}
|
|
1536
|
-
if (valid) orFilters.push(compositeFilter);
|
|
1537
1556
|
}
|
|
1538
|
-
for (const
|
|
1539
|
-
|
|
1557
|
+
if (idObj) for (const ident of this.identifications) {
|
|
1558
|
+
if (ident.fields.length < 2) continue;
|
|
1559
|
+
if (ident.source !== "primaryKey" && orFilters.length > 0) break;
|
|
1560
|
+
const filter = this._tryCompoundFilter(ident.fields, idObj);
|
|
1540
1561
|
if (filter) orFilters.push(filter);
|
|
1541
1562
|
}
|
|
1542
|
-
if (typeof id === "object" && id !== null && orFilters.length === 0) {
|
|
1543
|
-
const idObj = id;
|
|
1544
|
-
for (const index of this._meta.indexes.values()) {
|
|
1545
|
-
if (index.type !== "unique" || index.fields.length < 2) continue;
|
|
1546
|
-
const compoundFilter = {};
|
|
1547
|
-
let valid = true;
|
|
1548
|
-
for (const indexField of index.fields) {
|
|
1549
|
-
const fieldName = indexField.name;
|
|
1550
|
-
if (idObj[fieldName] === void 0) {
|
|
1551
|
-
valid = false;
|
|
1552
|
-
break;
|
|
1553
|
-
}
|
|
1554
|
-
const fieldType = this.flatMap.get(fieldName);
|
|
1555
|
-
if (fieldType && !isIdCompatible(idObj[fieldName], fieldType)) {
|
|
1556
|
-
valid = false;
|
|
1557
|
-
break;
|
|
1558
|
-
}
|
|
1559
|
-
try {
|
|
1560
|
-
compoundFilter[fieldName] = fieldType ? this.adapter.prepareId(idObj[fieldName], fieldType) : idObj[fieldName];
|
|
1561
|
-
} catch {
|
|
1562
|
-
valid = false;
|
|
1563
|
-
break;
|
|
1564
|
-
}
|
|
1565
|
-
}
|
|
1566
|
-
if (valid) orFilters.push(compoundFilter);
|
|
1567
|
-
}
|
|
1568
|
-
}
|
|
1569
1563
|
if (orFilters.length === 0) return null;
|
|
1570
1564
|
if (orFilters.length === 1) return orFilters[0];
|
|
1571
1565
|
return { $or: orFilters };
|
|
1572
1566
|
}
|
|
1567
|
+
/** Build a single-key filter from `idObj` over `fields`, or null if any field is missing/incompatible. */
|
|
1568
|
+
_tryCompoundFilter(fields, idObj) {
|
|
1569
|
+
const filter = {};
|
|
1570
|
+
for (const field of fields) {
|
|
1571
|
+
const value = idObj[field];
|
|
1572
|
+
if (value === void 0) return null;
|
|
1573
|
+
const fieldType = this.flatMap.get(field);
|
|
1574
|
+
if (fieldType && !isIdCompatible(value, fieldType)) return null;
|
|
1575
|
+
try {
|
|
1576
|
+
filter[field] = fieldType ? this.adapter.prepareId(value, fieldType) : value;
|
|
1577
|
+
} catch {
|
|
1578
|
+
return null;
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
return filter;
|
|
1582
|
+
}
|
|
1573
1583
|
/**
|
|
1574
1584
|
* Attempts to build a single-field filter `{ field: preparedId }`.
|
|
1575
1585
|
*/
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_db_error = require("./db-error-D8tQhNgM.cjs");
|
|
3
|
-
const require_db_view = require("./db-view-
|
|
3
|
+
const require_db_view = require("./db-view-Jj46sTBk.cjs");
|
|
4
4
|
const require_ops = require("./ops.cjs");
|
|
5
5
|
const require_validator = require("./validator-BIuw_T0k.cjs");
|
|
6
6
|
require("./nested-writer-v_LPR1yJ.cjs");
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as TMetadataOverrides, A as TDbCollation, B as TDbInsertResult, C as TColumnDiff, D as TDbActionIntent, E as TDbActionInfo, F as TDbForeignKey, G as TExistingColumn, H as TDbRelation, I as TDbIndex, J as TFkLookupResolver, K as TExistingTableOption, L as TDbIndexField, M as TDbDefaultValue, N as TDbDeleteResult, O as TDbActionLevel, P as TDbFieldMeta, Q as TMetaResponse, R as TDbIndexType, S as TCascadeTarget, T as TCrudPermissions, U as TDbStorageType, V as TDbReferentialAction, W as TDbUpdateResult, X as TIdDescriptor, Y as TFkLookupTarget, Z as TIdentification, _ as FlatOf, a as FieldMappingStrategy, at as TValueFormatterPair, b as PrimaryKeyOf, c as AggregateExpr, ct as Uniquery, d as AggregateResult, dt as TableMetadata, et as TRelationInfo, f as AtscriptDbWritable, ft as NoopLogger, g as FilterExpr, h as FieldOpsFor, i as DocumentFieldMapper, it as TTableResolver, j as TDbDefaultFn, k as TDbActionProcessor, l as AggregateFn, lt as UniqueryControls, m as DbQuery, mt as UniquSelect, n as DbResponse, nt as TSyncColumnResult, o as BaseDbAdapter, ot as TWriteTableResolver, p as DbControls, pt as TGenericLogger, q as TFieldMeta, r as resolveDesignType, rt as TTableOptionDiff, s as AggregateControls, st as TypedWithRelation, t as AtscriptDbReadable, tt as TSearchIndexInfo, u as AggregateQuery, ut as WithRelation, v as NavPropsOf, w as TCrudOp, x as TCascadeResolver, y as OwnPropsOf, z as TDbInsertManyResult } from "./db-readable-
|
|
1
|
+
import { $ as TMetadataOverrides, A as TDbCollation, B as TDbInsertResult, C as TColumnDiff, D as TDbActionIntent, E as TDbActionInfo, F as TDbForeignKey, G as TExistingColumn, H as TDbRelation, I as TDbIndex, J as TFkLookupResolver, K as TExistingTableOption, L as TDbIndexField, M as TDbDefaultValue, N as TDbDeleteResult, O as TDbActionLevel, P as TDbFieldMeta, Q as TMetaResponse, R as TDbIndexType, S as TCascadeTarget, T as TCrudPermissions, U as TDbStorageType, V as TDbReferentialAction, W as TDbUpdateResult, X as TIdDescriptor, Y as TFkLookupTarget, Z as TIdentification, _ as FlatOf, a as FieldMappingStrategy, at as TValueFormatterPair, b as PrimaryKeyOf, c as AggregateExpr, ct as Uniquery, d as AggregateResult, dt as TableMetadata, et as TRelationInfo, f as AtscriptDbWritable, ft as NoopLogger, g as FilterExpr, h as FieldOpsFor, i as DocumentFieldMapper, it as TTableResolver, j as TDbDefaultFn, k as TDbActionProcessor, l as AggregateFn, lt as UniqueryControls, m as DbQuery, mt as UniquSelect, n as DbResponse, nt as TSyncColumnResult, o as BaseDbAdapter, ot as TWriteTableResolver, p as DbControls, pt as TGenericLogger, q as TFieldMeta, r as resolveDesignType, rt as TTableOptionDiff, s as AggregateControls, st as TypedWithRelation, t as AtscriptDbReadable, tt as TSearchIndexInfo, u as AggregateQuery, ut as WithRelation, v as NavPropsOf, w as TCrudOp, x as TCascadeResolver, y as OwnPropsOf, z as TDbInsertManyResult } from "./db-readable-D3bZPucw.cjs";
|
|
2
2
|
import { a as $remove, c as $upsert, d as getDbFieldOp, f as isDbFieldOp, i as $mul, l as TDbFieldOp, n as $inc, o as $replace, p as separateFieldOps, r as $insert, s as $update, t as $dec, u as TFieldOps } from "./ops-DXJ4Zw0P.cjs";
|
|
3
|
-
import { a as AtscriptQueryComparison, c as AtscriptRef, d as translateQueryTree, f as AtscriptDbTable, i as TViewColumnMapping, l as TViewJoin, m as NativeIntegrity, n as TAdapterFactory, o as AtscriptQueryFieldRef, p as IntegrityStrategy, r as AtscriptDbView, s as AtscriptQueryNode, t as DbSpace, u as TViewPlan } from "./db-space-
|
|
3
|
+
import { a as AtscriptQueryComparison, c as AtscriptRef, d as translateQueryTree, f as AtscriptDbTable, i as TViewColumnMapping, l as TViewJoin, m as NativeIntegrity, n as TAdapterFactory, o as AtscriptQueryFieldRef, p as IntegrityStrategy, r as AtscriptDbView, s as AtscriptQueryNode, t as DbSpace, u as TViewPlan } from "./db-space-CK11BW4j.cjs";
|
|
4
4
|
import { n as createDbValidatorPlugin, t as DbValidationContext } from "./db-validator-plugin-DRGMCEn3.cjs";
|
|
5
5
|
import { c as TArrayPatch, i as buildValidationContext, l as TDbPatch, n as ValidatorMode, o as forceNavNonOptional, r as buildDbValidator, s as isNavRelation, t as ValidationContext, u as getKeyProps } from "./validator-_z_A3cKa.cjs";
|
|
6
6
|
import { AggregateQuery as AggregateQuery$1, FilterExpr as FilterExpr$1, FilterVisitor, Uniquery as Uniquery$1, computeInsights, isPrimitive, walkFilter } from "@uniqu/core";
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as TMetadataOverrides, A as TDbCollation, B as TDbInsertResult, C as TColumnDiff, D as TDbActionIntent, E as TDbActionInfo, F as TDbForeignKey, G as TExistingColumn, H as TDbRelation, I as TDbIndex, J as TFkLookupResolver, K as TExistingTableOption, L as TDbIndexField, M as TDbDefaultValue, N as TDbDeleteResult, O as TDbActionLevel, P as TDbFieldMeta, Q as TMetaResponse, R as TDbIndexType, S as TCascadeTarget, T as TCrudPermissions, U as TDbStorageType, V as TDbReferentialAction, W as TDbUpdateResult, X as TIdDescriptor, Y as TFkLookupTarget, Z as TIdentification, _ as FlatOf, a as FieldMappingStrategy, at as TValueFormatterPair, b as PrimaryKeyOf, c as AggregateExpr, ct as Uniquery, d as AggregateResult, dt as TableMetadata, et as TRelationInfo, f as AtscriptDbWritable, ft as NoopLogger, g as FilterExpr, h as FieldOpsFor, i as DocumentFieldMapper, it as TTableResolver, j as TDbDefaultFn, k as TDbActionProcessor, l as AggregateFn, lt as UniqueryControls, m as DbQuery, mt as UniquSelect, n as DbResponse, nt as TSyncColumnResult, o as BaseDbAdapter, ot as TWriteTableResolver, p as DbControls, pt as TGenericLogger, q as TFieldMeta, r as resolveDesignType, rt as TTableOptionDiff, s as AggregateControls, st as TypedWithRelation, t as AtscriptDbReadable, tt as TSearchIndexInfo, u as AggregateQuery, ut as WithRelation, v as NavPropsOf, w as TCrudOp, x as TCascadeResolver, y as OwnPropsOf, z as TDbInsertManyResult } from "./db-readable-
|
|
1
|
+
import { $ as TMetadataOverrides, A as TDbCollation, B as TDbInsertResult, C as TColumnDiff, D as TDbActionIntent, E as TDbActionInfo, F as TDbForeignKey, G as TExistingColumn, H as TDbRelation, I as TDbIndex, J as TFkLookupResolver, K as TExistingTableOption, L as TDbIndexField, M as TDbDefaultValue, N as TDbDeleteResult, O as TDbActionLevel, P as TDbFieldMeta, Q as TMetaResponse, R as TDbIndexType, S as TCascadeTarget, T as TCrudPermissions, U as TDbStorageType, V as TDbReferentialAction, W as TDbUpdateResult, X as TIdDescriptor, Y as TFkLookupTarget, Z as TIdentification, _ as FlatOf, a as FieldMappingStrategy, at as TValueFormatterPair, b as PrimaryKeyOf, c as AggregateExpr, ct as Uniquery, d as AggregateResult, dt as TableMetadata, et as TRelationInfo, f as AtscriptDbWritable, ft as NoopLogger, g as FilterExpr, h as FieldOpsFor, i as DocumentFieldMapper, it as TTableResolver, j as TDbDefaultFn, k as TDbActionProcessor, l as AggregateFn, lt as UniqueryControls, m as DbQuery, mt as UniquSelect, n as DbResponse, nt as TSyncColumnResult, o as BaseDbAdapter, ot as TWriteTableResolver, p as DbControls, pt as TGenericLogger, q as TFieldMeta, r as resolveDesignType, rt as TTableOptionDiff, s as AggregateControls, st as TypedWithRelation, t as AtscriptDbReadable, tt as TSearchIndexInfo, u as AggregateQuery, ut as WithRelation, v as NavPropsOf, w as TCrudOp, x as TCascadeResolver, y as OwnPropsOf, z as TDbInsertManyResult } from "./db-readable-Dj9to0bC.mjs";
|
|
2
2
|
import { a as $remove, c as $upsert, d as getDbFieldOp, f as isDbFieldOp, i as $mul, l as TDbFieldOp, n as $inc, o as $replace, p as separateFieldOps, r as $insert, s as $update, t as $dec, u as TFieldOps } from "./ops-C61kelof.mjs";
|
|
3
|
-
import { a as AtscriptQueryComparison, c as AtscriptRef, d as translateQueryTree, f as AtscriptDbTable, i as TViewColumnMapping, l as TViewJoin, m as NativeIntegrity, n as TAdapterFactory, o as AtscriptQueryFieldRef, p as IntegrityStrategy, r as AtscriptDbView, s as AtscriptQueryNode, t as DbSpace, u as TViewPlan } from "./db-space-
|
|
3
|
+
import { a as AtscriptQueryComparison, c as AtscriptRef, d as translateQueryTree, f as AtscriptDbTable, i as TViewColumnMapping, l as TViewJoin, m as NativeIntegrity, n as TAdapterFactory, o as AtscriptQueryFieldRef, p as IntegrityStrategy, r as AtscriptDbView, s as AtscriptQueryNode, t as DbSpace, u as TViewPlan } from "./db-space-Dy4GqZrK.mjs";
|
|
4
4
|
import { n as createDbValidatorPlugin, t as DbValidationContext } from "./db-validator-plugin-DDvYyv5t.mjs";
|
|
5
5
|
import { c as TArrayPatch, i as buildValidationContext, l as TDbPatch, n as ValidatorMode, o as forceNavNonOptional, r as buildDbValidator, s as isNavRelation, t as ValidationContext, u as getKeyProps } from "./validator-DttN2e5_.mjs";
|
|
6
6
|
import { AggregateQuery as AggregateQuery$1, FilterExpr as FilterExpr$1, FilterVisitor, Uniquery as Uniquery$1, computeInsights, isPrimitive, walkFilter } from "@uniqu/core";
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as DbError } from "./db-error-Cepx-RsQ.mjs";
|
|
2
|
-
import { a as BaseDbAdapter, c as AtscriptDbReadable, d as DocumentFieldMapper, f as FieldMappingStrategy, h as NoopLogger, i as ApplicationIntegrity, l as resolveDesignType, m as TableMetadata, n as AtscriptDbTable, o as IntegrityStrategy, p as UniquSelect, r as decomposePatch, s as NativeIntegrity, t as AtscriptDbView, u as RelationalFieldMapper } from "./db-view-
|
|
2
|
+
import { a as BaseDbAdapter, c as AtscriptDbReadable, d as DocumentFieldMapper, f as FieldMappingStrategy, h as NoopLogger, i as ApplicationIntegrity, l as resolveDesignType, m as TableMetadata, n as AtscriptDbTable, o as IntegrityStrategy, p as UniquSelect, r as decomposePatch, s as NativeIntegrity, t as AtscriptDbView, u as RelationalFieldMapper } from "./db-view-T2BrLhwh.mjs";
|
|
3
3
|
import { $dec, $inc, $insert, $mul, $remove, $replace, $update, $upsert, getDbFieldOp, isDbFieldOp, separateFieldOps } from "./ops.mjs";
|
|
4
4
|
import { a as isNavRelation, i as forceNavNonOptional, n as buildValidationContext, o as createDbValidatorPlugin, s as getKeyProps, t as buildDbValidator } from "./validator-BB5h1Le3.mjs";
|
|
5
5
|
import "./nested-writer-CT2rLURx.mjs";
|
package/dist/rel.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as TDbForeignKey, H as TDbRelation, dt as TableMetadata, it as TTableResolver, o as BaseDbAdapter, ot as TWriteTableResolver, pt as TGenericLogger } from "./db-readable-
|
|
1
|
+
import { F as TDbForeignKey, H as TDbRelation, dt as TableMetadata, it as TTableResolver, o as BaseDbAdapter, ot as TWriteTableResolver, pt as TGenericLogger } from "./db-readable-D3bZPucw.cjs";
|
|
2
2
|
import { t as DbValidationContext } from "./db-validator-plugin-DRGMCEn3.cjs";
|
|
3
3
|
import { FilterExpr, WithRelation } from "@uniqu/core";
|
|
4
4
|
import { Validator } from "@atscript/typescript/utils";
|
package/dist/rel.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as TDbForeignKey, H as TDbRelation, dt as TableMetadata, it as TTableResolver, o as BaseDbAdapter, ot as TWriteTableResolver, pt as TGenericLogger } from "./db-readable-
|
|
1
|
+
import { F as TDbForeignKey, H as TDbRelation, dt as TableMetadata, it as TTableResolver, o as BaseDbAdapter, ot as TWriteTableResolver, pt as TGenericLogger } from "./db-readable-Dj9to0bC.mjs";
|
|
2
2
|
import { t as DbValidationContext } from "./db-validator-plugin-DDvYyv5t.mjs";
|
|
3
3
|
import { Validator } from "@atscript/typescript/utils";
|
|
4
4
|
import { FilterExpr, WithRelation } from "@uniqu/core";
|
package/dist/sync.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_db_view = require("./db-view-
|
|
2
|
+
const require_db_view = require("./db-view-Jj46sTBk.cjs");
|
|
3
3
|
require("./validator-BIuw_T0k.cjs");
|
|
4
4
|
require("./nested-writer-v_LPR1yJ.cjs");
|
|
5
5
|
//#region src/schema/schema-hash.ts
|
package/dist/sync.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as TColumnDiff, F as TDbForeignKey, G as TExistingColumn, K as TExistingTableOption, M as TDbDefaultValue, P as TDbFieldMeta, U as TDbStorageType, pt as TGenericLogger, rt as TTableOptionDiff, t as AtscriptDbReadable } from "./db-readable-
|
|
2
|
-
import { r as AtscriptDbView, t as DbSpace } from "./db-space-
|
|
1
|
+
import { C as TColumnDiff, F as TDbForeignKey, G as TExistingColumn, K as TExistingTableOption, M as TDbDefaultValue, P as TDbFieldMeta, U as TDbStorageType, pt as TGenericLogger, rt as TTableOptionDiff, t as AtscriptDbReadable } from "./db-readable-D3bZPucw.cjs";
|
|
2
|
+
import { r as AtscriptDbView, t as DbSpace } from "./db-space-CK11BW4j.cjs";
|
|
3
3
|
import { TAtscriptAnnotatedType } from "@atscript/typescript/utils";
|
|
4
4
|
|
|
5
5
|
//#region src/schema/sync-entry.d.ts
|
package/dist/sync.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as TColumnDiff, F as TDbForeignKey, G as TExistingColumn, K as TExistingTableOption, M as TDbDefaultValue, P as TDbFieldMeta, U as TDbStorageType, pt as TGenericLogger, rt as TTableOptionDiff, t as AtscriptDbReadable } from "./db-readable-
|
|
2
|
-
import { r as AtscriptDbView, t as DbSpace } from "./db-space-
|
|
1
|
+
import { C as TColumnDiff, F as TDbForeignKey, G as TExistingColumn, K as TExistingTableOption, M as TDbDefaultValue, P as TDbFieldMeta, U as TDbStorageType, pt as TGenericLogger, rt as TTableOptionDiff, t as AtscriptDbReadable } from "./db-readable-Dj9to0bC.mjs";
|
|
2
|
+
import { r as AtscriptDbView, t as DbSpace } from "./db-space-Dy4GqZrK.mjs";
|
|
3
3
|
import { TAtscriptAnnotatedType } from "@atscript/typescript/utils";
|
|
4
4
|
|
|
5
5
|
//#region src/schema/sync-entry.d.ts
|
package/dist/sync.mjs
CHANGED