@farukada/aws-langgraph-dynamodb-ts 1.0.0-rc.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1820 -290
- package/dist/cjs/backfill/backfill.d.ts +171 -0
- package/dist/cjs/backfill/backfill.js +177 -0
- package/dist/cjs/checkpointer/actions/delete-thread.d.ts +50 -0
- package/dist/cjs/checkpointer/actions/delete-thread.js +26 -0
- package/dist/cjs/checkpointer/actions/get-tuple.d.ts +36 -0
- package/dist/cjs/checkpointer/actions/get-tuple.js +22 -0
- package/dist/cjs/checkpointer/actions/list.d.ts +55 -0
- package/dist/cjs/checkpointer/actions/list.js +70 -0
- package/dist/cjs/checkpointer/actions/put-writes.d.ts +49 -0
- package/dist/cjs/checkpointer/actions/put-writes.js +21 -0
- package/dist/cjs/checkpointer/actions/put.d.ts +95 -0
- package/dist/cjs/checkpointer/actions/put.js +79 -0
- package/dist/cjs/checkpointer/internal/delta-history.d.ts +124 -0
- package/dist/cjs/checkpointer/internal/delta-history.js +131 -0
- package/dist/cjs/checkpointer/internal/listing.d.ts +149 -0
- package/dist/cjs/checkpointer/internal/listing.js +104 -0
- package/dist/cjs/checkpointer/internal/parse.d.ts +298 -0
- package/dist/cjs/checkpointer/internal/parse.js +184 -0
- package/dist/cjs/checkpointer/internal/pending-writes.d.ts +314 -0
- package/dist/cjs/checkpointer/internal/pending-writes.js +241 -0
- package/dist/cjs/checkpointer/internal/read.d.ts +135 -0
- package/dist/cjs/checkpointer/internal/read.js +132 -0
- package/dist/cjs/checkpointer/internal/rows.d.ts +644 -0
- package/dist/cjs/checkpointer/internal/rows.js +356 -0
- package/dist/cjs/checkpointer/internal/setup.d.ts +47 -0
- package/dist/cjs/checkpointer/internal/setup.js +25 -0
- package/dist/cjs/checkpointer/saver.d.ts +306 -0
- package/dist/cjs/checkpointer/saver.js +56 -0
- package/dist/cjs/checkpointer/types.d.ts +51 -0
- package/dist/cjs/factory/factory.d.ts +154 -0
- package/dist/cjs/factory/factory.js +137 -0
- package/dist/{factory → cjs/factory}/types.d.ts +33 -14
- package/dist/cjs/history/actions/add-messages.d.ts +51 -0
- package/dist/cjs/history/actions/add-messages.js +17 -0
- package/dist/cjs/history/actions/clear.d.ts +52 -0
- package/dist/cjs/history/actions/clear.js +29 -0
- package/dist/cjs/history/actions/get-messages.d.ts +60 -0
- package/dist/cjs/history/actions/get-messages.js +58 -0
- package/dist/cjs/history/actions/list-sessions.d.ts +55 -0
- package/dist/cjs/history/actions/list-sessions.js +67 -0
- package/dist/cjs/history/actions/reconcile-count.d.ts +49 -0
- package/dist/cjs/history/actions/reconcile-count.js +8 -0
- package/dist/cjs/history/chat-message-history.d.ts +267 -0
- package/dist/cjs/history/chat-message-history.js +61 -0
- package/dist/cjs/history/internal/append.d.ts +244 -0
- package/dist/cjs/history/internal/append.js +267 -0
- package/dist/cjs/history/internal/message-read.d.ts +84 -0
- package/dist/cjs/history/internal/message-read.js +93 -0
- package/dist/cjs/history/internal/parse.d.ts +153 -0
- package/dist/cjs/history/internal/parse.js +113 -0
- package/dist/cjs/history/internal/rows.d.ts +196 -0
- package/dist/cjs/history/internal/rows.js +96 -0
- package/dist/cjs/history/internal/session.d.ts +350 -0
- package/dist/cjs/history/internal/session.js +296 -0
- package/dist/cjs/history/internal/setup.d.ts +64 -0
- package/dist/cjs/history/internal/setup.js +60 -0
- package/dist/cjs/history/session-adapter.d.ts +112 -0
- package/dist/cjs/history/session-adapter.js +38 -0
- package/dist/cjs/history/types.d.ts +102 -0
- package/dist/cjs/index.d.ts +53 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/shared/adapter.d.ts +146 -0
- package/dist/cjs/shared/adapter.js +70 -0
- package/dist/cjs/shared/clock.d.ts +52 -0
- package/dist/cjs/shared/clock.js +14 -0
- package/dist/cjs/shared/codec/codec.d.ts +336 -0
- package/dist/cjs/shared/codec/codec.js +162 -0
- package/dist/cjs/shared/codec/compression.d.ts +66 -0
- package/dist/cjs/shared/codec/compression.js +45 -0
- package/dist/cjs/shared/codec/json-serde.d.ts +80 -0
- package/dist/cjs/shared/codec/json-serde.js +58 -0
- package/dist/{shared → cjs/shared}/codec/s3/client-types.d.ts +22 -2
- package/dist/{shared → cjs/shared}/codec/s3/client-types.js +0 -1
- package/dist/cjs/shared/codec/s3/client.d.ts +63 -0
- package/dist/cjs/shared/codec/s3/client.js +78 -0
- package/dist/cjs/shared/codec/s3/config.d.ts +260 -0
- package/dist/cjs/shared/codec/s3/config.js +92 -0
- package/dist/cjs/shared/codec/s3/lifecycle.d.ts +220 -0
- package/dist/cjs/shared/codec/s3/lifecycle.js +223 -0
- package/dist/cjs/shared/codec/s3/offloader.d.ts +428 -0
- package/dist/cjs/shared/codec/s3/offloader.js +289 -0
- package/dist/cjs/shared/concurrency.d.ts +43 -0
- package/dist/{shared → cjs/shared}/concurrency.js +10 -9
- package/dist/cjs/shared/dynamodb/abort.d.ts +47 -0
- package/dist/cjs/shared/dynamodb/abort.js +16 -0
- package/dist/cjs/shared/dynamodb/batch-write.d.ts +86 -0
- package/dist/cjs/shared/dynamodb/batch-write.js +79 -0
- package/dist/cjs/shared/dynamodb/cancellation.d.ts +124 -0
- package/dist/cjs/shared/dynamodb/cancellation.js +37 -0
- package/dist/cjs/shared/dynamodb/client.d.ts +177 -0
- package/dist/{shared → cjs/shared}/dynamodb/client.js +12 -14
- package/dist/cjs/shared/dynamodb/idempotent-write.d.ts +596 -0
- package/dist/cjs/shared/dynamodb/idempotent-write.js +173 -0
- package/dist/cjs/shared/dynamodb/paginate.d.ts +111 -0
- package/dist/cjs/shared/dynamodb/paginate.js +90 -0
- package/dist/cjs/shared/dynamodb/partition-delete.d.ts +204 -0
- package/dist/cjs/shared/dynamodb/partition-delete.js +177 -0
- package/dist/cjs/shared/dynamodb/recency-index.d.ts +243 -0
- package/dist/cjs/shared/dynamodb/recency-index.js +146 -0
- package/dist/cjs/shared/dynamodb/retry.d.ts +317 -0
- package/dist/cjs/shared/dynamodb/retry.js +193 -0
- package/dist/cjs/shared/dynamodb/row-size.d.ts +33 -0
- package/dist/cjs/shared/dynamodb/row-size.js +30 -0
- package/dist/cjs/shared/dynamodb/table-schema.d.ts +199 -0
- package/dist/cjs/shared/dynamodb/table-schema.js +52 -0
- package/dist/cjs/shared/errors/base-error.d.ts +231 -0
- package/dist/cjs/shared/errors/base-error.js +73 -0
- package/dist/cjs/shared/errors/boundary.d.ts +86 -0
- package/dist/cjs/shared/errors/boundary.js +61 -0
- package/dist/cjs/shared/errors/classify.d.ts +206 -0
- package/dist/cjs/shared/errors/classify.js +232 -0
- package/dist/cjs/shared/errors/error-code.d.ts +95 -0
- package/dist/{shared → cjs/shared}/errors/error-code.js +12 -2
- package/dist/cjs/shared/errors/errors.d.ts +233 -0
- package/dist/cjs/shared/errors/errors.js +123 -0
- package/dist/cjs/shared/logging/logger.d.ts +80 -0
- package/dist/cjs/shared/logging/logger.js +30 -0
- package/dist/cjs/shared/logging/redaction.d.ts +123 -0
- package/dist/cjs/shared/logging/redaction.js +145 -0
- package/dist/cjs/shared/logging/secret-patterns.d.ts +227 -0
- package/dist/cjs/shared/logging/secret-patterns.js +93 -0
- package/dist/cjs/shared/logging/truncate.d.ts +197 -0
- package/dist/cjs/shared/logging/truncate.js +31 -0
- package/dist/cjs/shared/options.d.ts +100 -0
- package/dist/cjs/shared/ulid.d.ts +80 -0
- package/dist/{shared → cjs/shared}/ulid.js +7 -21
- package/dist/cjs/shared/validation/collaborators.d.ts +160 -0
- package/dist/cjs/shared/validation/collaborators.js +79 -0
- package/dist/cjs/shared/validation/option-shape.d.ts +91 -0
- package/dist/cjs/shared/validation/option-shape.js +31 -0
- package/dist/cjs/shared/validation/options.d.ts +145 -0
- package/dist/cjs/shared/validation/options.js +166 -0
- package/dist/cjs/shared/validation/primitives.d.ts +292 -0
- package/dist/cjs/shared/validation/primitives.js +114 -0
- package/dist/cjs/shared/validation/ttl.d.ts +94 -0
- package/dist/cjs/shared/validation/ttl.js +52 -0
- package/dist/cjs/store/actions/list-namespaces.d.ts +79 -0
- package/dist/cjs/store/actions/list-namespaces.js +92 -0
- package/dist/cjs/store/actions/put.d.ts +43 -0
- package/dist/cjs/store/actions/put.js +49 -0
- package/dist/cjs/store/actions/reconcile-vector-index.d.ts +38 -0
- package/dist/cjs/store/actions/reconcile-vector-index.js +13 -0
- package/dist/cjs/store/actions/search.d.ts +38 -0
- package/dist/cjs/store/actions/search.js +26 -0
- package/dist/cjs/store/internal/batch-plan.d.ts +56 -0
- package/dist/cjs/store/internal/batch-plan.js +32 -0
- package/dist/cjs/store/internal/filter.d.ts +43 -0
- package/dist/cjs/store/internal/filter.js +64 -0
- package/dist/cjs/store/internal/get-item.d.ts +77 -0
- package/dist/cjs/store/internal/get-item.js +58 -0
- package/dist/cjs/store/internal/item-write.d.ts +270 -0
- package/dist/cjs/store/internal/item-write.js +181 -0
- package/dist/cjs/store/internal/parse.d.ts +230 -0
- package/dist/cjs/store/internal/parse.js +180 -0
- package/dist/cjs/store/internal/rows.d.ts +359 -0
- package/dist/cjs/store/internal/rows.js +166 -0
- package/dist/cjs/store/internal/semantic-search.d.ts +168 -0
- package/dist/{store/internal/text-path.js → cjs/store/internal/semantic-search.js} +92 -28
- package/dist/cjs/store/internal/setup.d.ts +96 -0
- package/dist/cjs/store/internal/setup.js +103 -0
- package/dist/cjs/store/internal/table-search.d.ts +100 -0
- package/dist/cjs/store/internal/table-search.js +123 -0
- package/dist/cjs/store/internal/vector-index.d.ts +258 -0
- package/dist/cjs/store/internal/vector-index.js +269 -0
- package/dist/cjs/store/store.d.ts +329 -0
- package/dist/cjs/store/store.js +97 -0
- package/dist/cjs/store/types.d.ts +111 -0
- package/dist/cjs/store/vector-backend.d.ts +104 -0
- package/dist/cjs/store/vector-backend.js +4 -0
- package/dist/esm/backfill/backfill.d.ts +171 -0
- package/dist/esm/backfill/backfill.js +170 -0
- package/dist/esm/checkpointer/actions/delete-thread.d.ts +50 -0
- package/dist/esm/checkpointer/actions/delete-thread.js +23 -0
- package/dist/esm/checkpointer/actions/get-tuple.d.ts +36 -0
- package/dist/esm/checkpointer/actions/get-tuple.js +19 -0
- package/dist/esm/checkpointer/actions/list.d.ts +55 -0
- package/dist/esm/checkpointer/actions/list.js +67 -0
- package/dist/esm/checkpointer/actions/put-writes.d.ts +49 -0
- package/dist/esm/checkpointer/actions/put-writes.js +18 -0
- package/dist/esm/checkpointer/actions/put.d.ts +95 -0
- package/dist/esm/checkpointer/actions/put.js +75 -0
- package/dist/esm/checkpointer/internal/delta-history.d.ts +124 -0
- package/dist/esm/checkpointer/internal/delta-history.js +126 -0
- package/dist/esm/checkpointer/internal/listing.d.ts +149 -0
- package/dist/esm/checkpointer/internal/listing.js +95 -0
- package/dist/esm/checkpointer/internal/parse.d.ts +298 -0
- package/dist/esm/checkpointer/internal/parse.js +169 -0
- package/dist/esm/checkpointer/internal/pending-writes.d.ts +314 -0
- package/dist/esm/checkpointer/internal/pending-writes.js +229 -0
- package/dist/esm/checkpointer/internal/read.d.ts +135 -0
- package/dist/esm/checkpointer/internal/read.js +125 -0
- package/dist/esm/checkpointer/internal/rows.d.ts +644 -0
- package/dist/esm/checkpointer/internal/rows.js +323 -0
- package/dist/esm/checkpointer/internal/setup.d.ts +47 -0
- package/dist/esm/checkpointer/internal/setup.js +21 -0
- package/dist/esm/checkpointer/saver.d.ts +306 -0
- package/dist/esm/checkpointer/saver.js +52 -0
- package/dist/esm/checkpointer/types.d.ts +51 -0
- package/dist/esm/checkpointer/types.js +1 -0
- package/dist/esm/factory/factory.d.ts +154 -0
- package/dist/esm/factory/factory.js +133 -0
- package/dist/esm/factory/types.d.ts +76 -0
- package/dist/esm/factory/types.js +1 -0
- package/dist/esm/history/actions/add-messages.d.ts +51 -0
- package/dist/esm/history/actions/add-messages.js +14 -0
- package/dist/esm/history/actions/clear.d.ts +52 -0
- package/dist/esm/history/actions/clear.js +26 -0
- package/dist/esm/history/actions/get-messages.d.ts +60 -0
- package/dist/esm/history/actions/get-messages.js +55 -0
- package/dist/esm/history/actions/list-sessions.d.ts +55 -0
- package/dist/esm/history/actions/list-sessions.js +64 -0
- package/dist/esm/history/actions/reconcile-count.d.ts +49 -0
- package/dist/esm/history/actions/reconcile-count.js +5 -0
- package/dist/esm/history/chat-message-history.d.ts +267 -0
- package/dist/esm/history/chat-message-history.js +57 -0
- package/dist/esm/history/internal/append.d.ts +244 -0
- package/dist/esm/history/internal/append.js +259 -0
- package/dist/esm/history/internal/message-read.d.ts +84 -0
- package/dist/esm/history/internal/message-read.js +89 -0
- package/dist/esm/history/internal/parse.d.ts +153 -0
- package/dist/esm/history/internal/parse.js +105 -0
- package/dist/esm/history/internal/rows.d.ts +196 -0
- package/dist/esm/history/internal/rows.js +83 -0
- package/dist/esm/history/internal/session.d.ts +350 -0
- package/dist/esm/history/internal/session.js +285 -0
- package/dist/esm/history/internal/setup.d.ts +64 -0
- package/dist/esm/history/internal/setup.js +56 -0
- package/dist/esm/history/session-adapter.d.ts +112 -0
- package/dist/esm/history/session-adapter.js +34 -0
- package/dist/esm/history/types.d.ts +102 -0
- package/dist/esm/history/types.js +1 -0
- package/dist/esm/index.d.ts +53 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/shared/adapter.d.ts +146 -0
- package/dist/esm/shared/adapter.js +65 -0
- package/dist/esm/shared/clock.d.ts +52 -0
- package/dist/esm/shared/clock.js +9 -0
- package/dist/esm/shared/codec/codec.d.ts +336 -0
- package/dist/esm/shared/codec/codec.js +150 -0
- package/dist/esm/shared/codec/compression.d.ts +66 -0
- package/dist/esm/shared/codec/compression.js +40 -0
- package/dist/esm/shared/codec/json-serde.d.ts +80 -0
- package/dist/esm/shared/codec/json-serde.js +54 -0
- package/dist/esm/shared/codec/s3/client-types.d.ts +54 -0
- package/dist/esm/shared/codec/s3/client-types.js +3 -0
- package/dist/esm/shared/codec/s3/client.d.ts +63 -0
- package/dist/esm/shared/codec/s3/client.js +40 -0
- package/dist/esm/shared/codec/s3/config.d.ts +260 -0
- package/dist/esm/shared/codec/s3/config.js +79 -0
- package/dist/esm/shared/codec/s3/lifecycle.d.ts +220 -0
- package/dist/esm/shared/codec/s3/lifecycle.js +214 -0
- package/dist/esm/shared/codec/s3/offloader.d.ts +428 -0
- package/dist/esm/shared/codec/s3/offloader.js +278 -0
- package/dist/esm/shared/concurrency.d.ts +43 -0
- package/dist/esm/shared/concurrency.js +27 -0
- package/dist/esm/shared/dynamodb/abort.d.ts +47 -0
- package/dist/esm/shared/dynamodb/abort.js +12 -0
- package/dist/esm/shared/dynamodb/batch-write.d.ts +86 -0
- package/dist/esm/shared/dynamodb/batch-write.js +74 -0
- package/dist/esm/shared/dynamodb/cancellation.d.ts +124 -0
- package/dist/esm/shared/dynamodb/cancellation.js +30 -0
- package/dist/esm/shared/dynamodb/client.d.ts +177 -0
- package/dist/esm/shared/dynamodb/client.js +35 -0
- package/dist/esm/shared/dynamodb/idempotent-write.d.ts +596 -0
- package/dist/esm/shared/dynamodb/idempotent-write.js +153 -0
- package/dist/esm/shared/dynamodb/paginate.d.ts +111 -0
- package/dist/esm/shared/dynamodb/paginate.js +84 -0
- package/dist/esm/shared/dynamodb/partition-delete.d.ts +204 -0
- package/dist/esm/shared/dynamodb/partition-delete.js +171 -0
- package/dist/esm/shared/dynamodb/recency-index.d.ts +243 -0
- package/dist/esm/shared/dynamodb/recency-index.js +136 -0
- package/dist/esm/shared/dynamodb/retry.d.ts +317 -0
- package/dist/esm/shared/dynamodb/retry.js +180 -0
- package/dist/esm/shared/dynamodb/row-size.d.ts +33 -0
- package/dist/esm/shared/dynamodb/row-size.js +26 -0
- package/dist/esm/shared/dynamodb/table-schema.d.ts +199 -0
- package/dist/esm/shared/dynamodb/table-schema.js +43 -0
- package/dist/esm/shared/errors/base-error.d.ts +231 -0
- package/dist/esm/shared/errors/base-error.js +64 -0
- package/dist/esm/shared/errors/boundary.d.ts +86 -0
- package/dist/esm/shared/errors/boundary.js +54 -0
- package/dist/esm/shared/errors/classify.d.ts +206 -0
- package/dist/esm/shared/errors/classify.js +220 -0
- package/dist/esm/shared/errors/error-code.d.ts +95 -0
- package/dist/esm/shared/errors/error-code.js +24 -0
- package/dist/esm/shared/errors/errors.d.ts +233 -0
- package/dist/esm/shared/errors/errors.js +110 -0
- package/dist/esm/shared/logging/logger.d.ts +80 -0
- package/dist/esm/shared/logging/logger.js +25 -0
- package/dist/esm/shared/logging/redaction.d.ts +123 -0
- package/dist/esm/shared/logging/redaction.js +140 -0
- package/dist/esm/shared/logging/secret-patterns.d.ts +227 -0
- package/dist/esm/shared/logging/secret-patterns.js +83 -0
- package/dist/esm/shared/logging/truncate.d.ts +197 -0
- package/dist/esm/shared/logging/truncate.js +25 -0
- package/dist/esm/shared/options.d.ts +100 -0
- package/dist/esm/shared/options.js +1 -0
- package/dist/esm/shared/ulid.d.ts +80 -0
- package/dist/esm/shared/ulid.js +77 -0
- package/dist/esm/shared/validation/collaborators.d.ts +160 -0
- package/dist/esm/shared/validation/collaborators.js +70 -0
- package/dist/esm/shared/validation/option-shape.d.ts +91 -0
- package/dist/esm/shared/validation/option-shape.js +24 -0
- package/dist/esm/shared/validation/options.d.ts +145 -0
- package/dist/esm/shared/validation/options.js +156 -0
- package/dist/esm/shared/validation/primitives.d.ts +292 -0
- package/dist/esm/shared/validation/primitives.js +100 -0
- package/dist/esm/shared/validation/ttl.d.ts +94 -0
- package/dist/esm/shared/validation/ttl.js +46 -0
- package/dist/esm/store/actions/list-namespaces.d.ts +79 -0
- package/dist/esm/store/actions/list-namespaces.js +86 -0
- package/dist/esm/store/actions/put.d.ts +43 -0
- package/dist/esm/store/actions/put.js +46 -0
- package/dist/esm/store/actions/reconcile-vector-index.d.ts +38 -0
- package/dist/esm/store/actions/reconcile-vector-index.js +10 -0
- package/dist/esm/store/actions/search.d.ts +38 -0
- package/dist/esm/store/actions/search.js +23 -0
- package/dist/esm/store/internal/batch-plan.d.ts +56 -0
- package/dist/esm/store/internal/batch-plan.js +28 -0
- package/dist/esm/store/internal/filter.d.ts +43 -0
- package/dist/esm/store/internal/filter.js +60 -0
- package/dist/esm/store/internal/get-item.d.ts +77 -0
- package/dist/esm/store/internal/get-item.js +54 -0
- package/dist/esm/store/internal/item-write.d.ts +270 -0
- package/dist/esm/store/internal/item-write.js +173 -0
- package/dist/esm/store/internal/parse.d.ts +230 -0
- package/dist/esm/store/internal/parse.js +169 -0
- package/dist/esm/store/internal/rows.d.ts +359 -0
- package/dist/esm/store/internal/rows.js +147 -0
- package/dist/esm/store/internal/semantic-search.d.ts +168 -0
- package/dist/esm/store/internal/semantic-search.js +200 -0
- package/dist/esm/store/internal/setup.d.ts +96 -0
- package/dist/esm/store/internal/setup.js +98 -0
- package/dist/esm/store/internal/table-search.d.ts +100 -0
- package/dist/esm/store/internal/table-search.js +119 -0
- package/dist/esm/store/internal/vector-index.d.ts +258 -0
- package/dist/esm/store/internal/vector-index.js +256 -0
- package/dist/esm/store/store.d.ts +329 -0
- package/dist/esm/store/store.js +93 -0
- package/dist/esm/store/types.d.ts +111 -0
- package/dist/esm/store/types.js +1 -0
- package/dist/esm/store/vector-backend.d.ts +104 -0
- package/dist/esm/store/vector-backend.js +1 -0
- package/package.json +68 -46
- package/dist/checkpointer/actions/delete-thread.d.ts +0 -10
- package/dist/checkpointer/actions/delete-thread.js +0 -38
- package/dist/checkpointer/actions/get-tuple.d.ts +0 -11
- package/dist/checkpointer/actions/get-tuple.js +0 -25
- package/dist/checkpointer/actions/list.d.ts +0 -20
- package/dist/checkpointer/actions/list.js +0 -113
- package/dist/checkpointer/actions/put-writes.d.ts +0 -15
- package/dist/checkpointer/actions/put-writes.js +0 -62
- package/dist/checkpointer/actions/put.d.ts +0 -17
- package/dist/checkpointer/actions/put.js +0 -73
- package/dist/checkpointer/internal/assemble.d.ts +0 -17
- package/dist/checkpointer/internal/assemble.js +0 -38
- package/dist/checkpointer/internal/checkpoint-write-verify.d.ts +0 -24
- package/dist/checkpointer/internal/checkpoint-write-verify.js +0 -67
- package/dist/checkpointer/internal/configurable.d.ts +0 -12
- package/dist/checkpointer/internal/configurable.js +0 -24
- package/dist/checkpointer/internal/fetch.d.ts +0 -19
- package/dist/checkpointer/internal/fetch.js +0 -88
- package/dist/checkpointer/internal/filter-match.d.ts +0 -13
- package/dist/checkpointer/internal/filter-match.js +0 -15
- package/dist/checkpointer/internal/item-reader.d.ts +0 -66
- package/dist/checkpointer/internal/item-reader.js +0 -113
- package/dist/checkpointer/internal/item-writer.d.ts +0 -35
- package/dist/checkpointer/internal/item-writer.js +0 -107
- package/dist/checkpointer/internal/keys.d.ts +0 -41
- package/dist/checkpointer/internal/keys.js +0 -117
- package/dist/checkpointer/internal/list-scope.d.ts +0 -61
- package/dist/checkpointer/internal/list-scope.js +0 -108
- package/dist/checkpointer/internal/pending-sends.d.ts +0 -13
- package/dist/checkpointer/internal/pending-sends.js +0 -29
- package/dist/checkpointer/internal/query.d.ts +0 -21
- package/dist/checkpointer/internal/query.js +0 -42
- package/dist/checkpointer/internal/regular-write.d.ts +0 -28
- package/dist/checkpointer/internal/regular-write.js +0 -66
- package/dist/checkpointer/internal/setup.d.ts +0 -33
- package/dist/checkpointer/internal/setup.js +0 -38
- package/dist/checkpointer/internal/special-write-cas.d.ts +0 -29
- package/dist/checkpointer/internal/special-write-cas.js +0 -104
- package/dist/checkpointer/internal/special-write-cleanup.d.ts +0 -23
- package/dist/checkpointer/internal/special-write-cleanup.js +0 -50
- package/dist/checkpointer/internal/special-write-verify.d.ts +0 -53
- package/dist/checkpointer/internal/special-write-verify.js +0 -80
- package/dist/checkpointer/internal/stored-channels.d.ts +0 -31
- package/dist/checkpointer/internal/stored-channels.js +0 -70
- package/dist/checkpointer/internal/validation.d.ts +0 -18
- package/dist/checkpointer/internal/validation.js +0 -40
- package/dist/checkpointer/internal/write-guard.d.ts +0 -20
- package/dist/checkpointer/internal/write-guard.js +0 -48
- package/dist/checkpointer/internal/write-index.d.ts +0 -36
- package/dist/checkpointer/internal/write-index.js +0 -41
- package/dist/checkpointer/saver.d.ts +0 -70
- package/dist/checkpointer/saver.js +0 -105
- package/dist/checkpointer/types.d.ts +0 -58
- package/dist/factory/factory.d.ts +0 -40
- package/dist/factory/factory.js +0 -87
- package/dist/history/actions/add-messages.d.ts +0 -15
- package/dist/history/actions/add-messages.js +0 -77
- package/dist/history/actions/clear.d.ts +0 -10
- package/dist/history/actions/clear.js +0 -34
- package/dist/history/actions/get-messages.d.ts +0 -17
- package/dist/history/actions/get-messages.js +0 -79
- package/dist/history/actions/list-sessions.d.ts +0 -13
- package/dist/history/actions/list-sessions.js +0 -53
- package/dist/history/actions/reconcile-count.d.ts +0 -12
- package/dist/history/actions/reconcile-count.js +0 -64
- package/dist/history/chat-message-history.d.ts +0 -73
- package/dist/history/chat-message-history.js +0 -111
- package/dist/history/internal/append-saga.d.ts +0 -25
- package/dist/history/internal/append-saga.js +0 -79
- package/dist/history/internal/compensation.d.ts +0 -25
- package/dist/history/internal/compensation.js +0 -92
- package/dist/history/internal/item-mapper.d.ts +0 -9
- package/dist/history/internal/item-mapper.js +0 -27
- package/dist/history/internal/keys.d.ts +0 -16
- package/dist/history/internal/keys.js +0 -48
- package/dist/history/internal/message-chunker.d.ts +0 -13
- package/dist/history/internal/message-chunker.js +0 -67
- package/dist/history/internal/message-transaction.d.ts +0 -25
- package/dist/history/internal/message-transaction.js +0 -61
- package/dist/history/internal/message-window.d.ts +0 -17
- package/dist/history/internal/message-window.js +0 -49
- package/dist/history/internal/query.d.ts +0 -23
- package/dist/history/internal/query.js +0 -39
- package/dist/history/internal/session-count.d.ts +0 -47
- package/dist/history/internal/session-count.js +0 -115
- package/dist/history/internal/session-title.d.ts +0 -19
- package/dist/history/internal/session-title.js +0 -43
- package/dist/history/internal/session-update.d.ts +0 -27
- package/dist/history/internal/session-update.js +0 -69
- package/dist/history/internal/setup.d.ts +0 -31
- package/dist/history/internal/setup.js +0 -43
- package/dist/history/internal/title-generator.d.ts +0 -12
- package/dist/history/internal/title-generator.js +0 -41
- package/dist/history/internal/ttl-anchor.d.ts +0 -24
- package/dist/history/internal/ttl-anchor.js +0 -38
- package/dist/history/internal/validation.d.ts +0 -25
- package/dist/history/internal/validation.js +0 -53
- package/dist/history/session-adapter.d.ts +0 -29
- package/dist/history/session-adapter.js +0 -35
- package/dist/history/types.d.ts +0 -69
- package/dist/index.d.ts +0 -29
- package/dist/index.js +0 -32
- package/dist/shared/clock.d.ts +0 -8
- package/dist/shared/clock.js +0 -16
- package/dist/shared/codec/codec.d.ts +0 -53
- package/dist/shared/codec/codec.js +0 -66
- package/dist/shared/codec/compression.d.ts +0 -24
- package/dist/shared/codec/compression.js +0 -48
- package/dist/shared/codec/descriptor-keys.d.ts +0 -12
- package/dist/shared/codec/descriptor-keys.js +0 -14
- package/dist/shared/codec/encode.d.ts +0 -13
- package/dist/shared/codec/encode.js +0 -43
- package/dist/shared/codec/json-serde.d.ts +0 -7
- package/dist/shared/codec/json-serde.js +0 -17
- package/dist/shared/codec/payload-loss.d.ts +0 -12
- package/dist/shared/codec/payload-loss.js +0 -38
- package/dist/shared/codec/s3/adapter-config.d.ts +0 -13
- package/dist/shared/codec/s3/adapter-config.js +0 -22
- package/dist/shared/codec/s3/bounded-body.d.ts +0 -14
- package/dist/shared/codec/s3/bounded-body.js +0 -47
- package/dist/shared/codec/s3/client.d.ts +0 -18
- package/dist/shared/codec/s3/client.js +0 -46
- package/dist/shared/codec/s3/config.d.ts +0 -51
- package/dist/shared/codec/s3/config.js +0 -58
- package/dist/shared/codec/s3/delete.d.ts +0 -7
- package/dist/shared/codec/s3/delete.js +0 -28
- package/dist/shared/codec/s3/key-scope.d.ts +0 -23
- package/dist/shared/codec/s3/key-scope.js +0 -44
- package/dist/shared/codec/s3/lifecycle.d.ts +0 -14
- package/dist/shared/codec/s3/lifecycle.js +0 -63
- package/dist/shared/codec/s3/offloader.d.ts +0 -44
- package/dist/shared/codec/s3/offloader.js +0 -118
- package/dist/shared/codec/s3/orphans.d.ts +0 -23
- package/dist/shared/codec/s3/orphans.js +0 -71
- package/dist/shared/codec/s3/read-write.d.ts +0 -18
- package/dist/shared/codec/s3/read-write.js +0 -51
- package/dist/shared/codec/s3/retry.d.ts +0 -5
- package/dist/shared/codec/s3/retry.js +0 -22
- package/dist/shared/concurrency.d.ts +0 -6
- package/dist/shared/constants.d.ts +0 -112
- package/dist/shared/constants.js +0 -115
- package/dist/shared/dynamodb/abort.d.ts +0 -9
- package/dist/shared/dynamodb/abort.js +0 -27
- package/dist/shared/dynamodb/backoff.d.ts +0 -15
- package/dist/shared/dynamodb/backoff.js +0 -48
- package/dist/shared/dynamodb/batch-write.d.ts +0 -22
- package/dist/shared/dynamodb/batch-write.js +0 -53
- package/dist/shared/dynamodb/cancellation.d.ts +0 -6
- package/dist/shared/dynamodb/cancellation.js +0 -7
- package/dist/shared/dynamodb/client.d.ts +0 -28
- package/dist/shared/dynamodb/conditional-put.d.ts +0 -67
- package/dist/shared/dynamodb/conditional-put.js +0 -76
- package/dist/shared/dynamodb/drain-unprocessed.d.ts +0 -21
- package/dist/shared/dynamodb/drain-unprocessed.js +0 -43
- package/dist/shared/dynamodb/expiry.d.ts +0 -16
- package/dist/shared/dynamodb/expiry.js +0 -29
- package/dist/shared/dynamodb/paginate-core.d.ts +0 -24
- package/dist/shared/dynamodb/paginate-core.js +0 -82
- package/dist/shared/dynamodb/paginate.d.ts +0 -14
- package/dist/shared/dynamodb/paginate.js +0 -19
- package/dist/shared/dynamodb/partition-delete.d.ts +0 -39
- package/dist/shared/dynamodb/partition-delete.js +0 -71
- package/dist/shared/dynamodb/retry-classifier.d.ts +0 -17
- package/dist/shared/dynamodb/retry-classifier.js +0 -118
- package/dist/shared/dynamodb/retry-policy.d.ts +0 -26
- package/dist/shared/dynamodb/retry-policy.js +0 -22
- package/dist/shared/dynamodb/retry.d.ts +0 -31
- package/dist/shared/dynamodb/retry.js +0 -57
- package/dist/shared/dynamodb/scan.d.ts +0 -14
- package/dist/shared/dynamodb/scan.js +0 -19
- package/dist/shared/dynamodb/types.d.ts +0 -23
- package/dist/shared/errors/base-error.d.ts +0 -30
- package/dist/shared/errors/base-error.js +0 -27
- package/dist/shared/errors/boundary.d.ts +0 -18
- package/dist/shared/errors/boundary.js +0 -46
- package/dist/shared/errors/error-code.d.ts +0 -13
- package/dist/shared/errors/errors.d.ts +0 -68
- package/dist/shared/errors/errors.js +0 -114
- package/dist/shared/errors/upstream-error.d.ts +0 -16
- package/dist/shared/errors/upstream-error.js +0 -27
- package/dist/shared/errors/wrap-error.d.ts +0 -7
- package/dist/shared/errors/wrap-error.js +0 -15
- package/dist/shared/logging/logger.d.ts +0 -18
- package/dist/shared/logging/logger.js +0 -15
- package/dist/shared/logging/redaction-walk.d.ts +0 -23
- package/dist/shared/logging/redaction-walk.js +0 -112
- package/dist/shared/logging/redaction.d.ts +0 -39
- package/dist/shared/logging/redaction.js +0 -75
- package/dist/shared/logging/secret-patterns.d.ts +0 -92
- package/dist/shared/logging/secret-patterns.js +0 -133
- package/dist/shared/options.d.ts +0 -37
- package/dist/shared/ulid.d.ts +0 -23
- package/dist/shared/validation/options.d.ts +0 -8
- package/dist/shared/validation/options.js +0 -90
- package/dist/shared/validation/primitives.d.ts +0 -29
- package/dist/shared/validation/primitives.js +0 -82
- package/dist/shared/validation/ttl.d.ts +0 -28
- package/dist/shared/validation/ttl.js +0 -52
- package/dist/store/actions/get.d.ts +0 -13
- package/dist/store/actions/get.js +0 -73
- package/dist/store/actions/list-namespaces.d.ts +0 -8
- package/dist/store/actions/list-namespaces.js +0 -59
- package/dist/store/actions/put.d.ts +0 -10
- package/dist/store/actions/put.js +0 -96
- package/dist/store/actions/reconcile-vector-index.d.ts +0 -18
- package/dist/store/actions/reconcile-vector-index.js +0 -26
- package/dist/store/actions/search.d.ts +0 -9
- package/dist/store/actions/search.js +0 -34
- package/dist/store/internal/backend-search.d.ts +0 -4
- package/dist/store/internal/backend-search.js +0 -74
- package/dist/store/internal/batch-plan.d.ts +0 -11
- package/dist/store/internal/batch-plan.js +0 -52
- package/dist/store/internal/candidates.d.ts +0 -23
- package/dist/store/internal/candidates.js +0 -94
- package/dist/store/internal/filter.d.ts +0 -9
- package/dist/store/internal/filter.js +0 -85
- package/dist/store/internal/index-reconcile.d.ts +0 -21
- package/dist/store/internal/index-reconcile.js +0 -118
- package/dist/store/internal/index-sync.d.ts +0 -10
- package/dist/store/internal/index-sync.js +0 -25
- package/dist/store/internal/item-mapper.d.ts +0 -27
- package/dist/store/internal/item-mapper.js +0 -61
- package/dist/store/internal/keys.d.ts +0 -17
- package/dist/store/internal/keys.js +0 -41
- package/dist/store/internal/namespace-match.d.ts +0 -11
- package/dist/store/internal/namespace-match.js +0 -40
- package/dist/store/internal/option-validation.d.ts +0 -13
- package/dist/store/internal/option-validation.js +0 -77
- package/dist/store/internal/overwrite-swap.d.ts +0 -32
- package/dist/store/internal/overwrite-swap.js +0 -68
- package/dist/store/internal/persist.d.ts +0 -28
- package/dist/store/internal/persist.js +0 -64
- package/dist/store/internal/query.d.ts +0 -11
- package/dist/store/internal/query.js +0 -48
- package/dist/store/internal/ranker.d.ts +0 -18
- package/dist/store/internal/ranker.js +0 -39
- package/dist/store/internal/read-existing.d.ts +0 -23
- package/dist/store/internal/read-existing.js +0 -41
- package/dist/store/internal/score-direction.d.ts +0 -31
- package/dist/store/internal/score-direction.js +0 -38
- package/dist/store/internal/search-filter.d.ts +0 -3
- package/dist/store/internal/search-filter.js +0 -10
- package/dist/store/internal/semantic-search.d.ts +0 -34
- package/dist/store/internal/semantic-search.js +0 -87
- package/dist/store/internal/setup.d.ts +0 -36
- package/dist/store/internal/setup.js +0 -40
- package/dist/store/internal/text-path.d.ts +0 -17
- package/dist/store/internal/validation.d.ts +0 -18
- package/dist/store/internal/validation.js +0 -51
- package/dist/store/internal/write-verify.d.ts +0 -42
- package/dist/store/internal/write-verify.js +0 -71
- package/dist/store/store.d.ts +0 -61
- package/dist/store/store.js +0 -107
- package/dist/store/types.d.ts +0 -50
- package/dist/store/types.js +0 -2
- package/dist/store/vector-backend.d.ts +0 -43
- package/dist/store/vector-backend.js +0 -2
- /package/dist/{checkpointer → cjs/checkpointer}/types.js +0 -0
- /package/dist/{factory → cjs/factory}/types.js +0 -0
- /package/dist/{history → cjs/history}/types.js +0 -0
- /package/dist/{shared → cjs/shared}/options.js +0 -0
- /package/dist/{shared/dynamodb → cjs/store}/types.js +0 -0
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { AbortError } from '../errors/errors';
|
|
2
|
-
/**
|
|
3
|
-
* The library's error for an aborted `signal`. A caller's own `AbortError`
|
|
4
|
-
* used as the abort reason is returned unchanged; anything else — the
|
|
5
|
-
* `DOMException` a bare `controller.abort()` produces, a string, a custom
|
|
6
|
-
* error — becomes the `cause` of a fresh {@link AbortError}, so
|
|
7
|
-
* `code === 'ABORTED'` holds however the signal was aborted.
|
|
8
|
-
*/
|
|
9
|
-
export declare function abortErrorFrom(signal: AbortSignal): AbortError;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.abortErrorFrom = abortErrorFrom;
|
|
4
|
-
const base_error_1 = require("../errors/base-error");
|
|
5
|
-
const error_code_1 = require("../errors/error-code");
|
|
6
|
-
const errors_1 = require("../errors/errors");
|
|
7
|
-
const wrap_error_1 = require("../errors/wrap-error");
|
|
8
|
-
/** True when the abort reason already is this library's `AbortError` (a string or DOMException is not). */
|
|
9
|
-
function isLibraryAbort(reason) {
|
|
10
|
-
return (typeof reason === 'object' &&
|
|
11
|
-
reason !== null &&
|
|
12
|
-
(0, base_error_1.isDynamoDBLangGraphError)(reason) &&
|
|
13
|
-
reason.code === error_code_1.ErrorCode.ABORTED);
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* The library's error for an aborted `signal`. A caller's own `AbortError`
|
|
17
|
-
* used as the abort reason is returned unchanged; anything else — the
|
|
18
|
-
* `DOMException` a bare `controller.abort()` produces, a string, a custom
|
|
19
|
-
* error — becomes the `cause` of a fresh {@link AbortError}, so
|
|
20
|
-
* `code === 'ABORTED'` holds however the signal was aborted.
|
|
21
|
-
*/
|
|
22
|
-
function abortErrorFrom(signal) {
|
|
23
|
-
const reason = signal.reason;
|
|
24
|
-
if (isLibraryAbort(reason))
|
|
25
|
-
return reason;
|
|
26
|
-
return new errors_1.AbortError('Operation aborted', reason === undefined ? undefined : (0, wrap_error_1.toError)(reason));
|
|
27
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sleep for `ms` milliseconds, cancellable via `signal`. An already-aborted
|
|
3
|
-
* signal rejects at once and an abort while pending rejects the moment it fires; both
|
|
4
|
-
* reject with the library's `AbortError` (see `abortErrorFrom`), so a caller
|
|
5
|
-
* branching on `code === 'ABORTED'` sees it however the signal was aborted.
|
|
6
|
-
*/
|
|
7
|
-
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
8
|
-
/** Next exponential-backoff delay: double `currentMs`, capped at `maxMs`. */
|
|
9
|
-
export declare function nextBackoffDelay(currentMs: number, maxMs?: number): number;
|
|
10
|
-
/**
|
|
11
|
-
* Apply AWS-recommended full jitter: a uniform random value in `[0, delayMs)`.
|
|
12
|
-
*
|
|
13
|
-
* @param rng - RNG seam returning `[0, 1)`. Defaults to `Math.random`.
|
|
14
|
-
*/
|
|
15
|
-
export declare function fullJitter(delayMs: number, rng?: () => number): number;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sleep = sleep;
|
|
4
|
-
exports.nextBackoffDelay = nextBackoffDelay;
|
|
5
|
-
exports.fullJitter = fullJitter;
|
|
6
|
-
const constants_1 = require("../constants");
|
|
7
|
-
const abort_1 = require("./abort");
|
|
8
|
-
/**
|
|
9
|
-
* Sleep for `ms` milliseconds, cancellable via `signal`. An already-aborted
|
|
10
|
-
* signal rejects at once and an abort while pending rejects the moment it fires; both
|
|
11
|
-
* reject with the library's `AbortError` (see `abortErrorFrom`), so a caller
|
|
12
|
-
* branching on `code === 'ABORTED'` sees it however the signal was aborted.
|
|
13
|
-
*/
|
|
14
|
-
function sleep(ms, signal) {
|
|
15
|
-
if (signal?.aborted) {
|
|
16
|
-
return Promise.reject((0, abort_1.abortErrorFrom)(signal));
|
|
17
|
-
}
|
|
18
|
-
return new Promise((resolve, reject) => {
|
|
19
|
-
let settled = false;
|
|
20
|
-
const onAbort = () => {
|
|
21
|
-
if (settled)
|
|
22
|
-
return;
|
|
23
|
-
settled = true;
|
|
24
|
-
clearTimeout(timer);
|
|
25
|
-
reject((0, abort_1.abortErrorFrom)(signal));
|
|
26
|
-
};
|
|
27
|
-
const timer = setTimeout(() => {
|
|
28
|
-
if (settled)
|
|
29
|
-
return;
|
|
30
|
-
settled = true;
|
|
31
|
-
signal?.removeEventListener('abort', onAbort);
|
|
32
|
-
resolve();
|
|
33
|
-
}, ms);
|
|
34
|
-
signal?.addEventListener('abort', onAbort, { once: true });
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
/** Next exponential-backoff delay: double `currentMs`, capped at `maxMs`. */
|
|
38
|
-
function nextBackoffDelay(currentMs, maxMs = constants_1.MAX_BACKOFF_DELAY_MS) {
|
|
39
|
-
return Math.min(currentMs * 2, maxMs);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Apply AWS-recommended full jitter: a uniform random value in `[0, delayMs)`.
|
|
43
|
-
*
|
|
44
|
-
* @param rng - RNG seam returning `[0, 1)`. Defaults to `Math.random`.
|
|
45
|
-
*/
|
|
46
|
-
function fullJitter(delayMs, rng = Math.random) {
|
|
47
|
-
return rng() * delayMs;
|
|
48
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { DynamoDBDocument } from '@aws-sdk/lib-dynamodb';
|
|
2
|
-
import { DrainOptions } from './drain-unprocessed';
|
|
3
|
-
import type { WriteRequest } from './types';
|
|
4
|
-
/**
|
|
5
|
-
* Write an arbitrary number of requests, chunked into batches of 25 (the
|
|
6
|
-
* BatchWriteItem limit). Every chunk is attempted regardless of an earlier
|
|
7
|
-
* chunk's failure — order-independent writes (deletes/puts) should never
|
|
8
|
-
* lose "later" chunks just because an earlier one failed. If any chunk fails,
|
|
9
|
-
* throws {@link BatchWriteAllIncompleteError} reporting exactly how many
|
|
10
|
-
* chunks succeeded vs. failed, and exactly how many individual writes
|
|
11
|
-
* persisted, once every chunk has been attempted.
|
|
12
|
-
*
|
|
13
|
-
* This is this function's ONLY throw site. Two callers —
|
|
14
|
-
* checkpointer/internal/special-write-cleanup.ts and
|
|
15
|
-
* history/internal/append-saga.ts — type-assert a caught error straight to
|
|
16
|
-
* {@link BatchWriteAllIncompleteError} on that guarantee (not `instanceof`,
|
|
17
|
-
* banned repo-wide) instead of narrowing it, since this project enforces
|
|
18
|
-
* 100% branch coverage and a defensive else-branch here would be
|
|
19
|
-
* unreachable, hence untestable. Adding another throw path to this function
|
|
20
|
-
* requires updating both call sites.
|
|
21
|
-
*/
|
|
22
|
-
export declare function batchWriteAll(client: DynamoDBDocument, tableName: string, requests: WriteRequest[], options?: DrainOptions): Promise<void>;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.batchWriteAll = batchWriteAll;
|
|
4
|
-
const constants_1 = require("../constants");
|
|
5
|
-
const errors_1 = require("../errors/errors");
|
|
6
|
-
const drain_unprocessed_1 = require("./drain-unprocessed");
|
|
7
|
-
/**
|
|
8
|
-
* Write an arbitrary number of requests, chunked into batches of 25 (the
|
|
9
|
-
* BatchWriteItem limit). Every chunk is attempted regardless of an earlier
|
|
10
|
-
* chunk's failure — order-independent writes (deletes/puts) should never
|
|
11
|
-
* lose "later" chunks just because an earlier one failed. If any chunk fails,
|
|
12
|
-
* throws {@link BatchWriteAllIncompleteError} reporting exactly how many
|
|
13
|
-
* chunks succeeded vs. failed, and exactly how many individual writes
|
|
14
|
-
* persisted, once every chunk has been attempted.
|
|
15
|
-
*
|
|
16
|
-
* This is this function's ONLY throw site. Two callers —
|
|
17
|
-
* checkpointer/internal/special-write-cleanup.ts and
|
|
18
|
-
* history/internal/append-saga.ts — type-assert a caught error straight to
|
|
19
|
-
* {@link BatchWriteAllIncompleteError} on that guarantee (not `instanceof`,
|
|
20
|
-
* banned repo-wide) instead of narrowing it, since this project enforces
|
|
21
|
-
* 100% branch coverage and a defensive else-branch here would be
|
|
22
|
-
* unreachable, hence untestable. Adding another throw path to this function
|
|
23
|
-
* requires updating both call sites.
|
|
24
|
-
*/
|
|
25
|
-
async function batchWriteAll(client, tableName, requests, options = {}) {
|
|
26
|
-
const totalChunks = Math.ceil(requests.length / constants_1.BATCH_WRITE_MAX);
|
|
27
|
-
let succeededChunks = 0;
|
|
28
|
-
let succeededCount = 0;
|
|
29
|
-
const failedChunks = [];
|
|
30
|
-
for (let offset = 0; offset < requests.length; offset += constants_1.BATCH_WRITE_MAX) {
|
|
31
|
-
const chunk = requests.slice(offset, offset + constants_1.BATCH_WRITE_MAX);
|
|
32
|
-
try {
|
|
33
|
-
await (0, drain_unprocessed_1.drainUnprocessedWrites)(client, tableName, chunk, options);
|
|
34
|
-
succeededChunks += 1;
|
|
35
|
-
succeededCount += chunk.length;
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
/**
|
|
39
|
-
* drainUnprocessedWrites has exactly three throw sites and every one
|
|
40
|
-
* constructs a BatchWriteIncompleteError with an accurate
|
|
41
|
-
* succeededCount — asserted, not name-checked, since the false case is
|
|
42
|
-
* unreachable and this project enforces 100% branch coverage with no
|
|
43
|
-
* exceptions (see drain-unprocessed.ts).
|
|
44
|
-
*/
|
|
45
|
-
const err = error;
|
|
46
|
-
failedChunks.push(err);
|
|
47
|
-
succeededCount += err.succeededCount;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
if (failedChunks.length > 0) {
|
|
51
|
-
throw new errors_1.BatchWriteAllIncompleteError(succeededChunks, totalChunks, failedChunks, succeededCount);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/** One entry of a TransactWriteItems/TransactionCanceledException's CancellationReasons. */
|
|
2
|
-
export interface CancellationReason {
|
|
3
|
-
Code?: string;
|
|
4
|
-
}
|
|
5
|
-
/** Extract `CancellationReasons` from a transaction-cancellation error, if present. */
|
|
6
|
-
export declare function getCancellationReasons(error: Error): CancellationReason[] | undefined;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getCancellationReasons = getCancellationReasons;
|
|
4
|
-
/** Extract `CancellationReasons` from a transaction-cancellation error, if present. */
|
|
5
|
-
function getCancellationReasons(error) {
|
|
6
|
-
return error.CancellationReasons;
|
|
7
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { DynamoDBClient, type DynamoDBClientConfig } from '@aws-sdk/client-dynamodb';
|
|
2
|
-
import { DynamoDBDocument } from '@aws-sdk/lib-dynamodb';
|
|
3
|
-
import type { Logger } from '../logging/logger';
|
|
4
|
-
/** A resolved DynamoDB client plus its ownership flag. */
|
|
5
|
-
export interface ResolvedDynamoDBClient {
|
|
6
|
-
ddbClient: DynamoDBClient | undefined;
|
|
7
|
-
client: DynamoDBDocument;
|
|
8
|
-
ownsClient: boolean;
|
|
9
|
-
}
|
|
10
|
-
/** Options for {@link resolveDynamoDBClient}. */
|
|
11
|
-
export interface ResolveClientOptions {
|
|
12
|
-
client?: DynamoDBDocument;
|
|
13
|
-
clientConfig?: DynamoDBClientConfig;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Resolve the DocumentClient for an adapter. An injected `client` is used as-is
|
|
17
|
-
* and not owned; otherwise a client is built from `clientConfig` (via the
|
|
18
|
-
* `createClient` seam) and owned, so the adapter destroys it on `destroy()`.
|
|
19
|
-
*/
|
|
20
|
-
export declare function resolveDynamoDBClient(options: ResolveClientOptions): ResolvedDynamoDBClient;
|
|
21
|
-
/**
|
|
22
|
-
* Warn once when an injected client keeps the SDK's own retries. They run
|
|
23
|
-
* inside every attempt of this library's retry layer, so the budget the
|
|
24
|
-
* constants and README describe multiplies (5 × 3 requests per operation with
|
|
25
|
-
* the SDK default) and a throttling event turns into a retry storm. A client
|
|
26
|
-
* that cannot report its setting is left alone; the check never throws.
|
|
27
|
-
*/
|
|
28
|
-
export declare function warnOnStackedRetries(client: DynamoDBDocument, logger: Logger): Promise<void>;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { DocItem } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Attribute holding a row's revision token on adapters that need one. The
|
|
4
|
-
* checkpointer's special writes reuse their existing per-call `writeGroup`
|
|
5
|
-
* instead, so `revisionGuard` takes the attribute name rather than assuming it.
|
|
6
|
-
*/
|
|
7
|
-
export declare const REVISION_ATTRIBUTE = "rev";
|
|
8
|
-
/**
|
|
9
|
-
* Compare-and-swap attempts before a caller gives up and overwrites
|
|
10
|
-
* unconditionally. Kept small on purpose: DynamoDB charges write capacity for a
|
|
11
|
-
* *failed* conditional write too, sized on the existing item, so an aggressive
|
|
12
|
-
* loop turns contention into cost. Three attempts settle every realistic race,
|
|
13
|
-
* and the fallback is exactly the pre-0.9.0 behaviour rather than an error.
|
|
14
|
-
*/
|
|
15
|
-
export declare const OVERWRITE_CAS_MAX_ATTEMPTS = 3;
|
|
16
|
-
/** What a caller saw at the row before it tried to overwrite it. */
|
|
17
|
-
export interface ObservedRow {
|
|
18
|
-
exists: boolean;
|
|
19
|
-
revision?: string;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Condition fragments to spread into a `PutCommand` input. Every guard asks
|
|
23
|
-
* DynamoDB to attach the existing row to a rejection, so a compare-and-swap
|
|
24
|
-
* that loses can re-pin from the exception (see {@link rejectedItem}) instead
|
|
25
|
-
* of spending a second strongly-consistent read.
|
|
26
|
-
*/
|
|
27
|
-
export interface RevisionGuard {
|
|
28
|
-
ConditionExpression: string;
|
|
29
|
-
ExpressionAttributeNames?: Record<string, string>;
|
|
30
|
-
ExpressionAttributeValues?: Record<string, string>;
|
|
31
|
-
ReturnValuesOnConditionCheckFailure: 'ALL_OLD';
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Build the condition admitting a write only while the row still holds the
|
|
35
|
-
* revision this caller observed.
|
|
36
|
-
*
|
|
37
|
-
* Without it, two concurrent overwrites both read the same previous payload
|
|
38
|
-
* descriptor, both commit their own nonced upload, and both delete that same
|
|
39
|
-
* previous object — leaving the loser's upload orphaned with nothing left
|
|
40
|
-
* recording that it ever existed. A post-commit read-back cannot repair that,
|
|
41
|
-
* because neither writer can learn of an object it never saw; only refusing the
|
|
42
|
-
* second write until it re-reads can.
|
|
43
|
-
*
|
|
44
|
-
* A row with no revision attribute was written before 0.9.0. Pinning its
|
|
45
|
-
* *absence* is what makes the swap correct across an upgrade: the first writer
|
|
46
|
-
* to touch such a row stamps one, and any racer still holding the pre-upgrade
|
|
47
|
-
* observation is turned away.
|
|
48
|
-
*/
|
|
49
|
-
export declare function revisionGuard(attribute: string, observed: ObservedRow): RevisionGuard;
|
|
50
|
-
/**
|
|
51
|
-
* True when the guard rejected a write — NOT evidence a competitor won: a
|
|
52
|
-
* `PutCommand` retried after its response was lost can re-hit its own
|
|
53
|
-
* committed row and fail identically; the two cases are indistinguishable.
|
|
54
|
-
*/
|
|
55
|
-
export declare function isConditionalCheckFailed(error: {
|
|
56
|
-
name?: string;
|
|
57
|
-
}): boolean;
|
|
58
|
-
/**
|
|
59
|
-
* The row that turned a conditional write away, when DynamoDB attached it
|
|
60
|
-
* (`ReturnValuesOnConditionCheckFailure: 'ALL_OLD'`). Verified against real
|
|
61
|
-
* DynamoDB: the document client does not unmarshall an *error* payload the way
|
|
62
|
-
* it unmarshalls a response, so the item arrives in raw AttributeValue form and
|
|
63
|
-
* is unmarshalled here. Undefined when the rejection carries no item — the row
|
|
64
|
-
* was deleted between the observation and the write — in which case the caller
|
|
65
|
-
* falls back to a read.
|
|
66
|
-
*/
|
|
67
|
-
export declare function rejectedItem(error: Error): DocItem | undefined;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OVERWRITE_CAS_MAX_ATTEMPTS = exports.REVISION_ATTRIBUTE = void 0;
|
|
4
|
-
exports.revisionGuard = revisionGuard;
|
|
5
|
-
exports.isConditionalCheckFailed = isConditionalCheckFailed;
|
|
6
|
-
exports.rejectedItem = rejectedItem;
|
|
7
|
-
const util_dynamodb_1 = require("@aws-sdk/util-dynamodb");
|
|
8
|
-
/**
|
|
9
|
-
* Attribute holding a row's revision token on adapters that need one. The
|
|
10
|
-
* checkpointer's special writes reuse their existing per-call `writeGroup`
|
|
11
|
-
* instead, so `revisionGuard` takes the attribute name rather than assuming it.
|
|
12
|
-
*/
|
|
13
|
-
exports.REVISION_ATTRIBUTE = 'rev';
|
|
14
|
-
/**
|
|
15
|
-
* Compare-and-swap attempts before a caller gives up and overwrites
|
|
16
|
-
* unconditionally. Kept small on purpose: DynamoDB charges write capacity for a
|
|
17
|
-
* *failed* conditional write too, sized on the existing item, so an aggressive
|
|
18
|
-
* loop turns contention into cost. Three attempts settle every realistic race,
|
|
19
|
-
* and the fallback is exactly the pre-0.9.0 behaviour rather than an error.
|
|
20
|
-
*/
|
|
21
|
-
exports.OVERWRITE_CAS_MAX_ATTEMPTS = 3;
|
|
22
|
-
const RETURN_REJECTED_ROW = { ReturnValuesOnConditionCheckFailure: 'ALL_OLD' };
|
|
23
|
-
/**
|
|
24
|
-
* Build the condition admitting a write only while the row still holds the
|
|
25
|
-
* revision this caller observed.
|
|
26
|
-
*
|
|
27
|
-
* Without it, two concurrent overwrites both read the same previous payload
|
|
28
|
-
* descriptor, both commit their own nonced upload, and both delete that same
|
|
29
|
-
* previous object — leaving the loser's upload orphaned with nothing left
|
|
30
|
-
* recording that it ever existed. A post-commit read-back cannot repair that,
|
|
31
|
-
* because neither writer can learn of an object it never saw; only refusing the
|
|
32
|
-
* second write until it re-reads can.
|
|
33
|
-
*
|
|
34
|
-
* A row with no revision attribute was written before 0.9.0. Pinning its
|
|
35
|
-
* *absence* is what makes the swap correct across an upgrade: the first writer
|
|
36
|
-
* to touch such a row stamps one, and any racer still holding the pre-upgrade
|
|
37
|
-
* observation is turned away.
|
|
38
|
-
*/
|
|
39
|
-
function revisionGuard(attribute, observed) {
|
|
40
|
-
if (!observed.exists)
|
|
41
|
-
return { ...RETURN_REJECTED_ROW, ConditionExpression: 'attribute_not_exists(PK)' };
|
|
42
|
-
if (observed.revision === undefined) {
|
|
43
|
-
return {
|
|
44
|
-
...RETURN_REJECTED_ROW,
|
|
45
|
-
ConditionExpression: 'attribute_not_exists(#rev)',
|
|
46
|
-
ExpressionAttributeNames: { '#rev': attribute },
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
...RETURN_REJECTED_ROW,
|
|
51
|
-
ConditionExpression: '#rev = :rev',
|
|
52
|
-
ExpressionAttributeNames: { '#rev': attribute },
|
|
53
|
-
ExpressionAttributeValues: { ':rev': observed.revision },
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* True when the guard rejected a write — NOT evidence a competitor won: a
|
|
58
|
-
* `PutCommand` retried after its response was lost can re-hit its own
|
|
59
|
-
* committed row and fail identically; the two cases are indistinguishable.
|
|
60
|
-
*/
|
|
61
|
-
function isConditionalCheckFailed(error) {
|
|
62
|
-
return error.name === 'ConditionalCheckFailedException';
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* The row that turned a conditional write away, when DynamoDB attached it
|
|
66
|
-
* (`ReturnValuesOnConditionCheckFailure: 'ALL_OLD'`). Verified against real
|
|
67
|
-
* DynamoDB: the document client does not unmarshall an *error* payload the way
|
|
68
|
-
* it unmarshalls a response, so the item arrives in raw AttributeValue form and
|
|
69
|
-
* is unmarshalled here. Undefined when the rejection carries no item — the row
|
|
70
|
-
* was deleted between the observation and the write — in which case the caller
|
|
71
|
-
* falls back to a read.
|
|
72
|
-
*/
|
|
73
|
-
function rejectedItem(error) {
|
|
74
|
-
const raw = error.Item;
|
|
75
|
-
return raw === undefined ? undefined : (0, util_dynamodb_1.unmarshall)(raw);
|
|
76
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { DynamoDBDocument } from '@aws-sdk/lib-dynamodb';
|
|
2
|
-
import { type RetryOptions } from './retry';
|
|
3
|
-
import type { WriteRequest } from './types';
|
|
4
|
-
/** Backoff/abort options shared by the drain helpers. */
|
|
5
|
-
export interface DrainOptions {
|
|
6
|
-
/** The adapter's retry options, applied to every BatchWriteItem round. */
|
|
7
|
-
retry?: RetryOptions;
|
|
8
|
-
signal?: AbortSignal;
|
|
9
|
-
rng?: () => number;
|
|
10
|
-
maxRetries?: number;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Submit `requests` via BatchWriteItem and re-submit UnprocessedItems with
|
|
14
|
-
* full-jitter backoff until the batch drains. Throws
|
|
15
|
-
* {@link BatchWriteIncompleteError} if it cannot drain within the retry budget,
|
|
16
|
-
* or if a round's write call or backoff wait throws outright (SDK failure, or
|
|
17
|
-
* the caller's signal aborting) — in every case `succeededCount` reflects
|
|
18
|
-
* every earlier round's confirmed persists, and the triggering error is
|
|
19
|
-
* attached as `cause`.
|
|
20
|
-
*/
|
|
21
|
-
export declare function drainUnprocessedWrites(client: DynamoDBDocument, tableName: string, requests: WriteRequest[], options?: DrainOptions): Promise<void>;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.drainUnprocessedWrites = drainUnprocessedWrites;
|
|
4
|
-
const constants_1 = require("../constants");
|
|
5
|
-
const errors_1 = require("../errors/errors");
|
|
6
|
-
const backoff_1 = require("./backoff");
|
|
7
|
-
const retry_1 = require("./retry");
|
|
8
|
-
/**
|
|
9
|
-
* Submit `requests` via BatchWriteItem and re-submit UnprocessedItems with
|
|
10
|
-
* full-jitter backoff until the batch drains. Throws
|
|
11
|
-
* {@link BatchWriteIncompleteError} if it cannot drain within the retry budget,
|
|
12
|
-
* or if a round's write call or backoff wait throws outright (SDK failure, or
|
|
13
|
-
* the caller's signal aborting) — in every case `succeededCount` reflects
|
|
14
|
-
* every earlier round's confirmed persists, and the triggering error is
|
|
15
|
-
* attached as `cause`.
|
|
16
|
-
*/
|
|
17
|
-
async function drainUnprocessedWrites(client, tableName, requests, options = {}) {
|
|
18
|
-
if (requests.length === 0)
|
|
19
|
-
return;
|
|
20
|
-
const maxRetries = options.maxRetries ?? constants_1.MAX_UNPROCESSED_RETRIES;
|
|
21
|
-
const initialCount = requests.length;
|
|
22
|
-
let pending = requests;
|
|
23
|
-
let delay = constants_1.INITIAL_BACKOFF_DELAY_MS;
|
|
24
|
-
let retries = 0;
|
|
25
|
-
while (pending.length > 0) {
|
|
26
|
-
try {
|
|
27
|
-
const result = await (0, retry_1.withDynamoDBRetry)(() => client.batchWrite({ RequestItems: { [tableName]: pending } }), { ...options.retry, signal: options.signal });
|
|
28
|
-
const leftover = result.UnprocessedItems?.[tableName] ?? [];
|
|
29
|
-
if (leftover.length === 0)
|
|
30
|
-
return;
|
|
31
|
-
pending = leftover;
|
|
32
|
-
retries += 1;
|
|
33
|
-
if (retries > maxRetries)
|
|
34
|
-
break;
|
|
35
|
-
await (0, backoff_1.sleep)((0, backoff_1.fullJitter)(delay, options.rng), options.signal);
|
|
36
|
-
delay = (0, backoff_1.nextBackoffDelay)(delay);
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
throw new errors_1.BatchWriteIncompleteError(initialCount - pending.length, pending, retries, error);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
throw new errors_1.BatchWriteIncompleteError(initialCount - pending.length, pending, maxRetries);
|
|
43
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { QueryCommandInput, ScanCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
2
|
-
/**
|
|
3
|
-
* True when a row carrying a DynamoDB TTL is at or past it. DynamoDB's sweep
|
|
4
|
-
* can lag up to ~48 h, so every read path applies this itself; the value is
|
|
5
|
-
* epoch seconds, the unit the `ttl` attribute uses.
|
|
6
|
-
*/
|
|
7
|
-
export declare function isExpiredRow(row: {
|
|
8
|
-
ttl?: number;
|
|
9
|
-
}, nowSeconds: number): boolean;
|
|
10
|
-
/**
|
|
11
|
-
* Exclude expired rows server-side, ANDing any filter the query already has.
|
|
12
|
-
* A filter never replaces the in-process {@link isExpiredRow} check — it only
|
|
13
|
-
* trims transfer — because the two clocks (query build, row iteration) are
|
|
14
|
-
* not the same instant and DynamoDB applies filters after `Limit`.
|
|
15
|
-
*/
|
|
16
|
-
export declare function withoutExpired<T extends QueryCommandInput | ScanCommandInput>(params: T, nowSeconds: number): T;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isExpiredRow = isExpiredRow;
|
|
4
|
-
exports.withoutExpired = withoutExpired;
|
|
5
|
-
/**
|
|
6
|
-
* True when a row carrying a DynamoDB TTL is at or past it. DynamoDB's sweep
|
|
7
|
-
* can lag up to ~48 h, so every read path applies this itself; the value is
|
|
8
|
-
* epoch seconds, the unit the `ttl` attribute uses.
|
|
9
|
-
*/
|
|
10
|
-
function isExpiredRow(row, nowSeconds) {
|
|
11
|
-
return row.ttl !== undefined && row.ttl <= nowSeconds;
|
|
12
|
-
}
|
|
13
|
-
const TTL_FILTER = 'attribute_not_exists(#ttl) OR #ttl > :now';
|
|
14
|
-
/**
|
|
15
|
-
* Exclude expired rows server-side, ANDing any filter the query already has.
|
|
16
|
-
* A filter never replaces the in-process {@link isExpiredRow} check — it only
|
|
17
|
-
* trims transfer — because the two clocks (query build, row iteration) are
|
|
18
|
-
* not the same instant and DynamoDB applies filters after `Limit`.
|
|
19
|
-
*/
|
|
20
|
-
function withoutExpired(params, nowSeconds) {
|
|
21
|
-
return {
|
|
22
|
-
...params,
|
|
23
|
-
FilterExpression: params.FilterExpression
|
|
24
|
-
? `(${params.FilterExpression}) AND (${TTL_FILTER})`
|
|
25
|
-
: TTL_FILTER,
|
|
26
|
-
ExpressionAttributeNames: { ...params.ExpressionAttributeNames, '#ttl': 'ttl' },
|
|
27
|
-
ExpressionAttributeValues: { ...params.ExpressionAttributeValues, ':now': nowSeconds },
|
|
28
|
-
};
|
|
29
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { RetryOptions } from './retry';
|
|
2
|
-
import type { DocItem } from './types';
|
|
3
|
-
/** One page of results plus the key to resume from (undefined when exhausted). */
|
|
4
|
-
export interface PageResult {
|
|
5
|
-
items: DocItem[];
|
|
6
|
-
lastKey: DocItem | undefined;
|
|
7
|
-
}
|
|
8
|
-
/** Options shared by the paginators built on {@link paginatePages}. */
|
|
9
|
-
export interface PaginateCoreOptions {
|
|
10
|
-
/** The adapter's retry options, applied to every page read. */
|
|
11
|
-
retry?: RetryOptions;
|
|
12
|
-
signal?: AbortSignal;
|
|
13
|
-
maxItems?: number;
|
|
14
|
-
maxIterations?: number;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Drive a paged DynamoDB read to completion, yielding each item. Continues past
|
|
18
|
-
* empty pages, honors the abort signal before each fetch, and enforces iteration
|
|
19
|
-
* + in-memory item caps. `fetchPage` performs one page read. When a cap is hit
|
|
20
|
-
* while more data actually remains, throws {@link ResultTruncatedError} rather
|
|
21
|
-
* than silently returning a partial result; pass `Infinity` caps to read to true
|
|
22
|
-
* completion (e.g. for deletes).
|
|
23
|
-
*/
|
|
24
|
-
export declare function paginatePages(fetchPage: (startKey: DocItem | undefined) => Promise<PageResult>, options?: PaginateCoreOptions): AsyncGenerator<DocItem>;
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.paginatePages = paginatePages;
|
|
4
|
-
const constants_1 = require("../constants");
|
|
5
|
-
const errors_1 = require("../errors/errors");
|
|
6
|
-
const abort_1 = require("./abort");
|
|
7
|
-
/** Read the next page, honouring the abort signal and the iteration cap first. */
|
|
8
|
-
async function readPage(reader, startKey) {
|
|
9
|
-
if (reader.iterations >= reader.maxIterations) {
|
|
10
|
-
throw new errors_1.ResultTruncatedError('maxIterations', reader.maxIterations);
|
|
11
|
-
}
|
|
12
|
-
if (reader.signal?.aborted)
|
|
13
|
-
throw (0, abort_1.abortErrorFrom)(reader.signal);
|
|
14
|
-
reader.iterations += 1;
|
|
15
|
-
return reader.fetchPage(startKey);
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Yield one page's items, counting toward the shared `state.yielded` budget.
|
|
19
|
-
* Reaching the cap with unyielded items still on the page is a truncation;
|
|
20
|
-
* reaching it on the last item is reported as `capped` for the caller to settle.
|
|
21
|
-
*/
|
|
22
|
-
async function* yieldPageItems(page, state, maxItems) {
|
|
23
|
-
for (let index = 0; index < page.items.length; index++) {
|
|
24
|
-
yield page.items[index];
|
|
25
|
-
state.yielded += 1;
|
|
26
|
-
if (state.yielded >= maxItems) {
|
|
27
|
-
if (index < page.items.length - 1)
|
|
28
|
-
throw new errors_1.ResultTruncatedError('maxItems', maxItems);
|
|
29
|
-
return 'capped';
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return 'exhausted';
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Whether anything remains past `startKey`. DynamoDB returns a
|
|
36
|
-
* `LastEvaluatedKey` whenever it stopped *evaluating* at the 1 MB boundary,
|
|
37
|
-
* whether or not a later item passes the filter, so a trailing key alone proves
|
|
38
|
-
* nothing: the keys are followed until a page carries an item (truncated) or
|
|
39
|
-
* they run out (the result was complete). The probe is charged against the same
|
|
40
|
-
* iteration budget and honours the same signal as the read itself.
|
|
41
|
-
*/
|
|
42
|
-
async function dataRemains(reader, startKey) {
|
|
43
|
-
let key = startKey;
|
|
44
|
-
while (key !== undefined) {
|
|
45
|
-
const page = await readPage(reader, key);
|
|
46
|
-
if (page.items.length > 0)
|
|
47
|
-
return true;
|
|
48
|
-
key = page.lastKey;
|
|
49
|
-
}
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Drive a paged DynamoDB read to completion, yielding each item. Continues past
|
|
54
|
-
* empty pages, honors the abort signal before each fetch, and enforces iteration
|
|
55
|
-
* + in-memory item caps. `fetchPage` performs one page read. When a cap is hit
|
|
56
|
-
* while more data actually remains, throws {@link ResultTruncatedError} rather
|
|
57
|
-
* than silently returning a partial result; pass `Infinity` caps to read to true
|
|
58
|
-
* completion (e.g. for deletes).
|
|
59
|
-
*/
|
|
60
|
-
async function* paginatePages(fetchPage, options = {}) {
|
|
61
|
-
const maxItems = options.maxItems ?? constants_1.MAX_TOTAL_ITEMS_IN_MEMORY;
|
|
62
|
-
const reader = {
|
|
63
|
-
fetchPage,
|
|
64
|
-
maxIterations: options.maxIterations ?? constants_1.MAX_LOOP_ITERATIONS,
|
|
65
|
-
iterations: 0,
|
|
66
|
-
signal: options.signal,
|
|
67
|
-
};
|
|
68
|
-
const state = { yielded: 0 };
|
|
69
|
-
let startKey;
|
|
70
|
-
for (;;) {
|
|
71
|
-
const page = await readPage(reader, startKey);
|
|
72
|
-
const outcome = yield* yieldPageItems(page, state, maxItems);
|
|
73
|
-
if (outcome === 'capped') {
|
|
74
|
-
if (await dataRemains(reader, page.lastKey))
|
|
75
|
-
throw new errors_1.ResultTruncatedError('maxItems', maxItems);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
startKey = page.lastKey;
|
|
79
|
-
if (startKey === undefined)
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { DynamoDBDocument, QueryCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
2
|
-
import { type PaginateCoreOptions } from './paginate-core';
|
|
3
|
-
import type { DocItem } from './types';
|
|
4
|
-
/** Options for {@link paginateQuery}. */
|
|
5
|
-
export interface PaginateOptions extends PaginateCoreOptions {
|
|
6
|
-
client: DynamoDBDocument;
|
|
7
|
-
params: QueryCommandInput;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Drive a DynamoDB Query across all pages, yielding each item. Follows
|
|
11
|
-
* `LastEvaluatedKey`, honors the abort signal, wraps each page in
|
|
12
|
-
* {@link withDynamoDBRetry}, and enforces runaway guards via the shared core.
|
|
13
|
-
*/
|
|
14
|
-
export declare function paginateQuery(options: PaginateOptions): AsyncGenerator<DocItem>;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.paginateQuery = paginateQuery;
|
|
4
|
-
const paginate_core_1 = require("./paginate-core");
|
|
5
|
-
const retry_1 = require("./retry");
|
|
6
|
-
/**
|
|
7
|
-
* Drive a DynamoDB Query across all pages, yielding each item. Follows
|
|
8
|
-
* `LastEvaluatedKey`, honors the abort signal, wraps each page in
|
|
9
|
-
* {@link withDynamoDBRetry}, and enforces runaway guards via the shared core.
|
|
10
|
-
*/
|
|
11
|
-
function paginateQuery(options) {
|
|
12
|
-
return (0, paginate_core_1.paginatePages)(async (startKey) => {
|
|
13
|
-
const page = await (0, retry_1.withDynamoDBRetry)(() => options.client.query({ ...options.params, ExclusiveStartKey: startKey }), { ...options.retry, signal: options.signal });
|
|
14
|
-
return {
|
|
15
|
-
items: page.Items ?? [],
|
|
16
|
-
lastKey: page.LastEvaluatedKey,
|
|
17
|
-
};
|
|
18
|
-
}, options);
|
|
19
|
-
}
|