@exabugs/dynamodb-client 0.8.0 → 0.9.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/CHANGELOG.md CHANGED
@@ -7,6 +7,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.9.0] - 2024-12-29
11
+
12
+ ### Added
13
+
14
+ - **Upsert Option for updateOne/updateMany**: MongoDB-compatible upsert functionality
15
+ - Added `UpdateOneOptions` and `UpdateManyOptions` types with `upsert` boolean option
16
+ - Added `upsertedId` field to `UpdateResult` type (set when a new document is created via upsert)
17
+ - Server-side implementation: `handleUpsertCreate` and `handleUpsertUpdate` functions
18
+ - Client-side implementation: Third parameter (options) for `updateOne` and `updateMany` methods
19
+ - Automatic timestamp management: `createdAt` and `updatedAt` are automatically set on upsert
20
+ - Automatic shadow record generation: Shadow records are created/updated during upsert operations
21
+ - Comprehensive test coverage: Unit tests and integration tests for upsert functionality
22
+ - Complete documentation: API reference, usage examples, and migration guide in `docs/API.md`
23
+
24
+ ### Changed
25
+
26
+ - **API Enhancement**: `updateOne` and `updateMany` methods now accept an optional third parameter for options
27
+ - Backward compatible: Existing code continues to work without changes
28
+ - Default behavior unchanged: `upsert` defaults to `false`
29
+
30
+ ### Documentation
31
+
32
+ - **API Reference**: Updated `docs/API.md` with detailed upsert option documentation
33
+ - Added UpdateOneOptions and UpdateManyOptions type definitions
34
+ - Added UpdateResult.upsertedId field explanation
35
+ - Added practical usage examples for upsert operations
36
+ - Added migration guide from v0.3.x to v0.4.x
37
+ - Added FAQ section for common upsert questions
38
+
39
+ ## [0.8.1] - 2025-12-28
40
+
41
+ ### Fixed
42
+
43
+ - **Terraform Outputs**: Removed deleted Cognito parameters from parameter-store module outputs
44
+ - Removed `cognito_user_pool_id`, `cognito_client_id`, `cognito_domain` from outputs.tf
45
+ - These parameters were removed in v0.8.0 but outputs.tf was not updated
46
+ - Fixes Terraform validation errors in consuming projects
47
+
10
48
  ## [0.8.0] - 2025-12-28
11
49
 
12
50
  ### BREAKING CHANGES
@@ -49,8 +49,12 @@ export declare class Collection<TSchema extends ResultBase = ResultBase, TAuthOp
49
49
  findMany(ids: string[]): Promise<TSchema[]>;
50
50
  insertOne(document: InputBase & Omit<TSchema, 'id'>): Promise<InsertOneResult>;
51
51
  insertMany(documents: (InputBase & Omit<TSchema, 'id'>)[]): Promise<InsertManyResult>;
52
- updateOne(filter: Filter<TSchema>, update: UpdateOperators<TSchema>): Promise<UpdateResult>;
53
- updateMany(filter: Filter<TSchema>, update: UpdateOperators<TSchema>): Promise<UpdateResult>;
52
+ updateOne(filter: Filter<TSchema>, update: UpdateOperators<TSchema>, options?: {
53
+ upsert?: boolean;
54
+ }): Promise<UpdateResult>;
55
+ updateMany(filter: Filter<TSchema>, update: UpdateOperators<TSchema>, options?: {
56
+ upsert?: boolean;
57
+ }): Promise<UpdateResult>;
54
58
  deleteOne(filter: Filter<TSchema>): Promise<DeleteResult>;
55
59
  deleteMany(filter: Filter<TSchema>): Promise<DeleteResult>;
56
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../../src/client/Collection.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,YAAY,EACZ,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,YAAY,GAAG,OAAO,IAAI,CACtD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,YAAY,KACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,EAAE,YAAY,GAAG,OAAO;IAEnF,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;gBALd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,YAAY,GAAG,SAAS,EACrC,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,cAAc,EAAE,iBAAiB,CAAC,YAAY,CAAC;IAGzD,OAAO,IAAI,MAAM;IAIjB,WAAW,IAAI,MAAM;IAIrB,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC,cAAc,IAAI,YAAY,GAAG,SAAS;IAI1C;;OAEG;YACW,OAAO;IAuDrB,IAAI,CAAC,MAAM,GAAE,MAAM,CAAC,OAAO,CAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IAatF,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAUzD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAU3C,SAAS,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAS9E,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmBrF,SAAS,CACb,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EACvB,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,GAC/B,OAAO,CAAC,YAAY,CAAC;IAelB,UAAU,CACd,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EACvB,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,GAC/B,OAAO,CAAC,YAAY,CAAC;IAkBlB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IASzD,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;CAUjE"}
1
+ {"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../../src/client/Collection.ts"],"names":[],"mappings":"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"}
@@ -129,18 +129,20 @@ export class Collection {
129
129
  errors: result.errors,
130
130
  };
131
131
  }
132
- async updateOne(filter, update) {
133
- const response = await this.request('updateOne', { filter, update });
132
+ async updateOne(filter, update, options) {
133
+ const response = await this.request('updateOne', { filter, update, options });
134
134
  const result = response;
135
+ // __upsertedIdフラグをupsertedIdに変換
136
+ const upsertedId = result.__upsertedId || result.upsertedId;
135
137
  return {
136
138
  acknowledged: true,
137
- matchedCount: result.matchedCount,
138
- modifiedCount: result.modifiedCount,
139
- upsertedId: result.upsertedId,
139
+ matchedCount: upsertedId ? 0 : 1, // upsertで新規作成の場合は0
140
+ modifiedCount: upsertedId ? 0 : 1, // upsertで新規作成の場合は0
141
+ upsertedId,
140
142
  };
141
143
  }
142
- async updateMany(filter, update) {
143
- const response = await this.request('updateMany', { filter, update });
144
+ async updateMany(filter, update, options) {
145
+ const response = await this.request('updateMany', { filter, update, options });
144
146
  // Records Lambdaは統一形式 { count, successIds, failedIds, errors } を返す
145
147
  // MongoDB互換形式に変換
146
148
  const result = response;
@@ -1 +1 @@
1
- {"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../src/client/Collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../src/client/Collection.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- // @exabugs/dynamodb-client v0.8.0
2
- // Built: 2025-12-28T12:59:33.043Z
1
+ // @exabugs/dynamodb-client v0.9.0
2
+ // Built: 2025-12-29T14:15:35.409Z
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -31063,11 +31063,13 @@ function applyJsonMergePatch2(target, patch) {
31063
31063
  }
31064
31064
  __name(applyJsonMergePatch2, "applyJsonMergePatch");
31065
31065
  async function handleUpdateOne(resource, params, requestId) {
31066
- const { id, data: patchData } = params;
31066
+ const { id, data: patchData, options } = params;
31067
+ const upsert = options?.upsert ?? false;
31067
31068
  logger18.debug("Executing updateOne", {
31068
31069
  requestId,
31069
31070
  resource,
31070
- id
31071
+ id,
31072
+ upsert
31071
31073
  });
31072
31074
  const dbClient2 = getDBClient();
31073
31075
  const tableName = getTableName();
@@ -31086,9 +31088,63 @@ async function handleUpdateOne(resource, params, requestId) {
31086
31088
  "GetItem"
31087
31089
  );
31088
31090
  if (!getResult.Item) {
31089
- throw new ItemNotFoundError(`Record not found: ${id}`, { resource, id });
31091
+ if (!upsert) {
31092
+ throw new ItemNotFoundError(`Record not found: ${id}`, { resource, id });
31093
+ }
31094
+ return await handleUpsertCreate(resource, id, patchData, requestId);
31090
31095
  }
31091
- const existingData = getResult.Item.data;
31096
+ return await handleUpsertUpdate(resource, id, getResult.Item, patchData, requestId);
31097
+ }
31098
+ __name(handleUpdateOne, "handleUpdateOne");
31099
+ async function handleUpsertCreate(resource, id, data2, requestId) {
31100
+ const recordData = addCreateTimestamps({ ...data2, id });
31101
+ const shadowConfig = getShadowConfig();
31102
+ const shadowRecords = generateShadowRecords(recordData, resource, shadowConfig);
31103
+ const shadowKeys = shadowRecords.map((shadow) => shadow.SK);
31104
+ const transactItems = [];
31105
+ transactItems.push({
31106
+ Put: {
31107
+ TableName: getTableName(),
31108
+ Item: {
31109
+ PK: resource,
31110
+ SK: generateMainRecordSK2(id),
31111
+ data: {
31112
+ ...recordData,
31113
+ __shadowKeys: shadowKeys
31114
+ }
31115
+ }
31116
+ }
31117
+ });
31118
+ for (const shadowRecord of shadowRecords) {
31119
+ transactItems.push({
31120
+ Put: {
31121
+ TableName: getTableName(),
31122
+ Item: shadowRecord
31123
+ }
31124
+ });
31125
+ }
31126
+ await executeDynamoDBOperation(
31127
+ () => getDBClient().send(
31128
+ new import_lib_dynamodb12.TransactWriteCommand({
31129
+ TransactItems: transactItems
31130
+ })
31131
+ ),
31132
+ "TransactWriteItems"
31133
+ );
31134
+ logger18.info("updateOne upsert created", {
31135
+ requestId,
31136
+ resource,
31137
+ id,
31138
+ shadowsCreated: shadowKeys.length
31139
+ });
31140
+ return {
31141
+ ...removeShadowKeys(recordData),
31142
+ __upsertedId: id
31143
+ };
31144
+ }
31145
+ __name(handleUpsertCreate, "handleUpsertCreate");
31146
+ async function handleUpsertUpdate(resource, id, existingItem, patchData, requestId) {
31147
+ const existingData = existingItem.data;
31092
31148
  const oldShadowKeys = existingData.__shadowKeys || [];
31093
31149
  const mergedData = applyJsonMergePatch2(removeShadowKeys(existingData), patchData);
31094
31150
  const updatedData = addUpdateTimestamp({
@@ -31103,10 +31159,10 @@ async function handleUpdateOne(resource, params, requestId) {
31103
31159
  const transactItems = [];
31104
31160
  transactItems.push({
31105
31161
  Put: {
31106
- TableName: tableName,
31162
+ TableName: getTableName(),
31107
31163
  Item: {
31108
31164
  PK: resource,
31109
- SK: mainSK,
31165
+ SK: generateMainRecordSK2(id),
31110
31166
  data: {
31111
31167
  ...updatedData,
31112
31168
  __shadowKeys: newShadowKeys
@@ -31117,7 +31173,7 @@ async function handleUpdateOne(resource, params, requestId) {
31117
31173
  for (const shadowSK of shadowDiff.toDelete) {
31118
31174
  transactItems.push({
31119
31175
  Delete: {
31120
- TableName: tableName,
31176
+ TableName: getTableName(),
31121
31177
  Key: {
31122
31178
  PK: resource,
31123
31179
  SK: shadowSK
@@ -31129,21 +31185,21 @@ async function handleUpdateOne(resource, params, requestId) {
31129
31185
  if (shadowDiff.toAdd.includes(shadowRecord.SK)) {
31130
31186
  transactItems.push({
31131
31187
  Put: {
31132
- TableName: tableName,
31188
+ TableName: getTableName(),
31133
31189
  Item: shadowRecord
31134
31190
  }
31135
31191
  });
31136
31192
  }
31137
31193
  }
31138
31194
  await executeDynamoDBOperation(
31139
- () => dbClient2.send(
31195
+ () => getDBClient().send(
31140
31196
  new import_lib_dynamodb12.TransactWriteCommand({
31141
31197
  TransactItems: transactItems
31142
31198
  })
31143
31199
  ),
31144
31200
  "TransactWriteItems"
31145
31201
  );
31146
- logger18.info("updateOne succeeded", {
31202
+ logger18.info("updateOne upsert updated", {
31147
31203
  requestId,
31148
31204
  resource,
31149
31205
  id,
@@ -31153,7 +31209,7 @@ async function handleUpdateOne(resource, params, requestId) {
31153
31209
  });
31154
31210
  return removeShadowKeys(updatedData);
31155
31211
  }
31156
- __name(handleUpdateOne, "handleUpdateOne");
31212
+ __name(handleUpsertUpdate, "handleUpsertUpdate");
31157
31213
 
31158
31214
  // src/server/operations/parameterConverter.ts
31159
31215
  function convertFindParams(mongoParams) {