effect-dynamodb 1.5.0 → 1.6.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/dist/Errors.js CHANGED
@@ -127,4 +127,34 @@ export class CascadePartialFailure extends Data.TaggedError("CascadePartialFailu
127
127
  /** Optimistic concurrency conflict — stream version did not match */
128
128
  export class VersionConflict extends Data.TaggedError("VersionConflict") {
129
129
  }
130
+ /**
131
+ * EDD-9024 — A GSI composite at hierarchy position `i` was cleared (or
132
+ * omitted-with-`sparse`) while a composite at position `j > i` was still
133
+ * present in the composed payload. Composed keys can't carry holes
134
+ * meaningfully — `acc#A#child#Y` with `parent` cleared composes to a
135
+ * syntactically invalid prefix that no `begins_with` query would match.
136
+ *
137
+ * Raised at write time (Entity.update / time-series .append). The error
138
+ * names the GSI, the cleared/omitted composite at position `i`, and the
139
+ * still-present trailing composite at position `j` so callers can locate
140
+ * the offending payload field.
141
+ *
142
+ * See `DESIGN.md §7 Policy-Aware GSI Composition` (hole detection) and
143
+ * `§7.6 Hierarchical SK Pruning` (the supported trailing-clear case).
144
+ */
145
+ export class CompositeKeyHoleError extends Data.TaggedError("CompositeKeyHoleError") {
146
+ }
147
+ /**
148
+ * Build a {@link CompositeKeyHoleError} with a formatted message. Centralises
149
+ * the message format so call sites (KeyComposer, Entity) stay consistent.
150
+ */
151
+ export const makeCompositeKeyHoleError = (params) => new CompositeKeyHoleError({
152
+ ...params,
153
+ message: `[EDD-9024] Composite key hole on GSI "${params.indexName}" of entity "${params.entityType}": ` +
154
+ `composite "${params.clearedComposite}" at ${params.half} position ${params.clearedPosition} was cleared ` +
155
+ `(or omitted under sparse policy), but composite "${params.trailingComposite}" at ${params.half} position ${params.trailingPosition} is still present. ` +
156
+ `Composed keys cannot carry holes — either supply a value for "${params.clearedComposite}", ` +
157
+ `clear all trailing composites (>= position ${params.trailingPosition}) too, ` +
158
+ `or use Entity.remove(["${params.clearedComposite}"]) to drop the whole GSI.`,
159
+ });
130
160
  //# sourceMappingURL=Errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Errors.js","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Errors.js","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  * the key format; KeyComposer extracts attribute values and delegates.
7
7
  */
8
8
  import type * as DynamoSchema from "./DynamoSchema.js";
9
+ import { type CompositeKeyHoleError } from "./Errors.js";
9
10
  /** Index key part definition (pk or sk of an index) */
10
11
  export interface KeyPart {
11
12
  readonly field: string;
@@ -140,30 +141,77 @@ export interface GsiUpdateResult {
140
141
  readonly sets: Record<string, string>;
141
142
  readonly removes: ReadonlyArray<string>;
142
143
  }
144
+ /**
145
+ * Compose a sort key from the leading prefix `[sk_0, ..., sk_(stopBefore-1)]`
146
+ * of an index's SK composites. Used by hierarchical SK pruning when a
147
+ * trailing SK composite is explicitly cleared with `preserve` policy — the
148
+ * resulting `gsiNsk` keeps the parent context and the item stays queryable
149
+ * at the coarser depth.
150
+ *
151
+ * `stopBefore === 0` produces the bare entity/collection prefix with no
152
+ * composite values (the item still belongs to the GSI but at the broadest
153
+ * scope — `begins_with(sk, "<prefix>")` matches it).
154
+ *
155
+ * See `DESIGN.md §7.6 Hierarchical SK Pruning`.
156
+ */
157
+ export declare const composeSkPrefixUpTo: (schema: DynamoSchema.DynamoSchema, entityType: string, entityVersion: number, index: IndexDefinition, record: Record<string, unknown>, stopBefore: number) => string;
143
158
  /**
144
159
  * Policy-aware GSI key composition for `Entity.update` and time-series
145
160
  * `.append`.
146
161
  *
147
- * Each touched GSI is resolved via its `indexPolicy` (if any) and returns a
148
- * combination of SET and REMOVE operations for the index's key fields. See
149
- * `DESIGN.md §7 Policy-Aware GSI Composition` for the full decision table.
162
+ * Implements the v2 unified-hierarchy three-way payload classification:
163
+ * - **present** (`attr: <value>` in payload, or inherited from `keyRecord`)
164
+ * — value is used in composition.
165
+ * - **explicit clear** (`attr: null` or `attr: undefined` in payload) —
166
+ * `null` and `undefined` collapse and cascade unconditionally; policy is
167
+ * bypassed for explicit clears.
168
+ * - **omitted** (key not in payload at all) — `indexPolicy` is consulted.
169
+ * Default policy is `"preserve"` for any composite not declared.
170
+ *
171
+ * Per-attribute outcomes (per touched GSI):
172
+ *
173
+ * | State | PK composite | SK composite |
174
+ * | ------------- | ------------------------- | -------------------------------------------- |
175
+ * | omitted+sparse| Drop the GSI | Drop the GSI |
176
+ * | omitted+preserve | No-op for that half | No-op for that half |
177
+ * | clear+sparse | Drop the GSI | Drop the GSI |
178
+ * | clear+preserve| Drop the GSI (degrades to sparse on PK — partition migration is almost always wrong) | **Truncate `gsiNsk`** at this composite (hierarchical pruning) |
150
179
  *
151
- * Rules (per touched GSI):
152
- * 1. **Cascade (REMOVE of a composite attr)** — any composite in `removedSet`
153
- * forces REMOVE of both key fields, overriding `indexPolicy`.
154
- * 2. **Sparse wins** — if any composite is absent and its policy is `"sparse"`,
155
- * REMOVE both key fields.
156
- * 3. **Full recompose** — if all composites are present, SET both halves.
157
- * 4. **Mixed (some `"preserve"` absent, no `"sparse"` absent)** — evaluate pk
158
- * and sk independently: the half whose composites are all present is SET;
159
- * the half missing a preserve attr is left alone (no SET, no REMOVE).
180
+ * Cascade (`Entity.remove([attr])`) overrides everything: any composite in
181
+ * `removedSet` forces a full GSI drop.
182
+ *
183
+ * **Hole detection.** Throws `CompositeKeyHoleError` (EDD-9024) when an SK
184
+ * composite at position `i` is cleared (with preserve) while a composite at
185
+ * position `j > i` is still present in the merged payload — composed keys
186
+ * cannot carry holes.
160
187
  *
161
188
  * A GSI is considered "touched" when any of its composites appears in
162
- * `updatePayload` or `removedSet`. Untouched GSIs are skipped.
189
+ * `updatePayload` (present, explicit clear, or omitted-with-`indexPolicy`),
190
+ * or `removedSet`. GSIs without an `indexPolicy` are skipped when none of
191
+ * their composites are touched. GSIs with a policy are always evaluated —
192
+ * the policy is a declarative statement about the GSI's membership.
193
+ *
194
+ * See `DESIGN.md §7 Policy-Aware GSI Composition` for the full decision
195
+ * algorithm and worked decision table, and `§7.6 Hierarchical SK Pruning`
196
+ * for the trailing-clear truncation contract.
197
+ *
198
+ * @throws {CompositeKeyHoleError} EDD-9024 on hole-pattern detection.
163
199
  */
164
200
  export declare const composeGsiKeysForUpdatePolicyAware: (schema: DynamoSchema.DynamoSchema, entityType: string, entityVersion: number, indexes: Record<string, IndexDefinition>, updatePayload: Record<string, unknown>, keyRecord: Record<string, unknown>, options?: {
165
201
  readonly removedSet?: ReadonlySet<string> | undefined;
202
+ /**
203
+ * Attributes that appear in `updatePayload` with value `null` or
204
+ * `undefined` — i.e. the consumer explicitly cleared them. The library
205
+ * distinguishes this from omission to give consumers an unambiguous
206
+ * "drop this composite from the key" instruction; `null` and
207
+ * `undefined` collapse here to eliminate the long-standing footgun of
208
+ * dev confusion between the two in TypeScript with
209
+ * `exactOptionalPropertyTypes`.
210
+ */
211
+ readonly clearedSet?: ReadonlySet<string> | undefined;
166
212
  }) => GsiUpdateResult;
213
+ /** @internal — re-export for documentation cross-reference. */
214
+ export type { CompositeKeyHoleError };
167
215
  /**
168
216
  * Compose a partial sort key prefix for query operations.
169
217
  * Used when not all SK composite attributes are provided.
@@ -1 +1 @@
1
- {"version":3,"file":"KeyComposer.d.ts","sourceRoot":"","sources":["../src/KeyComposer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KeyComposer.d.ts","sourceRoot":"","sources":["../src/KeyComposer.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { DateTime } from "effect";
9
9
  import { applyCasing, composeClusteredSortKey, composeCollectionKey, composeIsolatedSortKey, composeKey, } from "./DynamoSchema.js";
10
+ import { makeCompositeKeyHoleError } from "./Errors.js";
10
11
  /** Normalize a GsiConfig (entity input) to an IndexDefinition (internal format). */
11
12
  export const normalizeGsiConfig = (config) => {
12
13
  // Detect old format and give helpful migration error
@@ -171,31 +172,97 @@ export const composeAllKeys = (schema, entityType, entityVersion, indexes, recor
171
172
  }
172
173
  return result;
173
174
  };
175
+ /**
176
+ * Compose a sort key from the leading prefix `[sk_0, ..., sk_(stopBefore-1)]`
177
+ * of an index's SK composites. Used by hierarchical SK pruning when a
178
+ * trailing SK composite is explicitly cleared with `preserve` policy — the
179
+ * resulting `gsiNsk` keeps the parent context and the item stays queryable
180
+ * at the coarser depth.
181
+ *
182
+ * `stopBefore === 0` produces the bare entity/collection prefix with no
183
+ * composite values (the item still belongs to the GSI but at the broadest
184
+ * scope — `begins_with(sk, "<prefix>")` matches it).
185
+ *
186
+ * See `DESIGN.md §7.6 Hierarchical SK Pruning`.
187
+ */
188
+ export const composeSkPrefixUpTo = (schema, entityType, entityVersion, index, record, stopBefore) => {
189
+ const slice = index.sk.composite.slice(0, stopBefore);
190
+ const composites = extractComposites(slice, record);
191
+ const collection = index.collection;
192
+ const collectionType = index.type ?? "isolated";
193
+ if (collection !== undefined) {
194
+ if (collectionType === "clustered") {
195
+ return composeClusteredSortKey(schema, collection, entityType, entityVersion, composites, {
196
+ casing: index.casing,
197
+ names: [...slice],
198
+ });
199
+ }
200
+ return composeIsolatedSortKey(schema, entityType, entityVersion, composites, {
201
+ casing: index.casing,
202
+ names: [...slice],
203
+ });
204
+ }
205
+ return composeKey(schema, entityType, composites, {
206
+ casing: index.casing,
207
+ names: [...slice],
208
+ });
209
+ };
174
210
  /**
175
211
  * Policy-aware GSI key composition for `Entity.update` and time-series
176
212
  * `.append`.
177
213
  *
178
- * Each touched GSI is resolved via its `indexPolicy` (if any) and returns a
179
- * combination of SET and REMOVE operations for the index's key fields. See
180
- * `DESIGN.md §7 Policy-Aware GSI Composition` for the full decision table.
214
+ * Implements the v2 unified-hierarchy three-way payload classification:
215
+ * - **present** (`attr: <value>` in payload, or inherited from `keyRecord`)
216
+ * — value is used in composition.
217
+ * - **explicit clear** (`attr: null` or `attr: undefined` in payload) —
218
+ * `null` and `undefined` collapse and cascade unconditionally; policy is
219
+ * bypassed for explicit clears.
220
+ * - **omitted** (key not in payload at all) — `indexPolicy` is consulted.
221
+ * Default policy is `"preserve"` for any composite not declared.
222
+ *
223
+ * Per-attribute outcomes (per touched GSI):
181
224
  *
182
- * Rules (per touched GSI):
183
- * 1. **Cascade (REMOVE of a composite attr)** — any composite in `removedSet`
184
- * forces REMOVE of both key fields, overriding `indexPolicy`.
185
- * 2. **Sparse wins** — if any composite is absent and its policy is `"sparse"`,
186
- * REMOVE both key fields.
187
- * 3. **Full recompose** — if all composites are present, SET both halves.
188
- * 4. **Mixed (some `"preserve"` absent, no `"sparse"` absent)** — evaluate pk
189
- * and sk independently: the half whose composites are all present is SET;
190
- * the half missing a preserve attr is left alone (no SET, no REMOVE).
225
+ * | State | PK composite | SK composite |
226
+ * | ------------- | ------------------------- | -------------------------------------------- |
227
+ * | omitted+sparse| Drop the GSI | Drop the GSI |
228
+ * | omitted+preserve | No-op for that half | No-op for that half |
229
+ * | clear+sparse | Drop the GSI | Drop the GSI |
230
+ * | clear+preserve| Drop the GSI (degrades to sparse on PK — partition migration is almost always wrong) | **Truncate `gsiNsk`** at this composite (hierarchical pruning) |
231
+ *
232
+ * Cascade (`Entity.remove([attr])`) overrides everything: any composite in
233
+ * `removedSet` forces a full GSI drop.
234
+ *
235
+ * **Hole detection.** Throws `CompositeKeyHoleError` (EDD-9024) when an SK
236
+ * composite at position `i` is cleared (with preserve) while a composite at
237
+ * position `j > i` is still present in the merged payload — composed keys
238
+ * cannot carry holes.
191
239
  *
192
240
  * A GSI is considered "touched" when any of its composites appears in
193
- * `updatePayload` or `removedSet`. Untouched GSIs are skipped.
241
+ * `updatePayload` (present, explicit clear, or omitted-with-`indexPolicy`),
242
+ * or `removedSet`. GSIs without an `indexPolicy` are skipped when none of
243
+ * their composites are touched. GSIs with a policy are always evaluated —
244
+ * the policy is a declarative statement about the GSI's membership.
245
+ *
246
+ * See `DESIGN.md §7 Policy-Aware GSI Composition` for the full decision
247
+ * algorithm and worked decision table, and `§7.6 Hierarchical SK Pruning`
248
+ * for the trailing-clear truncation contract.
249
+ *
250
+ * @throws {CompositeKeyHoleError} EDD-9024 on hole-pattern detection.
194
251
  */
195
252
  export const composeGsiKeysForUpdatePolicyAware = (schema, entityType, entityVersion, indexes, updatePayload, keyRecord, options) => {
196
253
  const sets = {};
197
254
  const removes = [];
198
255
  const removedSet = options?.removedSet;
256
+ // Derive clearedSet: any payload entry whose value is null or undefined.
257
+ // `null` and `undefined` collapse — both signal "explicit clear, drop this
258
+ // composite from the key now". The caller may also supply an explicit
259
+ // clearedSet for cases where the cleared signal arrives outside of
260
+ // `updatePayload` (e.g. computed paths). The two are unioned.
261
+ const clearedSet = new Set(options?.clearedSet ?? []);
262
+ for (const [k, v] of Object.entries(updatePayload)) {
263
+ if (v === null || v === undefined)
264
+ clearedSet.add(k);
265
+ }
199
266
  for (const [indexName, index] of Object.entries(indexes)) {
200
267
  if (indexName === "primary")
201
268
  continue;
@@ -204,11 +271,6 @@ export const composeGsiKeysForUpdatePolicyAware = (schema, entityType, entityVer
204
271
  const allComposites = [...pkComposites, ...skComposites];
205
272
  const cascadeRemove = removedSet !== undefined && allComposites.some((attr) => removedSet.has(attr));
206
273
  const touchedByPayload = allComposites.some((attr) => attr in updatePayload);
207
- // GSIs that declare an `indexPolicy` are always evaluated — the policy is a
208
- // declarative statement about the GSI's membership invariant, so "attr not
209
- // in payload" is treated as "attr not set" per the policy (sparse → drop,
210
- // preserve → leave that half alone). GSIs without a policy keep the
211
- // conventional touched gate: skip unless a composite is in the payload.
212
274
  const hasPolicy = index.indexPolicy !== undefined;
213
275
  if (!cascadeRemove && !touchedByPayload && !hasPolicy)
214
276
  continue;
@@ -217,26 +279,97 @@ export const composeGsiKeysForUpdatePolicyAware = (schema, entityType, entityVer
217
279
  removes.push(index.pk.field, index.sk.field);
218
280
  continue;
219
281
  }
220
- const merged = { ...keyRecord, ...updatePayload };
282
+ // Build merged record for value extraction. Cleared attrs are excluded so
283
+ // their value is undefined when composed.
284
+ const merged = { ...keyRecord };
285
+ for (const [k, v] of Object.entries(updatePayload)) {
286
+ if (clearedSet.has(k))
287
+ continue; // cleared → exclude
288
+ merged[k] = v;
289
+ }
221
290
  const policy = index.indexPolicy?.(merged) ?? {};
222
291
  const isPresent = (attr) => {
223
292
  const v = merged[attr];
224
293
  return v !== undefined && v !== null;
225
294
  };
226
- // Sparse wins across the whole GSI.
227
- const anySparseMissing = allComposites.some((attr) => !isPresent(attr) && policy[attr] === "sparse");
228
- if (anySparseMissing) {
295
+ const isCleared = (attr) => clearedSet.has(attr);
296
+ const isOmitted = (attr) => !(attr in updatePayload) && !isPresent(attr);
297
+ // ---- Drop signals (any → REMOVE both keys, then continue) ----
298
+ // PK composite cleared (any policy degrades to sparse — partition
299
+ // migration is almost always wrong, see DESIGN.md §7).
300
+ const pkClear = pkComposites.some(isCleared);
301
+ if (pkClear) {
302
+ removes.push(index.pk.field, index.sk.field);
303
+ continue;
304
+ }
305
+ // PK composite omitted with sparse policy.
306
+ const pkOmittedSparse = pkComposites.some((attr) => isOmitted(attr) && policy[attr] === "sparse");
307
+ if (pkOmittedSparse) {
229
308
  removes.push(index.pk.field, index.sk.field);
230
309
  continue;
231
310
  }
311
+ // SK composite cleared with sparse policy.
312
+ const skClearSparse = skComposites.some((attr) => isCleared(attr) && policy[attr] === "sparse");
313
+ if (skClearSparse) {
314
+ removes.push(index.pk.field, index.sk.field);
315
+ continue;
316
+ }
317
+ // SK composite omitted with sparse policy.
318
+ const skOmittedSparse = skComposites.some((attr) => isOmitted(attr) && policy[attr] === "sparse");
319
+ if (skOmittedSparse) {
320
+ removes.push(index.pk.field, index.sk.field);
321
+ continue;
322
+ }
323
+ // ---- Hierarchical SK truncation: SK clear with preserve ----
324
+ // First SK position cleared under preserve. Earlier sparse-clear case
325
+ // already handled above, so any cleared SK attr at this point is preserve.
326
+ let truncateAt = -1;
327
+ for (let i = 0; i < skComposites.length; i++) {
328
+ const attr = skComposites[i];
329
+ if (isCleared(attr)) {
330
+ truncateAt = i;
331
+ break;
332
+ }
333
+ }
334
+ if (truncateAt !== -1) {
335
+ // Hole check: any SK composite at position j > truncateAt that is
336
+ // present in the composed payload would compose to a syntactically
337
+ // invalid prefix. Throw EDD-9024 with location info.
338
+ for (let j = truncateAt + 1; j < skComposites.length; j++) {
339
+ const attr = skComposites[j];
340
+ if (isPresent(attr)) {
341
+ throw makeCompositeKeyHoleError({
342
+ entityType,
343
+ indexName: index.index ?? indexName,
344
+ clearedComposite: skComposites[truncateAt],
345
+ trailingComposite: attr,
346
+ clearedPosition: truncateAt,
347
+ trailingPosition: j,
348
+ half: "sk",
349
+ });
350
+ }
351
+ }
352
+ // Truncation requires the leading prefix attrs to be present (in merged).
353
+ // Any missing-preserve in the leading prefix collapses to the half-wise
354
+ // preserve rule for the SK — leave SK alone instead of truncating.
355
+ const leadingAllPresent = skComposites.slice(0, truncateAt).every(isPresent);
356
+ if (leadingAllPresent) {
357
+ sets[index.sk.field] = composeSkPrefixUpTo(schema, entityType, entityVersion, index, merged, truncateAt);
358
+ }
359
+ // PK side recomposes if all PK composites are present (no SET if any
360
+ // PK composite is omitted-with-preserve — same as the half-wise rule).
361
+ if (pkComposites.every(isPresent)) {
362
+ sets[index.pk.field] = composePk(schema, entityType, index, merged);
363
+ }
364
+ continue;
365
+ }
366
+ // ---- No drop, no truncation: standard half-wise recompose ----
232
367
  const pkAllPresent = pkComposites.every(isPresent);
233
368
  const skAllPresent = skComposites.every(isPresent);
234
369
  if (pkAllPresent && skAllPresent) {
235
370
  Object.assign(sets, composeIndexKeys(schema, entityType, entityVersion, index, merged));
236
371
  continue;
237
372
  }
238
- // Half-wise preservation: SET halves whose composites are all present;
239
- // leave halves with a missing-preserve attr untouched (no partial rewrite).
240
373
  if (pkAllPresent) {
241
374
  sets[index.pk.field] = composePk(schema, entityType, index, merged);
242
375
  }
@@ -1 +1 @@
1
- {"version":3,"file":"KeyComposer.js","sourceRoot":"","sources":["../src/KeyComposer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KeyComposer.js","sourceRoot":"","sources":["../src/KeyComposer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export type { Casing, DynamoSchema as DynamoSchemaType } from "./DynamoSchema.js
11
11
  export * as DynamoSchema from "./DynamoSchema.js";
12
12
  export type { BoundEntity, Entity as EntityType, EntityDelete, EntityGet, EntityPut, EntityUpdate, TransactableInfo, } from "./Entity.js";
13
13
  export * as Entity from "./Entity.js";
14
- export { AggregateAssemblyError, AggregateDecompositionError, AggregateTransactionOverflow, CascadePartialFailure, ConditionalCheckFailed, DynamoError, DynamoValidationError, InternalServerError, ItemDeleted, ItemNotDeleted, ItemNotFound, OptimisticLockError, RefNotFound, ResourceNotFoundError, StaleAppend, ThrottlingError, TransactionCancelled, TransactionOverflow, UniqueConstraintViolation, ValidationError, VersionConflict, } from "./Errors.js";
14
+ export { AggregateAssemblyError, AggregateDecompositionError, AggregateTransactionOverflow, CascadePartialFailure, CompositeKeyHoleError, ConditionalCheckFailed, DynamoError, DynamoValidationError, InternalServerError, ItemDeleted, ItemNotDeleted, ItemNotFound, makeCompositeKeyHoleError, OptimisticLockError, RefNotFound, ResourceNotFoundError, StaleAppend, ThrottlingError, TransactionCancelled, TransactionOverflow, UniqueConstraintViolation, ValidationError, VersionConflict, } from "./Errors.js";
15
15
  export * as EventStore from "./EventStore.js";
16
16
  export type { ConditionInput, ExpressionResult, UpdateInput, } from "./Expression.js";
17
17
  export * as Expression from "./Expression.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,YAAY,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,YAAY,EAAE,MAAM,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACjF,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,YAAY,EACV,WAAW,EACX,MAAM,IAAI,UAAU,EACpB,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,yBAAyB,EACzB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,YAAY,EACV,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,gBAAgB,GACjB,MAAM,2BAA2B,CAAA;AAClC,YAAY,EACV,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,IAAI,GACL,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,WAAW,GACZ,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClF,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,YAAY,EAAE,KAAK,IAAI,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ export { DynamoClient } from "./DynamoClient.js";
5
5
  export * as DynamoModel from "./DynamoModel.js";
6
6
  export * as DynamoSchema from "./DynamoSchema.js";
7
7
  export * as Entity from "./Entity.js";
8
- export { AggregateAssemblyError, AggregateDecompositionError, AggregateTransactionOverflow, CascadePartialFailure, ConditionalCheckFailed, DynamoError, DynamoValidationError, InternalServerError, ItemDeleted, ItemNotDeleted, ItemNotFound, OptimisticLockError, RefNotFound, ResourceNotFoundError, StaleAppend, ThrottlingError, TransactionCancelled, TransactionOverflow, UniqueConstraintViolation, ValidationError, VersionConflict, } from "./Errors.js";
8
+ export { AggregateAssemblyError, AggregateDecompositionError, AggregateTransactionOverflow, CascadePartialFailure, CompositeKeyHoleError, ConditionalCheckFailed, DynamoError, DynamoValidationError, InternalServerError, ItemDeleted, ItemNotDeleted, ItemNotFound, makeCompositeKeyHoleError, OptimisticLockError, RefNotFound, ResourceNotFoundError, StaleAppend, ThrottlingError, TransactionCancelled, TransactionOverflow, UniqueConstraintViolation, ValidationError, VersionConflict, } from "./Errors.js";
9
9
  export * as EventStore from "./EventStore.js";
10
10
  export * as Expression from "./Expression.js";
11
11
  export { makeBoundQuery } from "./internal/BoundQuery.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAQ7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAUjD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAM7C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAO7C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAwBzD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAS3B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElF,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAQ7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAUjD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,yBAAyB,EACzB,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAM7C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAO7C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAwBzD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAS3B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElF,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntitySchemas.d.ts","sourceRoot":"","sources":["../../src/internal/EntitySchemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKL,MAAM,EAIP,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,mBAAmB,CAAA;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EACV,gBAAgB,EAEhB,gBAAgB,EAChB,mBAAmB,EAEnB,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAM1B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI,CAAA;IACjD,2EAA2E;IAC3E,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI,CAAA;IACjD,2EAA2E;IAC3E,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;CACnC;AAED;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG,UAAU,CAAC,MAAM,CAC1D,MAAM,EACN;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE,CACvC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,CAAC,GAAG,EACvB,UAAU,cAAc,GAAG,SAAS,KACnC,cAAc,GAAG,IAUnB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,aAAa,YAAY,EACzB,sBAAsB,4BAA4B,KACjD,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAO1C,CAAA;AA0BD,eAAO,MAAM,mBAAmB,GAC9B,aAAa,gBAAgB,GAAG,SAAS,EACzC,YAAY,eAAe,GAAG,SAAS,EACvC,aAAa,gBAAgB,CAAC,GAAG,CAAC,GAAG,SAAS,EAC9C,cAAa,YAAiB,EAC9B,uBAAsB,4BAAiC,KACtD,oBA4FF,CAAA;AAMD,eAAO,MAAM,oBAAoB,GAC/B,SAAS,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,KAClD,aAAa,CAAC,MAAM,CAOtB,CAAA;AAMD,eAAO,MAAM,gBAAgB,GAC3B,SAAS,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,KAClD,aAAa,CAAC,MAAM,CAUtB,CAAA;AAMD,eAAO,MAAM,sBAAsB,GACjC,SAAS,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,KAClD,aAAa,CAAC,MAAM,CAUtB,CAAA;AAMD,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;AAShE,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,CAAC,GAAG,KAAG,YAG7C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,CAAC,GAAG,KAAG,cAAc,GAAG,SAU1E,CAAA;AAMD;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,CAAC,GAAG,KAAG,OAA4C,CAAA;AAE9F;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,CAAC,GAAG,KAAG,OAKrD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,CAAC,GAAG,KAAG,OAGpD,CAAA;AA8CD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,cAAc,KAAG,MAAM,CAAC,GAuEpE,CAAA;AA4DD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,iBAAiB,GAC5B,aAAa,YAAY,EACzB,gBAAgB,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KACxD,YA4BF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,2BAA2B,GACtC,aAAa,YAAY,EACzB,sBAAsB,4BAA4B,KACjD,IA8BF,CAAA;AAsBD,MAAM,WAAW,cAAc;IAC7B,mFAAmF;IACnF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACvC,mCAAmC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxC;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxC,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACrC,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACtC,uDAAuD;IACvD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/C;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;IACpD;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;CACvD;AAED,eAAO,MAAM,mBAAmB,GAC9B,aAAa,YAAY,EACzB,SAAS,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACnD,cAAc,oBAAoB,EAClC,eAAc,aAAa,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAA;CACtC,CAAM,EACP,kBAAiB,WAAW,CAAC,MAAM,CAAa,EAChD,kBAAiB,MAAM,GAAG,SAAqB,EAC/C,aAAY,gBAAgB,CAAC,GAAG,CAAC,GAAG,SAAqB,EACzD,iBAAgB,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAM,KAC7D,cAwOF,CAAA;AAMD,eAAO,MAAM,mBAAmB,GAAI,KAAK,mBAAmB,KAAG,aAAa,CAAC,MAAM,CACF,CAAA"}
1
+ {"version":3,"file":"EntitySchemas.d.ts","sourceRoot":"","sources":["../../src/internal/EntitySchemas.ts"],"names":[],"mappings":"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"}
@@ -656,6 +656,11 @@ export const buildDerivedSchemas = (modelFields, indexes, systemFields, resolved
656
656
  }
657
657
  const createSchema = Schema.Struct(createFieldsAcc);
658
658
  // --- Update Schema: optional model fields minus key composites & immutable ---
659
+ // Each field wraps `Schema.NullishOr` so consumers can pass `null` or
660
+ // `undefined` as an explicit clear signal — under indexPolicy v2, both
661
+ // collapse to "clear this composite from the key now" (DESIGN.md §7).
662
+ // The outer `Schema.optional` lets the key be omitted entirely (defers
663
+ // to policy on omission).
659
664
  const buildUpdateFieldsAcc = () => {
660
665
  const acc = {};
661
666
  for (const [key, field] of Object.entries(fields)) {
@@ -667,14 +672,14 @@ export const buildDerivedSchemas = (modelFields, indexes, systemFields, resolved
667
672
  continue;
668
673
  if (strippedFromUpdate.has(key))
669
674
  continue;
670
- acc[key] = Schema.optional(field);
675
+ acc[key] = Schema.optional(Schema.NullishOr(field));
671
676
  }
672
677
  for (const ref of resolvedRefs) {
673
678
  if (pkComposites.has(ref.fieldName))
674
679
  continue;
675
680
  if (immutableFields.has(ref.fieldName))
676
681
  continue;
677
- acc[ref.idFieldName] = Schema.optional(ref.identifierSchema);
682
+ acc[ref.idFieldName] = Schema.optional(Schema.NullishOr(ref.identifierSchema));
678
683
  }
679
684
  return acc;
680
685
  };