From f184917d623f5e83f3d22f06c735f508223e6b01 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 30 Jun 2021 17:01:26 +0200 Subject: [PATCH] feat(shell-api): expose BSONRegExp to users MONGOSH-859 --- packages/service-provider-core/src/index.ts | 6 ++++-- packages/service-provider-core/src/printable-bson.spec.ts | 4 ++++ packages/service-provider-core/src/printable-bson.ts | 4 ++++ .../service-provider-server/src/cli-service-provider.ts | 4 +++- packages/shell-api/src/shell-bson.ts | 6 ++++-- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/service-provider-core/src/index.ts b/packages/service-provider-core/src/index.ts index 1852cdcf05..1568e6e57f 100644 --- a/packages/service-provider-core/src/index.ts +++ b/packages/service-provider-core/src/index.ts @@ -20,7 +20,8 @@ import { Map, calculateObjectSize, Double, - EJSON + EJSON, + BSONRegExp } from 'bson'; import { bsonStringifiers } from './printable-bson'; import ShellAuthOptions from './shell-auth-options'; @@ -43,7 +44,8 @@ const bson = { Map, calculateObjectSize, Double, - EJSON + EJSON, + BSONRegExp }; export { diff --git a/packages/service-provider-core/src/printable-bson.spec.ts b/packages/service-provider-core/src/printable-bson.spec.ts index aa1e274af9..c2e4dfb1e9 100644 --- a/packages/service-provider-core/src/printable-bson.spec.ts +++ b/packages/service-provider-core/src/printable-bson.spec.ts @@ -55,6 +55,10 @@ describe('BSON printers', function() { expect(inspect(new bson.Binary('abc'))).to.equal('Binary(Buffer.from("616263", "hex"), 0)'); }); + it('formats BSONRegExp correctly', function() { + expect(inspect(new bson.BSONRegExp('(?-i)AA_', 'im'))).to.equal('BSONRegExp("(?-i)AA_", "im")'); + }); + it('formats UUIDs correctly', function() { expect(inspect(new bson.Binary(Buffer.from('0123456789abcdef0123456789abcdef', 'hex'), 4))) .to.equal('UUID("01234567-89ab-cdef-0123-456789abcdef")'); diff --git a/packages/service-provider-core/src/printable-bson.ts b/packages/service-provider-core/src/printable-bson.ts index 1817af608d..fbb9f1a19a 100644 --- a/packages/service-provider-core/src/printable-bson.ts +++ b/packages/service-provider-core/src/printable-bson.ts @@ -48,6 +48,10 @@ export const bsonStringifiers: Record string> = { return `Long("${this.toString()}"${this.unsigned ? ', true' : ''})`; }, + BSONRegExp: function(): string { + return `BSONRegExp(${JSON.stringify(this.pattern)}, ${JSON.stringify(this.options)})`; + }, + Binary: function(): string { const asBuffer = this.value(true); switch (this.sub_type) { diff --git a/packages/service-provider-server/src/cli-service-provider.ts b/packages/service-provider-server/src/cli-service-provider.ts index 090d0a3207..c64e1bdb4c 100644 --- a/packages/service-provider-server/src/cli-service-provider.ts +++ b/packages/service-provider-server/src/cli-service-provider.ts @@ -3,6 +3,7 @@ import { AuthMechanism, MongoClient, ReadPreference, + BSONRegExp, Binary, Code, DBRef, @@ -101,7 +102,8 @@ const bsonlib = { BSONSymbol, Map: BSON.Map, calculateObjectSize: BSON.calculateObjectSize, - EJSON: BSON.EJSON + EJSON: BSON.EJSON, + BSONRegExp }; type DropDatabaseResult = { diff --git a/packages/shell-api/src/shell-bson.ts b/packages/shell-api/src/shell-bson.ts index c3c3336da8..c8ffa79b02 100644 --- a/packages/shell-api/src/shell-bson.ts +++ b/packages/shell-api/src/shell-bson.ts @@ -23,7 +23,8 @@ function constructHelp(className: string): Help { export default function constructShellBson(bson: typeof BSON, printWarning: (msg: string) => void): any { const bsonNames = [ 'Binary', 'Code', 'DBRef', 'Decimal128', 'Double', 'Int32', 'Long', - 'MaxKey', 'MinKey', 'ObjectId', 'Timestamp', 'Map', 'BSONSymbol' + 'MaxKey', 'MinKey', 'ObjectId', 'Timestamp', 'Map', 'BSONSymbol', + 'BSONRegExp' ] as const; // Statically set this so we can error if any are missing // If the service provider doesn't provide a BSON version, use service-provider-core's BSON package (js-bson 4.x) @@ -153,7 +154,8 @@ export default function constructShellBson(bson: typeof BSON, printWarning: (msg Long: bson.Long, Binary: bson.Binary, Double: bson.Double, - EJSON: bson.EJSON + EJSON: bson.EJSON, + BSONRegExp: bson.BSONRegExp } as any; Object.keys(bsonPkg).forEach((className) => {