@flowerforce/flowerbase-client 0.3.3-beta.4 → 0.3.3-beta.6

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 CHANGED
@@ -121,12 +121,24 @@ Metodi disponibili su `collection`:
121
121
 
122
122
  - `find(query?, options?)`
123
123
  - `findOne(query?, options?)`
124
+ - `findOneAndUpdate(filter, update, options?)`
125
+ - `findOneAndReplace(filter, replacement, options?)`
126
+ - `findOneAndDelete(filter, options?)`
127
+ - `aggregate(pipeline)`
128
+ - `count(query?, options?)`
129
+ - `countDocuments(query?, options?)`
130
+ - `distinct(key, filter?, options?)`
124
131
  - `insertOne(document, options?)`
132
+ - `insertMany(documents, options?)`
133
+ - `bulkWrite(operations, options?)` solo dentro funzioni server privilegiate eseguite con `run_as_system: true`
125
134
  - `updateOne(filter, update, options?)`
126
135
  - `updateMany(filter, update, options?)`
127
136
  - `deleteOne(filter, options?)`
137
+ - `deleteMany(filter, options?)`
128
138
  - `watch(options?)`
129
139
 
140
+ `bulkWrite()` e' esposto per compatibilita' con la surface MongoDB/Realm, ma una chiamata normale dal client viene rifiutata. Funziona solo quando il backend esegue la funzione in modalita' `run_as_system`.
141
+
130
142
  ## Watch / Change streams
131
143
 
132
144
  `watch()` restituisce un async iterator con reconnect automatico e metodo `close()`.
@@ -1 +1 @@
1
- {"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../src/mongo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAkB,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAoB7E,eAAO,MAAM,iBAAiB,QAAS,GAAG,eAAe,kBAAkB,UAAU,MAAM,KAAG,eAyF5F,CAAA"}
1
+ {"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../src/mongo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAkB,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAoB7E,eAAO,MAAM,iBAAiB,QAAS,GAAG,eAAe,kBAAkB,UAAU,MAAM,KAAG,eA6F5F,CAAA"}
package/dist/mongo.js CHANGED
@@ -74,6 +74,7 @@ const createMongoClient = (app, serviceName, userId) => ({
74
74
  return {
75
75
  find: (query = {}, options = {}) => callService('find', [{ query, options }]),
76
76
  findOne: (query = {}, options = {}) => callService('findOne', [{ query, options }]),
77
+ distinct: (key, filter = {}, options = {}) => callService('distinct', [{ key, query: filter, options }]),
77
78
  findOneAndUpdate: (filter, update, options = {}) => callService('findOneAndUpdate', [{ filter, update, options }]),
78
79
  findOneAndReplace: (filter, replacement, options = {}) => callService('findOneAndReplace', [{ filter, replacement, options }]),
79
80
  findOneAndDelete: (filter, options = {}) => callService('findOneAndDelete', [{ filter, options }]),
@@ -81,6 +82,7 @@ const createMongoClient = (app, serviceName, userId) => ({
81
82
  count: (query = {}, options = {}) => callService('count', [{ query, options }]),
82
83
  insertOne: (document, options = {}) => callService('insertOne', [{ document, options }]),
83
84
  insertMany: (documents, options = {}) => callService('insertMany', [{ documents, options }]),
85
+ bulkWrite: (operations, options = {}) => callService('bulkWrite', [{ operations, options }]),
84
86
  updateOne: (filter, update, options = {}) => callService('updateOne', [{ filter, update, options }]),
85
87
  updateMany: (filter, update, options = {}) => callService('updateMany', [{ filter, update, options }]),
86
88
  deleteOne: (filter, options = {}) => callService('deleteOne', [{ query: filter, options }]),
package/dist/types.d.ts CHANGED
@@ -33,6 +33,7 @@ export type MongoDbServiceName = 'mongodb-atlas';
33
33
  export type MongoDbServiceArgument = {
34
34
  database: string;
35
35
  collection: string;
36
+ key?: string;
36
37
  query?: MongoDbDocument;
37
38
  filter?: MongoDbDocument;
38
39
  update?: MongoDbDocument | MongoDbDocument[];
@@ -41,6 +42,7 @@ export type MongoDbServiceArgument = {
41
42
  returnNewDocument?: boolean;
42
43
  document?: MongoDbDocument;
43
44
  documents?: MongoDbDocument[];
45
+ operations?: MongoDbDocument[];
44
46
  pipeline?: MongoDbDocument[];
45
47
  replacement?: MongoDbDocument;
46
48
  };
@@ -70,6 +72,7 @@ export type WatchAsyncIterator<TChange = unknown> = AsyncIterableIterator<TChang
70
72
  export interface CollectionLike {
71
73
  find: (query?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
72
74
  findOne: (query?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
75
+ distinct: (key: string, filter?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown[]>;
73
76
  findOneAndUpdate: (filter: Record<string, unknown>, update: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
74
77
  findOneAndReplace: (filter: Record<string, unknown>, replacement: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
75
78
  findOneAndDelete: (filter: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
@@ -77,6 +80,7 @@ export interface CollectionLike {
77
80
  count: (filter?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
78
81
  insertOne: (document: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
79
82
  insertMany: (documents: Record<string, unknown>[], options?: Record<string, unknown>) => Promise<unknown>;
83
+ bulkWrite: (operations: Record<string, unknown>[], options?: Record<string, unknown>) => Promise<unknown>;
80
84
  updateOne: (filter: Record<string, unknown>, update: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
81
85
  updateMany: (filter: Record<string, unknown>, update: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
82
86
  deleteOne: (filter: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,QAAQ,EAAE,WAAW,CAAA;CAAE,GACzB;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACjE;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/C,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,OAAO,EAAE,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACrD,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAA;AAEhD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,MAAM,CAAC,EAAE,eAAe,GAAG,eAAe,EAAE,CAAA;IAC5C,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,SAAS,CAAC,EAAE,eAAe,EAAE,CAAA;IAC7B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IAC5B,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAE9D,MAAM,MAAM,mBAAmB,GAC3B;IACA,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB,GACC;IACA,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,uBAAuB,CAAA;IAClC,OAAO,EAAE,kBAAkB,CAAA;CAC5B,CAAA;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,OAAO,GAAG,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,GAAG;IACnF,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9F,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACjG,gBAAgB,EAAE,CAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,iBAAiB,EAAE,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1G,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACpE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAChG,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACrG,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACzG,SAAS,EAAE,CACT,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,UAAU,EAAE,CACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACnG,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACpG,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,kBAAkB,CAAC,OAAO,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,cAAc,CAAA;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,CAAA;CAClC;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAA;IAC1C,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,OAAO,EAAE,CAAA;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG;QACpE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QACpE,qBAAqB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAA;KAChG,CAAA;IACD,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACpE,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IACzC,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACzD,WAAW,EAAE,CAAC,WAAW,EAAE,kBAAkB,KAAK,eAAe,CAAA;IACjE,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAC3C,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAC9C,kBAAkB,EAAE,MAAM,IAAI,CAAA;CAC/B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,QAAQ,EAAE,WAAW,CAAA;CAAE,GACzB;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACjE;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/C,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,OAAO,EAAE,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACrD,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAA;AAEhD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,MAAM,CAAC,EAAE,eAAe,GAAG,eAAe,EAAE,CAAA;IAC5C,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,SAAS,CAAC,EAAE,eAAe,EAAE,CAAA;IAC7B,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IAC5B,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAE9D,MAAM,MAAM,mBAAmB,GAC3B;IACA,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB,GACC;IACA,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,uBAAuB,CAAA;IAClC,OAAO,EAAE,kBAAkB,CAAA;CAC5B,CAAA;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,OAAO,GAAG,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,GAAG;IACnF,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9F,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACjG,QAAQ,EAAE,CACR,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACvB,gBAAgB,EAAE,CAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,iBAAiB,EAAE,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1G,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACpE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAChG,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACrG,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACzG,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACzG,SAAS,EAAE,CACT,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,UAAU,EAAE,CACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACnG,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACpG,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,kBAAkB,CAAC,OAAO,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,cAAc,CAAA;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,CAAA;CAClC;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAA;IAC1C,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,OAAO,EAAE,CAAA;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG;QACpE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QACpE,qBAAqB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAA;KAChG,CAAA;IACD,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACpE,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IACzC,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACzD,WAAW,EAAE,CAAC,WAAW,EAAE,kBAAkB,KAAK,eAAe,CAAA;IACjE,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAC3C,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAC9C,kBAAkB,EAAE,MAAM,IAAI,CAAA;CAC/B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowerforce/flowerbase-client",
3
- "version": "0.3.3-beta.4",
3
+ "version": "0.3.3-beta.6",
4
4
  "description": "Client for Flowerbase",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,4 +1,4 @@
1
- import { ObjectId } from 'bson'
1
+ import { EJSON, ObjectId } from 'bson'
2
2
  import { App } from '../app'
3
3
  import { Credentials } from '../credentials'
4
4
 
@@ -66,18 +66,46 @@ describe('flowerbase-client mongo service wrapper', () => {
66
66
  await app.logIn(Credentials.emailPassword('john@doe.com', 'secret123'))
67
67
 
68
68
  const collection = app.currentUser!.mongoClient('mongodb-atlas').db('testdb').collection('todos')
69
+ const bulkOperations = [
70
+ {
71
+ updateOne: {
72
+ filter: { done: false },
73
+ update: { $set: { done: true } }
74
+ }
75
+ }
76
+ ]
69
77
 
70
78
  await collection.findOneAndUpdate({ done: false }, { $set: { done: true } })
71
79
  await collection.findOneAndReplace({ done: true }, { done: true, title: 'done' })
72
80
  await collection.findOneAndDelete({ done: true })
73
81
  await collection.aggregate([{ $match: { done: true } }])
74
82
  await collection.count({ done: true })
83
+ await collection.distinct('status', { done: true }, { maxTimeMS: 1000 })
75
84
  await collection.insertMany([{ title: 'A' }, { title: 'B' }])
76
85
  await collection.deleteMany({ done: true })
86
+ await collection.bulkWrite(bulkOperations, { ordered: false })
77
87
 
78
88
  const calls = (global.fetch as jest.Mock).mock.calls
79
- const lastBody = JSON.parse(calls[calls.length - 1][1].body)
80
- expect(lastBody.service).toBe('mongodb-atlas')
81
- expect(lastBody.name).toBe('deleteMany')
89
+ const parsedBodies = calls
90
+ .map(([, request]) => request?.body)
91
+ .filter((body): body is string => typeof body === 'string')
92
+ .map((body) => EJSON.deserialize(JSON.parse(body)))
93
+ const distinctBody = parsedBodies.find((body) => body.name === 'distinct')
94
+ const bulkWriteBody = parsedBodies.find((body) => body.name === 'bulkWrite')
95
+
96
+ expect(distinctBody.service).toBe('mongodb-atlas')
97
+ expect(distinctBody.name).toBe('distinct')
98
+ expect(distinctBody.arguments[0]).toMatchObject({
99
+ key: 'status',
100
+ query: { done: true },
101
+ options: { maxTimeMS: 1000 }
102
+ })
103
+
104
+ expect(bulkWriteBody.service).toBe('mongodb-atlas')
105
+ expect(bulkWriteBody.name).toBe('bulkWrite')
106
+ expect(bulkWriteBody.arguments[0]).toMatchObject({
107
+ operations: bulkOperations,
108
+ options: { ordered: false }
109
+ })
82
110
  })
83
111
  })
package/src/mongo.ts CHANGED
@@ -46,7 +46,7 @@ export const createMongoClient = (app: App, serviceName: MongoDbServiceName, use
46
46
  throw new Error('watch options must be an object')
47
47
  }
48
48
 
49
- const typed = input as { ids?: unknown[]; filter?: Record<string, unknown>; [key: string]: unknown }
49
+ const typed = input as { ids?: unknown[]; filter?: Record<string, unknown>;[key: string]: unknown }
50
50
  const keys = Object.keys(typed)
51
51
  const hasOnlyAllowedKeys = keys.every((key) => key === 'ids' || key === 'filter')
52
52
  if (!hasOnlyAllowedKeys) {
@@ -77,6 +77,8 @@ export const createMongoClient = (app: App, serviceName: MongoDbServiceName, use
77
77
  return {
78
78
  find: (query = {}, options = {}) => callService('find', [{ query, options }]),
79
79
  findOne: (query = {}, options = {}) => callService('findOne', [{ query, options }]),
80
+ distinct: (key, filter = {}, options = {}) =>
81
+ callService('distinct', [{ key, query: filter, options }]),
80
82
  findOneAndUpdate: (filter, update, options = {}) =>
81
83
  callService('findOneAndUpdate', [{ filter, update, options }]),
82
84
  findOneAndReplace: (filter, replacement, options = {}) =>
@@ -86,6 +88,8 @@ export const createMongoClient = (app: App, serviceName: MongoDbServiceName, use
86
88
  count: (query = {}, options = {}) => callService('count', [{ query, options }]),
87
89
  insertOne: (document, options = {}) => callService('insertOne', [{ document, options }]),
88
90
  insertMany: (documents, options = {}) => callService('insertMany', [{ documents, options }]),
91
+ bulkWrite: (operations, options = {}) =>
92
+ callService('bulkWrite', [{ operations, options }]),
89
93
  updateOne: (filter, update, options = {}) =>
90
94
  callService('updateOne', [{ filter, update, options }]),
91
95
  updateMany: (filter, update, options = {}) =>
package/src/types.ts CHANGED
@@ -30,6 +30,7 @@ export type MongoDbServiceName = 'mongodb-atlas'
30
30
  export type MongoDbServiceArgument = {
31
31
  database: string
32
32
  collection: string
33
+ key?: string
33
34
  query?: MongoDbDocument
34
35
  filter?: MongoDbDocument
35
36
  update?: MongoDbDocument | MongoDbDocument[]
@@ -38,6 +39,7 @@ export type MongoDbServiceArgument = {
38
39
  returnNewDocument?: boolean
39
40
  document?: MongoDbDocument
40
41
  documents?: MongoDbDocument[]
42
+ operations?: MongoDbDocument[]
41
43
  pipeline?: MongoDbDocument[]
42
44
  replacement?: MongoDbDocument
43
45
  }
@@ -74,6 +76,11 @@ export type WatchAsyncIterator<TChange = unknown> = AsyncIterableIterator<TChang
74
76
  export interface CollectionLike {
75
77
  find: (query?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>
76
78
  findOne: (query?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>
79
+ distinct: (
80
+ key: string,
81
+ filter?: Record<string, unknown>,
82
+ options?: Record<string, unknown>
83
+ ) => Promise<unknown[]>
77
84
  findOneAndUpdate: (
78
85
  filter: Record<string, unknown>,
79
86
  update: Record<string, unknown>,
@@ -89,6 +96,7 @@ export interface CollectionLike {
89
96
  count: (filter?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>
90
97
  insertOne: (document: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>
91
98
  insertMany: (documents: Record<string, unknown>[], options?: Record<string, unknown>) => Promise<unknown>
99
+ bulkWrite: (operations: Record<string, unknown>[], options?: Record<string, unknown>) => Promise<unknown>
92
100
  updateOne: (
93
101
  filter: Record<string, unknown>,
94
102
  update: Record<string, unknown>,