@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.
@@ -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
- * Resolves an id value into a filter expression.
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
- * Resolves an id value into a filter expression.
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-CkeVx10t.mjs";
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-CKQHMqVH.cjs";
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") out.push({
460
- fields: index.fields.map((field) => field.name),
461
- source: index.name
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
- * Resolves an id value into a filter expression.
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
- if (pkFields.length === 1) {
1517
- const filter = this._tryFieldFilter(pkFields[0], id);
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 prop of this.uniqueProps) {
1539
- const filter = this._tryFieldFilter(prop, id);
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") out.push({
460
- fields: index.fields.map((field) => field.name),
461
- source: index.name
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
- * Resolves an id value into a filter expression.
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
- if (pkFields.length === 1) {
1517
- const filter = this._tryFieldFilter(pkFields[0], id);
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 prop of this.uniqueProps) {
1539
- const filter = this._tryFieldFilter(prop, id);
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-CuPkKCnU.cjs");
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-CKQHMqVH.cjs";
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-Dycn4usM.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-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-CkeVx10t.mjs";
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-BAfXlRiV.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-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-cBN0YqrV.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-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-CKQHMqVH.cjs";
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-CkeVx10t.mjs";
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-CuPkKCnU.cjs");
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-CKQHMqVH.cjs";
2
- import { r as AtscriptDbView, t as DbSpace } from "./db-space-Dycn4usM.cjs";
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-CkeVx10t.mjs";
2
- import { r as AtscriptDbView, t as DbSpace } from "./db-space-BAfXlRiV.mjs";
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
@@ -1,4 +1,4 @@
1
- import { h as NoopLogger } from "./db-view-cBN0YqrV.mjs";
1
+ import { h as NoopLogger } from "./db-view-T2BrLhwh.mjs";
2
2
  import "./validator-BB5h1Le3.mjs";
3
3
  import "./nested-writer-CT2rLURx.mjs";
4
4
  //#region src/schema/schema-hash.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atscript/db",
3
- "version": "0.1.60",
3
+ "version": "0.1.62",
4
4
  "description": "Database adapter utilities for atscript.",
5
5
  "keywords": [
6
6
  "atscript",