@xylabs/mongo 4.12.42 → 4.12.43

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.
@@ -68,6 +68,11 @@ var BaseMongoSdk = class {
68
68
  return await collection.insertOne(item, options);
69
69
  });
70
70
  }
71
+ async replaceOne(item, options) {
72
+ return await this.useCollection(async (collection) => {
73
+ return await collection.replaceOne({ _id: item._id }, item, options);
74
+ });
75
+ }
71
76
  async updateOne(filter, fields) {
72
77
  return await this.useCollection(async (collection) => {
73
78
  return await collection.updateOne(filter, fields, { upsert: false });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Base.ts","../../src/Wrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type {\n BulkWriteOptions,\n Collection,\n DeleteResult,\n Document,\n Filter,\n FindCursor,\n InsertOneOptions,\n MongoClient,\n OptionalUnlessRequiredId,\n UpdateFilter,\n WithId,\n} from 'mongodb'\n\nimport type { BaseMongoSdkConfig } from './Config.js'\nimport { MongoClientWrapper } from './Wrapper.js'\n\nexport class BaseMongoSdk<T extends Document> {\n config: BaseMongoSdkConfig\n\n constructor(config: BaseMongoSdkConfig) {\n this.config = config\n }\n\n get uri() {\n return (\n this.config.dbConnectionString\n // eslint-disable-next-line @stylistic/max-len\n ?? `mongodb+srv://${this.config.dbUserName}:${this.config.dbPassword}@${this.config.dbDomain}.mongodb.net/${this.config.dbName}?retryWrites=true&w=majority`\n )\n }\n\n async deleteMany(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteMany(filter)\n })\n }\n\n async deleteOne(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteOne(filter)\n })\n }\n\n async find(filter: Filter<T>) {\n return await this.useCollection<FindCursor<WithId<T>>>((collection: Collection<T>) => {\n return collection.find(filter)\n })\n }\n\n async findOne(filter: Filter<T>) {\n return await this.useCollection<WithId<T> | null>(async (collection: Collection<T>) => {\n return await collection.findOne(filter)\n })\n }\n\n async insertMany(items: OptionalUnlessRequiredId<T>[], options?: BulkWriteOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertMany(items, options)\n })\n }\n\n async insertOne(item: OptionalUnlessRequiredId<T>, options?: InsertOneOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertOne(item, options)\n })\n }\n\n async updateOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: false })\n })\n }\n\n async upsertOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: true })\n })\n }\n\n async useCollection<R>(func: (collection: Collection<T>) => Promise<R> | R) {\n return await this.useMongo<R>(async (client: MongoClient) => {\n return await func(client.db(this.config.dbName).collection<T>(this.config.collection))\n })\n }\n\n async useMongo<R>(func: (client: MongoClient) => Promise<R> | R) {\n const wrapper = MongoClientWrapper.get(this.uri, this.config.maxPoolSize, this.config.closeDelay)\n const connection = await wrapper.connect()\n assertEx(connection, () => 'Connection failed')\n try {\n return await func(connection)\n } finally {\n await wrapper.disconnect()\n }\n }\n}\n","import type { MongoClientOptions } from 'mongodb'\nimport { MongoClient } from 'mongodb'\n\nexport class MongoClientWrapper {\n static readonly clients = new Map<string, MongoClientWrapper>()\n\n private client: MongoClient\n\n constructor(uri: string, maxPoolSize?: number, closeDelay?: number) {\n const options: MongoClientOptions = { maxPoolSize, maxIdleTimeMS: closeDelay }\n this.client = new MongoClient(uri, options)\n }\n\n static get(uri: string, poolSize?: number, closeDelay?: number) {\n let client = this.clients.get(uri)\n if (!client) {\n client = new MongoClientWrapper(uri, poolSize, closeDelay)\n this.clients.set(uri, client)\n }\n return client\n }\n\n async connect() {\n return await Promise.resolve(this.client)\n }\n\n async disconnect() {\n return await Promise.resolve(0)\n }\n\n async initiateClose() {\n await Promise.resolve()\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Base.ts","../../src/Wrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type {\n BulkWriteOptions,\n Collection,\n DeleteResult,\n Document,\n Filter,\n FindCursor,\n InsertOneOptions,\n MongoClient,\n OptionalUnlessRequiredId,\n ReplaceOptions,\n UpdateFilter,\n WithId,\n} from 'mongodb'\n\nimport type { BaseMongoSdkConfig } from './Config.js'\nimport { MongoClientWrapper } from './Wrapper.js'\n\nexport class BaseMongoSdk<T extends Document> {\n config: BaseMongoSdkConfig\n\n constructor(config: BaseMongoSdkConfig) {\n this.config = config\n }\n\n get uri() {\n return (\n this.config.dbConnectionString\n // eslint-disable-next-line @stylistic/max-len\n ?? `mongodb+srv://${this.config.dbUserName}:${this.config.dbPassword}@${this.config.dbDomain}.mongodb.net/${this.config.dbName}?retryWrites=true&w=majority`\n )\n }\n\n async deleteMany(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteMany(filter)\n })\n }\n\n async deleteOne(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteOne(filter)\n })\n }\n\n async find(filter: Filter<T>) {\n return await this.useCollection<FindCursor<WithId<T>>>((collection: Collection<T>) => {\n return collection.find(filter)\n })\n }\n\n async findOne(filter: Filter<T>) {\n return await this.useCollection<WithId<T> | null>(async (collection: Collection<T>) => {\n return await collection.findOne(filter)\n })\n }\n\n async insertMany(items: OptionalUnlessRequiredId<T>[], options?: BulkWriteOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertMany(items, options)\n })\n }\n\n async insertOne(item: OptionalUnlessRequiredId<T>, options?: InsertOneOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertOne(item, options)\n })\n }\n\n async replaceOne(item: OptionalUnlessRequiredId<T>, options?: ReplaceOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.replaceOne({ _id: item._id }, item, options)\n })\n }\n\n async updateOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: false })\n })\n }\n\n async upsertOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: true })\n })\n }\n\n async useCollection<R>(func: (collection: Collection<T>) => Promise<R> | R) {\n return await this.useMongo<R>(async (client: MongoClient) => {\n return await func(client.db(this.config.dbName).collection<T>(this.config.collection))\n })\n }\n\n async useMongo<R>(func: (client: MongoClient) => Promise<R> | R) {\n const wrapper = MongoClientWrapper.get(this.uri, this.config.maxPoolSize, this.config.closeDelay)\n const connection = await wrapper.connect()\n assertEx(connection, () => 'Connection failed')\n try {\n return await func(connection)\n } finally {\n await wrapper.disconnect()\n }\n }\n}\n","import type { MongoClientOptions } from 'mongodb'\nimport { MongoClient } from 'mongodb'\n\nexport class MongoClientWrapper {\n static readonly clients = new Map<string, MongoClientWrapper>()\n\n private client: MongoClient\n\n constructor(uri: string, maxPoolSize?: number, closeDelay?: number) {\n const options: MongoClientOptions = { maxPoolSize, maxIdleTimeMS: closeDelay }\n this.client = new MongoClient(uri, options)\n }\n\n static get(uri: string, poolSize?: number, closeDelay?: number) {\n let client = this.clients.get(uri)\n if (!client) {\n client = new MongoClientWrapper(uri, poolSize, closeDelay)\n this.clients.set(uri, client)\n }\n return client\n }\n\n async connect() {\n return await Promise.resolve(this.client)\n }\n\n async disconnect() {\n return await Promise.resolve(0)\n }\n\n async initiateClose() {\n await Promise.resolve()\n }\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;;;ACCzB,SAAS,mBAAmB;AAErB,IAAM,qBAAN,MAAM,oBAAmB;AAAA,EAC9B,OAAgB,UAAU,oBAAI,IAAgC;AAAA,EAEtD;AAAA,EAER,YAAY,KAAa,aAAsB,YAAqB;AAClE,UAAM,UAA8B,EAAE,aAAa,eAAe,WAAW;AAC7E,SAAK,SAAS,IAAI,YAAY,KAAK,OAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,IAAI,KAAa,UAAmB,YAAqB;AAC9D,QAAI,SAAS,KAAK,QAAQ,IAAI,GAAG;AACjC,QAAI,CAAC,QAAQ;AACX,eAAS,IAAI,oBAAmB,KAAK,UAAU,UAAU;AACzD,WAAK,QAAQ,IAAI,KAAK,MAAM;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAU;AACd,WAAO,MAAM,QAAQ,QAAQ,KAAK,MAAM;AAAA,EAC1C;AAAA,EAEA,MAAM,aAAa;AACjB,WAAO,MAAM,QAAQ,QAAQ,CAAC;AAAA,EAChC;AAAA,EAEA,MAAM,gBAAgB;AACpB,UAAM,QAAQ,QAAQ;AAAA,EACxB;AACF;;;ADdO,IAAM,eAAN,MAAuC;AAAA,EAC5C;AAAA,EAEA,YAAY,QAA4B;AACtC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,MAAM;AACR,WACE,KAAK,OAAO,sBAET,iBAAiB,KAAK,OAAO,UAAU,IAAI,KAAK,OAAO,UAAU,IAAI,KAAK,OAAO,QAAQ,gBAAgB,KAAK,OAAO,MAAM;AAAA,EAElI;AAAA,EAEA,MAAM,WAAW,QAAmB;AAClC,WAAO,MAAM,KAAK,cAA4B,OAAO,eAA8B;AACjF,aAAO,MAAM,WAAW,WAAW,MAAM;AAAA,IAC3C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,QAAmB;AACjC,WAAO,MAAM,KAAK,cAA4B,OAAO,eAA8B;AACjF,aAAO,MAAM,WAAW,UAAU,MAAM;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,QAAmB;AAC5B,WAAO,MAAM,KAAK,cAAqC,CAAC,eAA8B;AACpF,aAAO,WAAW,KAAK,MAAM;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,QAAmB;AAC/B,WAAO,MAAM,KAAK,cAAgC,OAAO,eAA8B;AACrF,aAAO,MAAM,WAAW,QAAQ,MAAM;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,OAAsC,SAA4B;AACjF,WAAO,MAAM,KAAK,cAAc,OAAO,eAA8B;AACnE,aAAO,MAAM,WAAW,WAAW,OAAO,OAAO;AAAA,IACnD,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,MAAmC,SAA4B;AAC7E,WAAO,MAAM,KAAK,cAAc,OAAO,eAA8B;AACnE,aAAO,MAAM,WAAW,UAAU,MAAM,OAAO;AAAA,IACjD,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,MAAmC,SAA0B;AAC5E,WAAO,MAAM,KAAK,cAAc,OAAO,eAA8B;AACnE,aAAO,MAAM,WAAW,WAAW,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,OAAO;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,QAAmB,QAAyB;AAC1D,WAAO,MAAM,KAAK,cAAc,OAAO,eAA8B;AACnE,aAAO,MAAM,WAAW,UAAU,QAAQ,QAAQ,EAAE,QAAQ,MAAM,CAAC;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,QAAmB,QAAyB;AAC1D,WAAO,MAAM,KAAK,cAAc,OAAO,eAA8B;AACnE,aAAO,MAAM,WAAW,UAAU,QAAQ,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAAA,IACpE,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAiB,MAAqD;AAC1E,WAAO,MAAM,KAAK,SAAY,OAAO,WAAwB;AAC3D,aAAO,MAAM,KAAK,OAAO,GAAG,KAAK,OAAO,MAAM,EAAE,WAAc,KAAK,OAAO,UAAU,CAAC;AAAA,IACvF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAY,MAA+C;AAC/D,UAAM,UAAU,mBAAmB,IAAI,KAAK,KAAK,KAAK,OAAO,aAAa,KAAK,OAAO,UAAU;AAChG,UAAM,aAAa,MAAM,QAAQ,QAAQ;AACzC,aAAS,YAAY,MAAM,mBAAmB;AAC9C,QAAI;AACF,aAAO,MAAM,KAAK,UAAU;AAAA,IAC9B,UAAE;AACA,YAAM,QAAQ,WAAW;AAAA,IAC3B;AAAA,EACF;AACF;","names":[]}
@@ -68,6 +68,11 @@ var BaseMongoSdk = class {
68
68
  return await collection.insertOne(item, options);
69
69
  });
70
70
  }
71
+ async replaceOne(item, options) {
72
+ return await this.useCollection(async (collection) => {
73
+ return await collection.replaceOne({ _id: item._id }, item, options);
74
+ });
75
+ }
71
76
  async updateOne(filter, fields) {
72
77
  return await this.useCollection(async (collection) => {
73
78
  return await collection.updateOne(filter, fields, { upsert: false });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Base.ts","../../src/Wrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type {\n BulkWriteOptions,\n Collection,\n DeleteResult,\n Document,\n Filter,\n FindCursor,\n InsertOneOptions,\n MongoClient,\n OptionalUnlessRequiredId,\n UpdateFilter,\n WithId,\n} from 'mongodb'\n\nimport type { BaseMongoSdkConfig } from './Config.js'\nimport { MongoClientWrapper } from './Wrapper.js'\n\nexport class BaseMongoSdk<T extends Document> {\n config: BaseMongoSdkConfig\n\n constructor(config: BaseMongoSdkConfig) {\n this.config = config\n }\n\n get uri() {\n return (\n this.config.dbConnectionString\n // eslint-disable-next-line @stylistic/max-len\n ?? `mongodb+srv://${this.config.dbUserName}:${this.config.dbPassword}@${this.config.dbDomain}.mongodb.net/${this.config.dbName}?retryWrites=true&w=majority`\n )\n }\n\n async deleteMany(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteMany(filter)\n })\n }\n\n async deleteOne(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteOne(filter)\n })\n }\n\n async find(filter: Filter<T>) {\n return await this.useCollection<FindCursor<WithId<T>>>((collection: Collection<T>) => {\n return collection.find(filter)\n })\n }\n\n async findOne(filter: Filter<T>) {\n return await this.useCollection<WithId<T> | null>(async (collection: Collection<T>) => {\n return await collection.findOne(filter)\n })\n }\n\n async insertMany(items: OptionalUnlessRequiredId<T>[], options?: BulkWriteOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertMany(items, options)\n })\n }\n\n async insertOne(item: OptionalUnlessRequiredId<T>, options?: InsertOneOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertOne(item, options)\n })\n }\n\n async updateOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: false })\n })\n }\n\n async upsertOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: true })\n })\n }\n\n async useCollection<R>(func: (collection: Collection<T>) => Promise<R> | R) {\n return await this.useMongo<R>(async (client: MongoClient) => {\n return await func(client.db(this.config.dbName).collection<T>(this.config.collection))\n })\n }\n\n async useMongo<R>(func: (client: MongoClient) => Promise<R> | R) {\n const wrapper = MongoClientWrapper.get(this.uri, this.config.maxPoolSize, this.config.closeDelay)\n const connection = await wrapper.connect()\n assertEx(connection, () => 'Connection failed')\n try {\n return await func(connection)\n } finally {\n await wrapper.disconnect()\n }\n }\n}\n","import type { MongoClientOptions } from 'mongodb'\nimport { MongoClient } from 'mongodb'\n\nexport class MongoClientWrapper {\n static readonly clients = new Map<string, MongoClientWrapper>()\n\n private client: MongoClient\n\n constructor(uri: string, maxPoolSize?: number, closeDelay?: number) {\n const options: MongoClientOptions = { maxPoolSize, maxIdleTimeMS: closeDelay }\n this.client = new MongoClient(uri, options)\n }\n\n static get(uri: string, poolSize?: number, closeDelay?: number) {\n let client = this.clients.get(uri)\n if (!client) {\n client = new MongoClientWrapper(uri, poolSize, closeDelay)\n this.clients.set(uri, client)\n }\n return client\n }\n\n async connect() {\n return await Promise.resolve(this.client)\n }\n\n async disconnect() {\n return await Promise.resolve(0)\n }\n\n async initiateClose() {\n await Promise.resolve()\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Base.ts","../../src/Wrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type {\n BulkWriteOptions,\n Collection,\n DeleteResult,\n Document,\n Filter,\n FindCursor,\n InsertOneOptions,\n MongoClient,\n OptionalUnlessRequiredId,\n ReplaceOptions,\n UpdateFilter,\n WithId,\n} from 'mongodb'\n\nimport type { BaseMongoSdkConfig } from './Config.js'\nimport { MongoClientWrapper } from './Wrapper.js'\n\nexport class BaseMongoSdk<T extends Document> {\n config: BaseMongoSdkConfig\n\n constructor(config: BaseMongoSdkConfig) {\n this.config = config\n }\n\n get uri() {\n return (\n this.config.dbConnectionString\n // eslint-disable-next-line @stylistic/max-len\n ?? `mongodb+srv://${this.config.dbUserName}:${this.config.dbPassword}@${this.config.dbDomain}.mongodb.net/${this.config.dbName}?retryWrites=true&w=majority`\n )\n }\n\n async deleteMany(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteMany(filter)\n })\n }\n\n async deleteOne(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteOne(filter)\n })\n }\n\n async find(filter: Filter<T>) {\n return await this.useCollection<FindCursor<WithId<T>>>((collection: Collection<T>) => {\n return collection.find(filter)\n })\n }\n\n async findOne(filter: Filter<T>) {\n return await this.useCollection<WithId<T> | null>(async (collection: Collection<T>) => {\n return await collection.findOne(filter)\n })\n }\n\n async insertMany(items: OptionalUnlessRequiredId<T>[], options?: BulkWriteOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertMany(items, options)\n })\n }\n\n async insertOne(item: OptionalUnlessRequiredId<T>, options?: InsertOneOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertOne(item, options)\n })\n }\n\n async replaceOne(item: OptionalUnlessRequiredId<T>, options?: ReplaceOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.replaceOne({ _id: item._id }, item, options)\n })\n }\n\n async updateOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: false })\n })\n }\n\n async upsertOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: true })\n })\n }\n\n async useCollection<R>(func: (collection: Collection<T>) => Promise<R> | R) {\n return await this.useMongo<R>(async (client: MongoClient) => {\n return await func(client.db(this.config.dbName).collection<T>(this.config.collection))\n })\n }\n\n async useMongo<R>(func: (client: MongoClient) => Promise<R> | R) {\n const wrapper = MongoClientWrapper.get(this.uri, this.config.maxPoolSize, this.config.closeDelay)\n const connection = await wrapper.connect()\n assertEx(connection, () => 'Connection failed')\n try {\n return await func(connection)\n } finally {\n await wrapper.disconnect()\n }\n }\n}\n","import type { MongoClientOptions } from 'mongodb'\nimport { MongoClient } from 'mongodb'\n\nexport class MongoClientWrapper {\n static readonly clients = new Map<string, MongoClientWrapper>()\n\n private client: MongoClient\n\n constructor(uri: string, maxPoolSize?: number, closeDelay?: number) {\n const options: MongoClientOptions = { maxPoolSize, maxIdleTimeMS: closeDelay }\n this.client = new MongoClient(uri, options)\n }\n\n static get(uri: string, poolSize?: number, closeDelay?: number) {\n let client = this.clients.get(uri)\n if (!client) {\n client = new MongoClientWrapper(uri, poolSize, closeDelay)\n this.clients.set(uri, client)\n }\n return client\n }\n\n async connect() {\n return await Promise.resolve(this.client)\n }\n\n async disconnect() {\n return await Promise.resolve(0)\n }\n\n async initiateClose() {\n await Promise.resolve()\n }\n}\n"],"mappings":"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","names":[]}
@@ -68,6 +68,11 @@ var BaseMongoSdk = class {
68
68
  return await collection.insertOne(item, options);
69
69
  });
70
70
  }
71
+ async replaceOne(item, options) {
72
+ return await this.useCollection(async (collection) => {
73
+ return await collection.replaceOne({ _id: item._id }, item, options);
74
+ });
75
+ }
71
76
  async updateOne(filter, fields) {
72
77
  return await this.useCollection(async (collection) => {
73
78
  return await collection.updateOne(filter, fields, { upsert: false });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Base.ts","../../src/Wrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type {\n BulkWriteOptions,\n Collection,\n DeleteResult,\n Document,\n Filter,\n FindCursor,\n InsertOneOptions,\n MongoClient,\n OptionalUnlessRequiredId,\n UpdateFilter,\n WithId,\n} from 'mongodb'\n\nimport type { BaseMongoSdkConfig } from './Config.js'\nimport { MongoClientWrapper } from './Wrapper.js'\n\nexport class BaseMongoSdk<T extends Document> {\n config: BaseMongoSdkConfig\n\n constructor(config: BaseMongoSdkConfig) {\n this.config = config\n }\n\n get uri() {\n return (\n this.config.dbConnectionString\n // eslint-disable-next-line @stylistic/max-len\n ?? `mongodb+srv://${this.config.dbUserName}:${this.config.dbPassword}@${this.config.dbDomain}.mongodb.net/${this.config.dbName}?retryWrites=true&w=majority`\n )\n }\n\n async deleteMany(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteMany(filter)\n })\n }\n\n async deleteOne(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteOne(filter)\n })\n }\n\n async find(filter: Filter<T>) {\n return await this.useCollection<FindCursor<WithId<T>>>((collection: Collection<T>) => {\n return collection.find(filter)\n })\n }\n\n async findOne(filter: Filter<T>) {\n return await this.useCollection<WithId<T> | null>(async (collection: Collection<T>) => {\n return await collection.findOne(filter)\n })\n }\n\n async insertMany(items: OptionalUnlessRequiredId<T>[], options?: BulkWriteOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertMany(items, options)\n })\n }\n\n async insertOne(item: OptionalUnlessRequiredId<T>, options?: InsertOneOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertOne(item, options)\n })\n }\n\n async updateOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: false })\n })\n }\n\n async upsertOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: true })\n })\n }\n\n async useCollection<R>(func: (collection: Collection<T>) => Promise<R> | R) {\n return await this.useMongo<R>(async (client: MongoClient) => {\n return await func(client.db(this.config.dbName).collection<T>(this.config.collection))\n })\n }\n\n async useMongo<R>(func: (client: MongoClient) => Promise<R> | R) {\n const wrapper = MongoClientWrapper.get(this.uri, this.config.maxPoolSize, this.config.closeDelay)\n const connection = await wrapper.connect()\n assertEx(connection, () => 'Connection failed')\n try {\n return await func(connection)\n } finally {\n await wrapper.disconnect()\n }\n }\n}\n","import type { MongoClientOptions } from 'mongodb'\nimport { MongoClient } from 'mongodb'\n\nexport class MongoClientWrapper {\n static readonly clients = new Map<string, MongoClientWrapper>()\n\n private client: MongoClient\n\n constructor(uri: string, maxPoolSize?: number, closeDelay?: number) {\n const options: MongoClientOptions = { maxPoolSize, maxIdleTimeMS: closeDelay }\n this.client = new MongoClient(uri, options)\n }\n\n static get(uri: string, poolSize?: number, closeDelay?: number) {\n let client = this.clients.get(uri)\n if (!client) {\n client = new MongoClientWrapper(uri, poolSize, closeDelay)\n this.clients.set(uri, client)\n }\n return client\n }\n\n async connect() {\n return await Promise.resolve(this.client)\n }\n\n async disconnect() {\n return await Promise.resolve(0)\n }\n\n async initiateClose() {\n await Promise.resolve()\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Base.ts","../../src/Wrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type {\n BulkWriteOptions,\n Collection,\n DeleteResult,\n Document,\n Filter,\n FindCursor,\n InsertOneOptions,\n MongoClient,\n OptionalUnlessRequiredId,\n ReplaceOptions,\n UpdateFilter,\n WithId,\n} from 'mongodb'\n\nimport type { BaseMongoSdkConfig } from './Config.js'\nimport { MongoClientWrapper } from './Wrapper.js'\n\nexport class BaseMongoSdk<T extends Document> {\n config: BaseMongoSdkConfig\n\n constructor(config: BaseMongoSdkConfig) {\n this.config = config\n }\n\n get uri() {\n return (\n this.config.dbConnectionString\n // eslint-disable-next-line @stylistic/max-len\n ?? `mongodb+srv://${this.config.dbUserName}:${this.config.dbPassword}@${this.config.dbDomain}.mongodb.net/${this.config.dbName}?retryWrites=true&w=majority`\n )\n }\n\n async deleteMany(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteMany(filter)\n })\n }\n\n async deleteOne(filter: Filter<T>) {\n return await this.useCollection<DeleteResult>(async (collection: Collection<T>) => {\n return await collection.deleteOne(filter)\n })\n }\n\n async find(filter: Filter<T>) {\n return await this.useCollection<FindCursor<WithId<T>>>((collection: Collection<T>) => {\n return collection.find(filter)\n })\n }\n\n async findOne(filter: Filter<T>) {\n return await this.useCollection<WithId<T> | null>(async (collection: Collection<T>) => {\n return await collection.findOne(filter)\n })\n }\n\n async insertMany(items: OptionalUnlessRequiredId<T>[], options?: BulkWriteOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertMany(items, options)\n })\n }\n\n async insertOne(item: OptionalUnlessRequiredId<T>, options?: InsertOneOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.insertOne(item, options)\n })\n }\n\n async replaceOne(item: OptionalUnlessRequiredId<T>, options?: ReplaceOptions) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.replaceOne({ _id: item._id }, item, options)\n })\n }\n\n async updateOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: false })\n })\n }\n\n async upsertOne(filter: Filter<T>, fields: UpdateFilter<T>) {\n return await this.useCollection(async (collection: Collection<T>) => {\n return await collection.updateOne(filter, fields, { upsert: true })\n })\n }\n\n async useCollection<R>(func: (collection: Collection<T>) => Promise<R> | R) {\n return await this.useMongo<R>(async (client: MongoClient) => {\n return await func(client.db(this.config.dbName).collection<T>(this.config.collection))\n })\n }\n\n async useMongo<R>(func: (client: MongoClient) => Promise<R> | R) {\n const wrapper = MongoClientWrapper.get(this.uri, this.config.maxPoolSize, this.config.closeDelay)\n const connection = await wrapper.connect()\n assertEx(connection, () => 'Connection failed')\n try {\n return await func(connection)\n } finally {\n await wrapper.disconnect()\n }\n }\n}\n","import type { MongoClientOptions } from 'mongodb'\nimport { MongoClient } from 'mongodb'\n\nexport class MongoClientWrapper {\n static readonly clients = new Map<string, MongoClientWrapper>()\n\n private client: MongoClient\n\n constructor(uri: string, maxPoolSize?: number, closeDelay?: number) {\n const options: MongoClientOptions = { maxPoolSize, maxIdleTimeMS: closeDelay }\n this.client = new MongoClient(uri, options)\n }\n\n static get(uri: string, poolSize?: number, closeDelay?: number) {\n let client = this.clients.get(uri)\n if (!client) {\n client = new MongoClientWrapper(uri, poolSize, closeDelay)\n this.clients.set(uri, client)\n }\n return client\n }\n\n async connect() {\n return await Promise.resolve(this.client)\n }\n\n async disconnect() {\n return await Promise.resolve(0)\n }\n\n async initiateClose() {\n await Promise.resolve()\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- import type { BulkWriteOptions, Collection, DeleteResult, Document, Filter, FindCursor, InsertOneOptions, MongoClient, OptionalUnlessRequiredId, UpdateFilter, WithId } from 'mongodb';
1
+ import type { BulkWriteOptions, Collection, DeleteResult, Document, Filter, FindCursor, InsertOneOptions, MongoClient, OptionalUnlessRequiredId, ReplaceOptions, UpdateFilter, WithId } from 'mongodb';
2
2
  import type { BaseMongoSdkConfig } from './Config.js';
3
3
  export declare class BaseMongoSdk<T extends Document> {
4
4
  config: BaseMongoSdkConfig;
@@ -10,6 +10,7 @@ export declare class BaseMongoSdk<T extends Document> {
10
10
  findOne(filter: Filter<T>): Promise<WithId<T> | null>;
11
11
  insertMany(items: OptionalUnlessRequiredId<T>[], options?: BulkWriteOptions): Promise<import("mongodb").InsertManyResult<T>>;
12
12
  insertOne(item: OptionalUnlessRequiredId<T>, options?: InsertOneOptions): Promise<import("mongodb").InsertOneResult<T>>;
13
+ replaceOne(item: OptionalUnlessRequiredId<T>, options?: ReplaceOptions): Promise<import("mongodb").UpdateResult<T>>;
13
14
  updateOne(filter: Filter<T>, fields: UpdateFilter<T>): Promise<import("mongodb").UpdateResult<T>>;
14
15
  upsertOne(filter: Filter<T>, fields: UpdateFilter<T>): Promise<import("mongodb").UpdateResult<T>>;
15
16
  useCollection<R>(func: (collection: Collection<T>) => Promise<R> | R): Promise<R>;
@@ -1 +1 @@
1
- {"version":3,"file":"Base.d.ts","sourceRoot":"","sources":["../../src/Base.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,wBAAwB,EACxB,YAAY,EACZ,MAAM,EACP,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGrD,qBAAa,YAAY,CAAC,CAAC,SAAS,QAAQ;IAC1C,MAAM,EAAE,kBAAkB,CAAA;gBAEd,MAAM,EAAE,kBAAkB;IAItC,IAAI,GAAG,WAMN;IAEK,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAM5B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAM3B,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAMtB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAMzB,UAAU,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAM3E,SAAS,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAMvE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAMpD,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAMpD,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAMpE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;CAUhE"}
1
+ {"version":3,"file":"Base.d.ts","sourceRoot":"","sources":["../../src/Base.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,MAAM,EACP,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGrD,qBAAa,YAAY,CAAC,CAAC,SAAS,QAAQ;IAC1C,MAAM,EAAE,kBAAkB,CAAA;gBAEd,MAAM,EAAE,kBAAkB;IAItC,IAAI,GAAG,WAMN;IAEK,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAM5B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAM3B,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAMtB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAMzB,UAAU,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAM3E,SAAS,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAMvE,UAAU,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc;IAMtE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAMpD,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAMpD,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAMpE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;CAUhE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/mongo",
3
- "version": "4.12.42",
3
+ "version": "4.12.43",
4
4
  "description": "Base functionality used throughout XYO TypeScript/JavaScript libraries that access Mongo DB",
5
5
  "keywords": [
6
6
  "mongo",
@@ -40,7 +40,7 @@
40
40
  "module": "dist/node/index.mjs",
41
41
  "types": "dist/types/index.d.ts",
42
42
  "dependencies": {
43
- "@xylabs/assert": "^4.12.42",
43
+ "@xylabs/assert": "^4.12.43",
44
44
  "mongodb": "~6.17.0"
45
45
  },
46
46
  "devDependencies": {
package/src/Base.ts CHANGED
@@ -9,6 +9,7 @@ import type {
9
9
  InsertOneOptions,
10
10
  MongoClient,
11
11
  OptionalUnlessRequiredId,
12
+ ReplaceOptions,
12
13
  UpdateFilter,
13
14
  WithId,
14
15
  } from 'mongodb'
@@ -67,6 +68,12 @@ export class BaseMongoSdk<T extends Document> {
67
68
  })
68
69
  }
69
70
 
71
+ async replaceOne(item: OptionalUnlessRequiredId<T>, options?: ReplaceOptions) {
72
+ return await this.useCollection(async (collection: Collection<T>) => {
73
+ return await collection.replaceOne({ _id: item._id }, item, options)
74
+ })
75
+ }
76
+
70
77
  async updateOne(filter: Filter<T>, fields: UpdateFilter<T>) {
71
78
  return await this.useCollection(async (collection: Collection<T>) => {
72
79
  return await collection.updateOne(filter, fields, { upsert: false })