effect-dynamodb 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -0
  3. package/dist/Aggregate.d.ts +210 -0
  4. package/dist/Aggregate.d.ts.map +1 -0
  5. package/dist/Aggregate.js +1169 -0
  6. package/dist/Aggregate.js.map +1 -0
  7. package/dist/Batch.d.ts +62 -0
  8. package/dist/Batch.d.ts.map +1 -0
  9. package/dist/Batch.js +218 -0
  10. package/dist/Batch.js.map +1 -0
  11. package/dist/Collection.d.ts +58 -0
  12. package/dist/Collection.d.ts.map +1 -0
  13. package/dist/Collection.js +195 -0
  14. package/dist/Collection.js.map +1 -0
  15. package/dist/Collections.d.ts +121 -0
  16. package/dist/Collections.d.ts.map +1 -0
  17. package/dist/Collections.js +121 -0
  18. package/dist/Collections.js.map +1 -0
  19. package/dist/DynamoClient.d.ts +317 -0
  20. package/dist/DynamoClient.d.ts.map +1 -0
  21. package/dist/DynamoClient.js +653 -0
  22. package/dist/DynamoClient.js.map +1 -0
  23. package/dist/DynamoModel.d.ts +278 -0
  24. package/dist/DynamoModel.d.ts.map +1 -0
  25. package/dist/DynamoModel.js +453 -0
  26. package/dist/DynamoModel.js.map +1 -0
  27. package/dist/DynamoSchema.d.ts +137 -0
  28. package/dist/DynamoSchema.d.ts.map +1 -0
  29. package/dist/DynamoSchema.js +188 -0
  30. package/dist/DynamoSchema.js.map +1 -0
  31. package/dist/Entity.d.ts +628 -0
  32. package/dist/Entity.d.ts.map +1 -0
  33. package/dist/Entity.js +2371 -0
  34. package/dist/Entity.js.map +1 -0
  35. package/dist/Errors.d.ts +227 -0
  36. package/dist/Errors.d.ts.map +1 -0
  37. package/dist/Errors.js +93 -0
  38. package/dist/Errors.js.map +1 -0
  39. package/dist/EventStore.d.ts +208 -0
  40. package/dist/EventStore.d.ts.map +1 -0
  41. package/dist/EventStore.js +333 -0
  42. package/dist/EventStore.js.map +1 -0
  43. package/dist/Expression.d.ts +50 -0
  44. package/dist/Expression.d.ts.map +1 -0
  45. package/dist/Expression.js +170 -0
  46. package/dist/Expression.js.map +1 -0
  47. package/dist/KeyComposer.d.ts +125 -0
  48. package/dist/KeyComposer.d.ts.map +1 -0
  49. package/dist/KeyComposer.js +257 -0
  50. package/dist/KeyComposer.js.map +1 -0
  51. package/dist/Marshaller.d.ts +30 -0
  52. package/dist/Marshaller.d.ts.map +1 -0
  53. package/dist/Marshaller.js +115 -0
  54. package/dist/Marshaller.js.map +1 -0
  55. package/dist/Projection.d.ts +28 -0
  56. package/dist/Projection.d.ts.map +1 -0
  57. package/dist/Projection.js +39 -0
  58. package/dist/Projection.js.map +1 -0
  59. package/dist/Query.d.ts +214 -0
  60. package/dist/Query.d.ts.map +1 -0
  61. package/dist/Query.js +397 -0
  62. package/dist/Query.js.map +1 -0
  63. package/dist/Table.d.ts +178 -0
  64. package/dist/Table.d.ts.map +1 -0
  65. package/dist/Table.js +211 -0
  66. package/dist/Table.js.map +1 -0
  67. package/dist/Transaction.d.ts +79 -0
  68. package/dist/Transaction.d.ts.map +1 -0
  69. package/dist/Transaction.js +215 -0
  70. package/dist/Transaction.js.map +1 -0
  71. package/dist/_AggregateCursor.d.ts +44 -0
  72. package/dist/_AggregateCursor.d.ts.map +1 -0
  73. package/dist/_AggregateCursor.js +18 -0
  74. package/dist/_AggregateCursor.js.map +1 -0
  75. package/dist/_AggregateEdges.d.ts +77 -0
  76. package/dist/_AggregateEdges.d.ts.map +1 -0
  77. package/dist/_AggregateEdges.js +41 -0
  78. package/dist/_AggregateEdges.js.map +1 -0
  79. package/dist/_AggregateSchemas.d.ts +69 -0
  80. package/dist/_AggregateSchemas.d.ts.map +1 -0
  81. package/dist/_AggregateSchemas.js +194 -0
  82. package/dist/_AggregateSchemas.js.map +1 -0
  83. package/dist/_AggregateTypes.d.ts +94 -0
  84. package/dist/_AggregateTypes.d.ts.map +1 -0
  85. package/dist/_AggregateTypes.js +7 -0
  86. package/dist/_AggregateTypes.js.map +1 -0
  87. package/dist/_EntityCombinators.d.ts +155 -0
  88. package/dist/_EntityCombinators.d.ts.map +1 -0
  89. package/dist/_EntityCombinators.js +158 -0
  90. package/dist/_EntityCombinators.js.map +1 -0
  91. package/dist/_EntityConfig.d.ts +100 -0
  92. package/dist/_EntityConfig.d.ts.map +1 -0
  93. package/dist/_EntityConfig.js +7 -0
  94. package/dist/_EntityConfig.js.map +1 -0
  95. package/dist/_EntityOps.d.ts +205 -0
  96. package/dist/_EntityOps.d.ts.map +1 -0
  97. package/dist/_EntityOps.js +137 -0
  98. package/dist/_EntityOps.js.map +1 -0
  99. package/dist/_EntitySchemas.d.ts +57 -0
  100. package/dist/_EntitySchemas.d.ts.map +1 -0
  101. package/dist/_EntitySchemas.js +298 -0
  102. package/dist/_EntitySchemas.js.map +1 -0
  103. package/dist/_EntityTypes.d.ts +81 -0
  104. package/dist/_EntityTypes.d.ts.map +1 -0
  105. package/dist/_EntityTypes.js +7 -0
  106. package/dist/_EntityTypes.js.map +1 -0
  107. package/dist/_sparse_check.d.ts +2 -0
  108. package/dist/_sparse_check.d.ts.map +1 -0
  109. package/dist/_sparse_check.js +193 -0
  110. package/dist/_sparse_check.js.map +1 -0
  111. package/dist/index.d.ts +35 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +20 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/internal/AggregateCursor.d.ts +44 -0
  116. package/dist/internal/AggregateCursor.d.ts.map +1 -0
  117. package/dist/internal/AggregateCursor.js +18 -0
  118. package/dist/internal/AggregateCursor.js.map +1 -0
  119. package/dist/internal/AggregateEdges.d.ts +77 -0
  120. package/dist/internal/AggregateEdges.d.ts.map +1 -0
  121. package/dist/internal/AggregateEdges.js +41 -0
  122. package/dist/internal/AggregateEdges.js.map +1 -0
  123. package/dist/internal/AggregateSchemas.d.ts +69 -0
  124. package/dist/internal/AggregateSchemas.d.ts.map +1 -0
  125. package/dist/internal/AggregateSchemas.js +193 -0
  126. package/dist/internal/AggregateSchemas.js.map +1 -0
  127. package/dist/internal/AggregateTypes.d.ts +94 -0
  128. package/dist/internal/AggregateTypes.d.ts.map +1 -0
  129. package/dist/internal/AggregateTypes.js +7 -0
  130. package/dist/internal/AggregateTypes.js.map +1 -0
  131. package/dist/internal/BoundQuery.d.ts +107 -0
  132. package/dist/internal/BoundQuery.d.ts.map +1 -0
  133. package/dist/internal/BoundQuery.js +111 -0
  134. package/dist/internal/BoundQuery.js.map +1 -0
  135. package/dist/internal/EntityCombinators.d.ts +173 -0
  136. package/dist/internal/EntityCombinators.d.ts.map +1 -0
  137. package/dist/internal/EntityCombinators.js +183 -0
  138. package/dist/internal/EntityCombinators.js.map +1 -0
  139. package/dist/internal/EntityConfig.d.ts +100 -0
  140. package/dist/internal/EntityConfig.d.ts.map +1 -0
  141. package/dist/internal/EntityConfig.js +7 -0
  142. package/dist/internal/EntityConfig.js.map +1 -0
  143. package/dist/internal/EntityOps.d.ts +268 -0
  144. package/dist/internal/EntityOps.d.ts.map +1 -0
  145. package/dist/internal/EntityOps.js +153 -0
  146. package/dist/internal/EntityOps.js.map +1 -0
  147. package/dist/internal/EntitySchemas.d.ts +57 -0
  148. package/dist/internal/EntitySchemas.d.ts.map +1 -0
  149. package/dist/internal/EntitySchemas.js +299 -0
  150. package/dist/internal/EntitySchemas.js.map +1 -0
  151. package/dist/internal/EntityTypes.d.ts +128 -0
  152. package/dist/internal/EntityTypes.d.ts.map +1 -0
  153. package/dist/internal/EntityTypes.js +7 -0
  154. package/dist/internal/EntityTypes.js.map +1 -0
  155. package/dist/internal/Expr.d.ts +141 -0
  156. package/dist/internal/Expr.d.ts.map +1 -0
  157. package/dist/internal/Expr.js +332 -0
  158. package/dist/internal/Expr.js.map +1 -0
  159. package/dist/internal/PathBuilder.d.ts +88 -0
  160. package/dist/internal/PathBuilder.d.ts.map +1 -0
  161. package/dist/internal/PathBuilder.js +100 -0
  162. package/dist/internal/PathBuilder.js.map +1 -0
  163. package/dist/internal/TransactableOps.d.ts +25 -0
  164. package/dist/internal/TransactableOps.d.ts.map +1 -0
  165. package/dist/internal/TransactableOps.js +58 -0
  166. package/dist/internal/TransactableOps.js.map +1 -0
  167. package/dist/internal/sparse_check.d.ts +2 -0
  168. package/dist/internal/sparse_check.d.ts.map +1 -0
  169. package/dist/internal/sparse_check.js +196 -0
  170. package/dist/internal/sparse_check.js.map +1 -0
  171. package/package.json +71 -0
@@ -0,0 +1,155 @@
1
+ /**
2
+ * @internal Entity operation combinators — terminal functions and update combinators.
3
+ *
4
+ * Extracted from Entity.ts for decomposition. Not part of the public API.
5
+ */
6
+ import type { AttributeValue } from "@aws-sdk/client-dynamodb";
7
+ import { type Effect } from "effect";
8
+ import { type CascadeTarget, type EntityDelete, type EntityGet, type EntityOp, type EntityPut, type EntityUpdate, type ReturnValuesMode } from "./_EntityOps.js";
9
+ import type { CascadePartialFailure } from "./Errors.js";
10
+ import type { ConditionInput } from "./Expression.js";
11
+ /** Helper: extract Rec phantom type */
12
+ type ExtractRec<T> = T extends EntityOp<any, infer Rec, any, any> ? Rec : never;
13
+ /** Helper: extract E type */
14
+ type ExtractE<T> = T extends EntityOp<any, any, infer E, any> ? E : never;
15
+ /** Helper: extract R type */
16
+ type ExtractR<T> = T extends EntityOp<any, any, any, infer R> ? R : never;
17
+ /** Decode through model schema (default for yield*). Returns clean model class instance. */
18
+ export declare const asModel: <Self extends EntityOp<any, any, any, any>>(self: Self) => Effect.Effect<Self extends EntityOp<infer A, any, any, any> ? A : never, ExtractE<Self>, ExtractR<Self>>;
19
+ /** Decode through record schema (model + system fields). */
20
+ export declare const asRecord: <Self extends EntityOp<any, any, any, any>>(self: Self) => Effect.Effect<ExtractRec<Self>, ExtractE<Self>, ExtractR<Self>>;
21
+ /** Decode through item schema (model + system + keys + `__edd_e__`). Returns `Record<string, unknown>`. */
22
+ export declare const asItem: <Self extends EntityOp<any, any, any, any>>(self: Self) => Effect.Effect<globalThis.Record<string, unknown>, ExtractE<Self>, ExtractR<Self>>;
23
+ /** Return raw marshalled DynamoDB format (`Record<string, AttributeValue>`). No decode. */
24
+ export declare const asNative: <Self extends EntityOp<any, any, any, any>>(self: Self) => Effect.Effect<globalThis.Record<string, AttributeValue>, ExtractE<Self>, ExtractR<Self>>;
25
+ /**
26
+ * Set the fields to update.
27
+ *
28
+ * When updating GSI composite fields, the consumer is responsible for providing ALL
29
+ * composites for that GSI (fetch-merge pattern). If only some composites are provided,
30
+ * `extractComposites` in KeyComposer will throw during GSI key recomposition.
31
+ *
32
+ * When using `Entity.remove()` on a GSI composite attribute, the corresponding GSI
33
+ * key fields (pk/sk) are automatically removed so the item drops out of the sparse index.
34
+ */
35
+ export declare const set: {
36
+ <Updates extends globalThis.Record<string, unknown>>(updates: Updates): <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>) => EntityUpdate<A, Rec, U, E, R>;
37
+ <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>, updates: NoInfer<U>): EntityUpdate<A, Rec, U, E, R>;
38
+ };
39
+ /** Set the expected version for optimistic locking. */
40
+ export declare const expectedVersion: {
41
+ (version: number): <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>) => EntityUpdate<A, Rec, U, E, R>;
42
+ <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>, version: number): EntityUpdate<A, Rec, U, E, R>;
43
+ };
44
+ /**
45
+ * Enable consistent reads on an EntityGet operation.
46
+ * Call with no arguments to enable (defaults to true).
47
+ */
48
+ export declare const consistentRead: {
49
+ (): <A, Rec, E, R>(self: EntityGet<A, Rec, E, R>) => EntityGet<A, Rec, E, R>;
50
+ <A, Rec, E, R>(self: EntityGet<A, Rec, E, R>): EntityGet<A, Rec, E, R>;
51
+ };
52
+ /**
53
+ * Select specific attributes to return (ProjectionExpression) on an EntityGet.
54
+ * When projection is active, the result is a raw `Record<string, unknown>`
55
+ * instead of a decoded schema instance, since projected items may be partial.
56
+ */
57
+ export declare const project: {
58
+ (attributes: ReadonlyArray<string>): <A, Rec, E, R>(self: EntityGet<A, Rec, E, R>) => EntityGet<globalThis.Record<string, unknown>, globalThis.Record<string, unknown>, E, R>;
59
+ <A, Rec, E, R>(self: EntityGet<A, Rec, E, R>, attributes: ReadonlyArray<string>): EntityGet<globalThis.Record<string, unknown>, globalThis.Record<string, unknown>, E, R>;
60
+ };
61
+ /** @internal Helper type for condition-compatible operations */
62
+ type ConditionTarget = EntityPut<any, any, any, any> | EntityUpdate<any, any, any, any, any> | EntityDelete<any, any>;
63
+ /**
64
+ * Add a condition expression to a put, update, or delete operation.
65
+ * The condition is evaluated server-side by DynamoDB. If it fails,
66
+ * the operation returns a `ConditionalCheckFailed` error.
67
+ *
68
+ * For updates, the user condition is ANDed with any optimistic lock condition.
69
+ */
70
+ export declare const condition: {
71
+ (cond: ConditionInput): <T extends ConditionTarget>(self: T) => T;
72
+ <T extends ConditionTarget>(self: T, cond: ConditionInput): T;
73
+ };
74
+ /** @internal Helper type for returnValues-compatible operations */
75
+ type ReturnValuesTarget = EntityUpdate<any, any, any, any, any> | EntityDelete<any, any>;
76
+ /**
77
+ * Set the DynamoDB `ReturnValues` mode on an update or delete operation.
78
+ *
79
+ * Modes:
80
+ * - `"none"` — return nothing (default for delete)
81
+ * - `"allOld"` — return the item as it was before the operation
82
+ * - `"allNew"` — return the item as it is after the operation (default for update)
83
+ * - `"updatedOld"` — return only the updated attributes, with old values
84
+ * - `"updatedNew"` — return only the updated attributes, with new values
85
+ *
86
+ * For deletes, only `"none"` and `"allOld"` are valid DynamoDB modes.
87
+ */
88
+ export declare const returnValues: {
89
+ (mode: ReturnValuesMode): <T extends ReturnValuesTarget>(self: T) => T;
90
+ <T extends ReturnValuesTarget>(self: T, mode: ReturnValuesMode): T;
91
+ };
92
+ /**
93
+ * Remove one or more attributes from the item.
94
+ * Produces a DynamoDB `REMOVE` clause.
95
+ */
96
+ export declare const remove: {
97
+ (fields: ReadonlyArray<string>): <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>) => EntityUpdate<A, Rec, U, E, R>;
98
+ <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>, fields: ReadonlyArray<string>): EntityUpdate<A, Rec, U, E, R>;
99
+ };
100
+ /**
101
+ * Atomically add numeric values to attributes.
102
+ * Produces a DynamoDB `ADD` clause. If the attribute doesn't exist,
103
+ * it is initialized to the provided value.
104
+ */
105
+ export declare const add: {
106
+ (values: globalThis.Record<string, number>): <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>) => EntityUpdate<A, Rec, U, E, R>;
107
+ <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>, values: globalThis.Record<string, number>): EntityUpdate<A, Rec, U, E, R>;
108
+ };
109
+ /**
110
+ * Subtract numeric values from attributes.
111
+ * Synthesizes `SET #field = #field - :val` (DynamoDB has no native SUBTRACT).
112
+ */
113
+ export declare const subtract: {
114
+ (values: globalThis.Record<string, number>): <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>) => EntityUpdate<A, Rec, U, E, R>;
115
+ <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>, values: globalThis.Record<string, number>): EntityUpdate<A, Rec, U, E, R>;
116
+ };
117
+ /**
118
+ * Append elements to list attributes.
119
+ * Synthesizes `SET #field = list_append(#field, :val)`.
120
+ */
121
+ export declare const append: {
122
+ (values: globalThis.Record<string, ReadonlyArray<unknown>>): <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>) => EntityUpdate<A, Rec, U, E, R>;
123
+ <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>, values: globalThis.Record<string, ReadonlyArray<unknown>>): EntityUpdate<A, Rec, U, E, R>;
124
+ };
125
+ /**
126
+ * Delete elements from a set attribute.
127
+ * Produces a DynamoDB `DELETE` clause.
128
+ * The value should be a set (e.g., `{ tags: new Set(["old"]) }`).
129
+ */
130
+ export declare const deleteFromSet: {
131
+ (values: globalThis.Record<string, unknown>): <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>) => EntityUpdate<A, Rec, U, E, R>;
132
+ <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>, values: globalThis.Record<string, unknown>): EntityUpdate<A, Rec, U, E, R>;
133
+ };
134
+ /**
135
+ * Configure cascade updates to propagate source entity changes to target entities
136
+ * that embed it via `DynamoModel.ref`. After the source update completes, all matching
137
+ * target items are queried via their cascade GSI and updated with the new domain data.
138
+ *
139
+ * Default mode is "eventual" (batch updates, no item limit).
140
+ * Use `mode: "transactional"` for atomic cascade (max 100 items).
141
+ */
142
+ export declare const cascade: {
143
+ (config: {
144
+ readonly targets: ReadonlyArray<CascadeTarget>;
145
+ readonly filter?: globalThis.Record<string, unknown> | undefined;
146
+ readonly mode?: "eventual" | "transactional" | undefined;
147
+ }): <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E | CascadePartialFailure, R>) => EntityUpdate<A, Rec, U, E | CascadePartialFailure, R>;
148
+ <A, Rec, U, E, R>(self: EntityUpdate<A, Rec, U, E, R>, config: {
149
+ readonly targets: ReadonlyArray<CascadeTarget>;
150
+ readonly filter?: globalThis.Record<string, unknown> | undefined;
151
+ readonly mode?: "eventual" | "transactional" | undefined;
152
+ }): EntityUpdate<A, Rec, U, E | CascadePartialFailure, R>;
153
+ };
154
+ export {};
155
+ //# sourceMappingURL=_EntityCombinators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_EntityCombinators.d.ts","sourceRoot":"","sources":["../src/_EntityCombinators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * @internal Entity operation combinators — terminal functions and update combinators.
3
+ *
4
+ * Extracted from Entity.ts for decomposition. Not part of the public API.
5
+ */
6
+ import { Function as Fn } from "effect";
7
+ import { EntityDeleteImpl, EntityDeleteTypeId, EntityGetImpl, EntityOpTypeId, EntityPutImpl, EntityUpdateImpl, EntityUpdateTypeId, } from "./_EntityOps.js";
8
+ /** Decode through model schema (default for yield*). Returns clean model class instance. */
9
+ export const asModel = (self) => self._run("model");
10
+ /** Decode through record schema (model + system fields). */
11
+ export const asRecord = (self) => self._run("record");
12
+ /** Decode through item schema (model + system + keys + `__edd_e__`). Returns `Record<string, unknown>`. */
13
+ export const asItem = (self) => self._run("item");
14
+ /** Return raw marshalled DynamoDB format (`Record<string, AttributeValue>`). No decode. */
15
+ export const asNative = (self) => self._run("native");
16
+ // ---------------------------------------------------------------------------
17
+ // Update combinators — dual functions for pipe composition
18
+ //
19
+ // Cast rationale: Each combinator creates a new EntityUpdateImpl with updated
20
+ // state while preserving the phantom type parameters (A, Rec, U, E, R).
21
+ // The `_builder as any` is needed because the builder function's generic
22
+ // signature doesn't survive reconstruction — the runtime behavior is identical.
23
+ // The `as any` on the return bridges from the impl class to the interface type.
24
+ // ---------------------------------------------------------------------------
25
+ /**
26
+ * Set the fields to update.
27
+ *
28
+ * When updating GSI composite fields, the consumer is responsible for providing ALL
29
+ * composites for that GSI (fetch-merge pattern). If only some composites are provided,
30
+ * `extractComposites` in KeyComposer will throw during GSI key recomposition.
31
+ *
32
+ * When using `Entity.remove()` on a GSI composite attribute, the corresponding GSI
33
+ * key fields (pk/sk) are automatically removed so the item drops out of the sparse index.
34
+ */
35
+ export const set = Fn.dual(2, (self, updates) => {
36
+ return new EntityUpdateImpl(self._builder, { ...self._updateState, updates }, self._entity, self._key);
37
+ });
38
+ /** Set the expected version for optimistic locking. */
39
+ export const expectedVersion = Fn.dual(2, (self, version) => {
40
+ return new EntityUpdateImpl(self._builder, { ...self._updateState, expectedVersion: version }, self._entity, self._key);
41
+ });
42
+ /**
43
+ * Enable consistent reads on an EntityGet operation.
44
+ * Call with no arguments to enable (defaults to true).
45
+ */
46
+ export const consistentRead = Fn.dual((args) => args.length >= 1 &&
47
+ typeof args[0] === "object" &&
48
+ args[0] !== null &&
49
+ EntityOpTypeId in args[0], (self) => {
50
+ const impl = self;
51
+ return new EntityGetImpl(impl._builder, impl._entity, impl._key, true);
52
+ });
53
+ /**
54
+ * Select specific attributes to return (ProjectionExpression) on an EntityGet.
55
+ * When projection is active, the result is a raw `Record<string, unknown>`
56
+ * instead of a decoded schema instance, since projected items may be partial.
57
+ */
58
+ export const project = Fn.dual(2, (self, attributes) => {
59
+ const impl = self;
60
+ return new EntityGetImpl(impl._builder, impl._entity, impl._key, impl._consistentRead, attributes);
61
+ });
62
+ /**
63
+ * Add a condition expression to a put, update, or delete operation.
64
+ * The condition is evaluated server-side by DynamoDB. If it fails,
65
+ * the operation returns a `ConditionalCheckFailed` error.
66
+ *
67
+ * For updates, the user condition is ANDed with any optimistic lock condition.
68
+ */
69
+ export const condition = Fn.dual(2, (self, cond) => {
70
+ if (EntityDeleteTypeId in self) {
71
+ // EntityDelete
72
+ const impl = self;
73
+ return new EntityDeleteImpl(impl._builder, impl._entity, impl._key, cond, impl._returnValues);
74
+ }
75
+ if (EntityUpdateTypeId in self) {
76
+ // EntityUpdate
77
+ const impl = self;
78
+ return new EntityUpdateImpl(impl._builder, { ...impl._updateState, condition: cond }, impl._entity, impl._key);
79
+ }
80
+ // EntityPut
81
+ const impl = self;
82
+ return new EntityPutImpl(impl._builder, impl._entity, impl._input, cond);
83
+ });
84
+ /**
85
+ * Set the DynamoDB `ReturnValues` mode on an update or delete operation.
86
+ *
87
+ * Modes:
88
+ * - `"none"` — return nothing (default for delete)
89
+ * - `"allOld"` — return the item as it was before the operation
90
+ * - `"allNew"` — return the item as it is after the operation (default for update)
91
+ * - `"updatedOld"` — return only the updated attributes, with old values
92
+ * - `"updatedNew"` — return only the updated attributes, with new values
93
+ *
94
+ * For deletes, only `"none"` and `"allOld"` are valid DynamoDB modes.
95
+ */
96
+ export const returnValues = Fn.dual(2, (self, mode) => {
97
+ if (EntityDeleteTypeId in self) {
98
+ const impl = self;
99
+ return new EntityDeleteImpl(impl._builder, impl._entity, impl._key, impl._condition, mode);
100
+ }
101
+ // EntityUpdate
102
+ const impl = self;
103
+ return new EntityUpdateImpl(impl._builder, { ...impl._updateState, returnValues: mode }, impl._entity, impl._key);
104
+ });
105
+ /**
106
+ * Remove one or more attributes from the item.
107
+ * Produces a DynamoDB `REMOVE` clause.
108
+ */
109
+ export const remove = Fn.dual(2, (self, fields) => {
110
+ const existing = self._updateState.remove ?? [];
111
+ return new EntityUpdateImpl(self._builder, { ...self._updateState, remove: [...existing, ...fields] }, self._entity, self._key);
112
+ });
113
+ /**
114
+ * Atomically add numeric values to attributes.
115
+ * Produces a DynamoDB `ADD` clause. If the attribute doesn't exist,
116
+ * it is initialized to the provided value.
117
+ */
118
+ export const add = Fn.dual(2, (self, values) => {
119
+ const existing = self._updateState.add ?? {};
120
+ return new EntityUpdateImpl(self._builder, { ...self._updateState, add: { ...existing, ...values } }, self._entity, self._key);
121
+ });
122
+ /**
123
+ * Subtract numeric values from attributes.
124
+ * Synthesizes `SET #field = #field - :val` (DynamoDB has no native SUBTRACT).
125
+ */
126
+ export const subtract = Fn.dual(2, (self, values) => {
127
+ const existing = self._updateState.subtract ?? {};
128
+ return new EntityUpdateImpl(self._builder, { ...self._updateState, subtract: { ...existing, ...values } }, self._entity, self._key);
129
+ });
130
+ /**
131
+ * Append elements to list attributes.
132
+ * Synthesizes `SET #field = list_append(#field, :val)`.
133
+ */
134
+ export const append = Fn.dual(2, (self, values) => {
135
+ const existing = self._updateState.append ?? {};
136
+ return new EntityUpdateImpl(self._builder, { ...self._updateState, append: { ...existing, ...values } }, self._entity, self._key);
137
+ });
138
+ /**
139
+ * Delete elements from a set attribute.
140
+ * Produces a DynamoDB `DELETE` clause.
141
+ * The value should be a set (e.g., `{ tags: new Set(["old"]) }`).
142
+ */
143
+ export const deleteFromSet = Fn.dual(2, (self, values) => {
144
+ const existing = self._updateState.deleteFromSet ?? {};
145
+ return new EntityUpdateImpl(self._builder, { ...self._updateState, deleteFromSet: { ...existing, ...values } }, self._entity, self._key);
146
+ });
147
+ /**
148
+ * Configure cascade updates to propagate source entity changes to target entities
149
+ * that embed it via `DynamoModel.ref`. After the source update completes, all matching
150
+ * target items are queried via their cascade GSI and updated with the new domain data.
151
+ *
152
+ * Default mode is "eventual" (batch updates, no item limit).
153
+ * Use `mode: "transactional"` for atomic cascade (max 100 items).
154
+ */
155
+ export const cascade = Fn.dual(2, (self, config) => {
156
+ return new EntityUpdateImpl(self._builder, { ...self._updateState, cascade: config }, self._entity, self._key);
157
+ });
158
+ //# sourceMappingURL=_EntityCombinators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_EntityCombinators.js","sourceRoot":"","sources":["../src/_EntityCombinators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @internal Entity configuration types — system field and constraint config.
3
+ *
4
+ * Extracted from Entity.ts for decomposition. Not part of the public API.
5
+ */
6
+ import type { Duration, Schema } from "effect";
7
+ /**
8
+ * Per-timestamp field configuration.
9
+ *
10
+ * - `string` — override field name only (default DateString schema)
11
+ * - `Schema.Top` — override schema only (default field name)
12
+ * - `{ field?, schema? }` — override both field name and schema
13
+ */
14
+ export type TimestampFieldConfig = string | Schema.Top | {
15
+ readonly field?: string | undefined;
16
+ readonly schema?: Schema.Top | undefined;
17
+ };
18
+ /**
19
+ * Timestamp configuration for automatic `createdAt` / `updatedAt` fields.
20
+ *
21
+ * - `true` — add `createdAt` and `updatedAt` with default names and ISO string storage
22
+ * - `{ created?, updated? }` — per-field configuration (string, schema, or object)
23
+ * - `false` / `undefined` — no timestamps
24
+ */
25
+ export type TimestampsConfig = boolean | {
26
+ readonly created?: TimestampFieldConfig | undefined;
27
+ readonly updated?: TimestampFieldConfig | undefined;
28
+ };
29
+ /**
30
+ * Optimistic locking configuration via an auto-incrementing version field.
31
+ *
32
+ * - `true` — add a `version` field with default name
33
+ * - `{ field?, retain?, ttl? }` — override field name and retention behavior
34
+ * - `false` / `undefined` — no versioning
35
+ */
36
+ export type VersionedConfig = boolean | {
37
+ readonly field?: string | undefined;
38
+ readonly retain?: boolean | undefined;
39
+ readonly ttl?: Duration.Duration | undefined;
40
+ };
41
+ /**
42
+ * Soft-delete configuration. When enabled, deletes mark items rather than removing them.
43
+ *
44
+ * - `true` — enable soft delete with defaults
45
+ * - `{ ttl?, preserveUnique? }` — configure TTL cleanup and unique constraint behavior
46
+ * - `false` / `undefined` — hard deletes
47
+ */
48
+ export type SoftDeleteConfig = boolean | {
49
+ readonly ttl?: Duration.Duration | undefined;
50
+ readonly preserveUnique?: boolean | undefined;
51
+ };
52
+ /** An array of model field names that together form a unique constraint. */
53
+ export type UniqueFieldsDef = ReadonlyArray<string>;
54
+ /**
55
+ * A unique constraint definition — either a simple field list or an object
56
+ * with additional options like TTL for sentinel items.
57
+ */
58
+ export type UniqueConstraintDef = UniqueFieldsDef | {
59
+ readonly fields: UniqueFieldsDef;
60
+ readonly ttl?: Duration.Duration | undefined;
61
+ };
62
+ /**
63
+ * Map of named unique constraints. Each key is the constraint name,
64
+ * each value defines which fields must be globally unique together.
65
+ *
66
+ * Enforced via DynamoDB transaction sentinel items.
67
+ */
68
+ export type UniqueConfig = globalThis.Record<string, UniqueConstraintDef>;
69
+ /**
70
+ * Per-ref cascade index configuration. Tells Entity.make() which physical GSI
71
+ * to use for auto-generated cascade indexes.
72
+ *
73
+ * The library fills in the PK/SK composites automatically from the resolved ref
74
+ * and primary key — the consumer only specifies physical GSI details.
75
+ */
76
+ export interface CascadeIndexConfig {
77
+ /** Physical GSI name (e.g., "gsi3") */
78
+ readonly index: string;
79
+ /** PK field descriptor */
80
+ readonly pk: {
81
+ readonly field: string;
82
+ };
83
+ /** SK field descriptor */
84
+ readonly sk: {
85
+ readonly field: string;
86
+ };
87
+ }
88
+ /**
89
+ * A ref value in the `refs` config — an object with the entity and optional cascade index config.
90
+ *
91
+ * Simple: `refs: { player: { entity: Players } }`
92
+ * Cascade: `refs: { player: { entity: Players, cascade: { index: "gsi3", pk: { field: "gsi3pk" }, sk: { field: "gsi3sk" } } } }`
93
+ */
94
+ export interface RefValue {
95
+ readonly entity: {
96
+ readonly _tag: "Entity";
97
+ };
98
+ readonly cascade?: CascadeIndexConfig;
99
+ }
100
+ //# sourceMappingURL=_EntityConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_EntityConfig.d.ts","sourceRoot":"","sources":["../src/_EntityConfig.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAM9C;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,MAAM,CAAC,GAAG,GACV;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,SAAS,CAAA;CAAE,CAAA;AAErF;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP;IACE,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAA;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAA;CACpD,CAAA;AAEL;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GACvB,OAAO,GACP;IACE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;CAC7C,CAAA;AAEL;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP;IACE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9C,CAAA;AAEL,4EAA4E;AAC5E,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;AAEnD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf;IAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;CAAE,CAAA;AAEtF;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAEzE;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAA;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAA;CACtC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @internal Entity configuration types — system field and constraint config.
3
+ *
4
+ * Extracted from Entity.ts for decomposition. Not part of the public API.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=_EntityConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_EntityConfig.js","sourceRoot":"","sources":["../src/_EntityConfig.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}