@restorecommerce/chassis-srv 1.7.1 → 1.7.2

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.
Files changed (33) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/docs/modules/ROOT/pages/index.adoc +0 -1
  3. package/lib/cache/index.js +2 -2
  4. package/lib/cache/index.js.map +1 -1
  5. package/lib/command-interface/index.js +39 -39
  6. package/lib/command-interface/index.js.map +1 -1
  7. package/lib/database/index.d.ts.map +1 -1
  8. package/lib/database/index.js +0 -2
  9. package/lib/database/index.js.map +1 -1
  10. package/lib/database/provider/arango/base.js +49 -49
  11. package/lib/database/provider/arango/base.js.map +1 -1
  12. package/lib/database/provider/arango/common.d.ts.map +1 -1
  13. package/lib/database/provider/arango/common.js +40 -41
  14. package/lib/database/provider/arango/common.js.map +1 -1
  15. package/lib/database/provider/arango/graph.js +41 -41
  16. package/lib/database/provider/arango/graph.js.map +1 -1
  17. package/lib/database/provider/arango/utils.d.ts.map +1 -1
  18. package/lib/database/provider/arango/utils.js +46 -46
  19. package/lib/database/provider/arango/utils.js.map +1 -1
  20. package/lib/index.d.ts +0 -2
  21. package/lib/index.d.ts.map +1 -1
  22. package/lib/index.js +0 -2
  23. package/lib/index.js.map +1 -1
  24. package/lib/microservice/server.js +11 -11
  25. package/lib/microservice/server.js.map +1 -1
  26. package/lib/microservice/transport/provider/grpc/index.js +8 -8
  27. package/lib/microservice/transport/provider/grpc/index.js.map +1 -1
  28. package/lib/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +10 -13
  30. package/lib/database/provider/nedb/index.d.ts +0 -9
  31. package/lib/database/provider/nedb/index.d.ts.map +0 -1
  32. package/lib/database/provider/nedb/index.js +0 -381
  33. package/lib/database/provider/nedb/index.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@restorecommerce/chassis-srv",
3
- "version": "1.7.1",
3
+ "version": "1.7.2",
4
4
  "description": "Restore Commerce microservice chassis",
5
5
  "main": "./lib/index.js",
6
6
  "author": "n-fuse GmbH",
@@ -18,11 +18,11 @@
18
18
  "type": "module",
19
19
  "typings": "lib/index.d.ts",
20
20
  "dependencies": {
21
- "@restorecommerce/grpc-client": "^2.2.10",
22
- "@restorecommerce/kafka-client": "^1.3.0",
23
- "@restorecommerce/logger": "^1.3.5",
24
- "@restorecommerce/rc-grpc-clients": "^5.1.59",
25
- "@restorecommerce/service-config": "^1.1.4",
21
+ "@restorecommerce/grpc-client": "^2.2.11",
22
+ "@restorecommerce/kafka-client": "^1.3.1",
23
+ "@restorecommerce/logger": "^1.3.6",
24
+ "@restorecommerce/rc-grpc-clients": "^5.1.60",
25
+ "@restorecommerce/service-config": "^1.1.5",
26
26
  "abort-controller-x": "^0.4.3",
27
27
  "arangojs": "^9.1.0",
28
28
  "async": "^3.2.6",
@@ -33,22 +33,19 @@
33
33
  "google-protobuf": "^3.21.4",
34
34
  "kafkajs": "^2.2.4",
35
35
  "keyv": "^5.2.1",
36
- "lodash": "^4.17.21",
37
36
  "long": "^5.2.3",
38
37
  "lru-cache": "^11.0.2",
39
- "nedb": "^1.8.0",
40
38
  "nice-grpc": "^2.1.10",
41
39
  "nice-grpc-server-reflection": "^2.0.12",
42
40
  "protobufjs": "^7.4.0",
43
- "redis": "^4.7.0"
41
+ "redis": "^4.7.0",
42
+ "remeda": "^2.31.1"
44
43
  },
45
44
  "devDependencies": {
46
- "@restorecommerce/dev": "^0.1.0",
45
+ "@restorecommerce/dev": "^0.1.1",
47
46
  "@types/async": "^3.2.6",
48
47
  "@types/async-retry": "^1.4.9",
49
48
  "@types/cache-manager": "^4.0.6",
50
- "@types/lodash": "^4.17.13",
51
- "@types/nedb": "^1.8.16",
52
49
  "@types/node": "^22.9.1",
53
50
  "@typescript-eslint/parser": "^8.15.0",
54
51
  "@vitest/coverage-v8": "^3.2.4",
@@ -76,5 +73,5 @@
76
73
  "engines": {
77
74
  "node": ">= 20.0.0"
78
75
  },
79
- "gitHead": "bf9fffda57ea92b2ee4bec2888f2deb1a7b96ee5"
76
+ "gitHead": "3154bc55aeef8c8521c4042c78220dc12b25aecd"
80
77
  }
@@ -1,9 +0,0 @@
1
- /**
2
- * Create a new NeDB provider.
3
- *
4
- * @param {Object} conf NeDB configuration
5
- * @param {Object} [logger] Logger
6
- * @return {NedbProvider} NeDB provider
7
- */
8
- export declare const create: (conf: object, logger: any) => Promise<any>;
9
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/provider/nedb/index.ts"],"names":[],"mappings":"AAgXA;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,SAAgB,MAAM,UAAU,GAAG,KAAG,OAAO,CAAC,GAAG,CASnE,CAAC"}
@@ -1,381 +0,0 @@
1
- import Datastore from 'nedb';
2
- import * as _ from 'lodash';
3
- /**
4
- * Converts unsupported functions to regexp.
5
- * @param {object} filter query filter
6
- * @return {object} the filter querys which are not supported by nedb converted to regexp.
7
- */
8
- const convertToRegexp = (filter) => {
9
- const f = filter;
10
- _.forEach(f, (value, key) => {
11
- if (value.$startswith) {
12
- f[key] = {
13
- $regex: new RegExp(`^${value.$startswith}.*$`, 'i'),
14
- };
15
- }
16
- else if (value.$endswith) {
17
- f[key] = {
18
- $regex: new RegExp(`^.*${value.$endswith}$`, 'i'),
19
- };
20
- }
21
- else if (_.has(value, '$isEmpty')) {
22
- f[key] = {
23
- $regex: new RegExp(`^$`),
24
- };
25
- }
26
- else if (_.has(value, '$iLike')) {
27
- // neDB does not have ILIKE (LIKE with ignore case sensitive)
28
- // e.g.: convert %sOrT% => to /sort/ and find all fields
29
- // whose name contain the substring 'sort' using the regular expression
30
- const iLikeVal = f[key].$iLike.slice(1, -1).toLowerCase();
31
- // convert sort => to regexp /sort/
32
- f[key] = new RegExp(iLikeVal);
33
- }
34
- else if (_.isObject(value)) {
35
- f[key] = convertToRegexp(value);
36
- }
37
- });
38
- return f;
39
- };
40
- /**
41
- * Construct or operator.
42
- * @param {Object} options the or statement
43
- * example: { $or: [{ planet: 'Earth' }, { planet: 'Mars' }] }
44
- * @param {string} name the field name the comparison is based on.
45
- * @return {Object} NeDB or operator query filter.
46
- */
47
- const buildOrQuery = (options, name) => {
48
- let opts = options;
49
- if (!_.isArray(options)) {
50
- opts = [options];
51
- }
52
- const obj = { $or: [] };
53
- opts.forEach((item) => {
54
- const toInsert = {};
55
- toInsert[name] = item;
56
- obj.$or.push(toInsert);
57
- });
58
- return obj;
59
- };
60
- /**
61
- * NeDB database provider.
62
- */
63
- class NedbProvider {
64
- collections;
65
- /**
66
- * @param {Object} collections a map, collection name mapped to store
67
- */
68
- constructor(collections) {
69
- this.collections = collections;
70
- }
71
- /**
72
- * Insert documents into database.
73
- *
74
- * @param {String} collection Collection name
75
- * @param {Object|array.Object} documents A single or multiple documents.
76
- */
77
- async insert(collection, documents) {
78
- const collections = this.collections;
79
- if (!_.isArray(documents)) {
80
- documents = [documents];
81
- }
82
- const docs = _.cloneDeep(documents);
83
- for (const doc of docs) {
84
- _.set(doc, '_id', doc.id);
85
- }
86
- return new Promise((resolve, reject) => {
87
- collections[collection].insert(docs, (err, newdocs) => {
88
- // docs
89
- if (err) {
90
- resolve([{
91
- error: true,
92
- errorMessage: err.message
93
- }]);
94
- }
95
- else {
96
- for (const newdoc of newdocs) {
97
- _.unset(newdoc, '_id');
98
- }
99
- resolve(newdocs);
100
- }
101
- });
102
- });
103
- }
104
- /**
105
- * Find documents based on filter.
106
- *
107
- * @param {String} collection Collection name
108
- * @param {Object} filter Key, value Object
109
- * @param {Object} options options.limit, options.offset
110
- * @return {array.Object} A list of found documents.
111
- */
112
- async find(collection, filter = {}, options = {}) {
113
- const fil = convertToRegexp(filter || {});
114
- let q = this.collections[collection].find(fil, options.fields);
115
- if (options.offset) {
116
- q = q.skip(options.offset);
117
- }
118
- if (options.limit) {
119
- q = q.limit(options.limit);
120
- }
121
- if (options.sort) {
122
- q = q.sort(options.sort);
123
- }
124
- const result = new Promise((resolve, reject) => {
125
- q.exec((err, docs) => {
126
- // docs
127
- if (err) {
128
- reject(err);
129
- }
130
- else {
131
- _.map(docs, (doc) => {
132
- if (_.isNil(doc.id)) {
133
- _.set(doc, '_id', doc._id);
134
- }
135
- _.unset(doc, '_id');
136
- });
137
- resolve(docs);
138
- }
139
- });
140
- });
141
- return result;
142
- }
143
- /**
144
- * Find documents by id (_key).
145
- *
146
- * @param {String} collection Collection name
147
- * @param {String|array.String} identifications A single ID or multiple IDs.
148
- * @return {array.Object} A list of found documents.
149
- */
150
- async findByID(collection, identifications) {
151
- let ids = identifications;
152
- if (!_.isArray(identifications)) {
153
- ids = [identifications];
154
- }
155
- const q = buildOrQuery(ids, 'id');
156
- const collections = this.collections;
157
- const result = new Promise((resolve, reject) => {
158
- collections[collection].find(q).exec((err, docs) => {
159
- if (docs) {
160
- const l = docs.length;
161
- for (let i = 0; i < l; i += 1) {
162
- _.unset(docs[i], '_id');
163
- }
164
- resolve(docs);
165
- }
166
- else if (err) {
167
- reject(err);
168
- }
169
- });
170
- });
171
- return result;
172
- }
173
- /**
174
- * Find documents by filter and updates them with document.
175
- *
176
- * @param {String} collection Collection name
177
- * @param {Object} filter Key, value Object
178
- * @param {Object} document A document patch.
179
- */
180
- async update(collection, document) {
181
- const collections = this.collections;
182
- if (_.isArray(document)) {
183
- document = document[0];
184
- }
185
- const obj = {
186
- $set: {},
187
- };
188
- Object.keys(document).forEach((key) => {
189
- obj.$set[key] = document[key];
190
- });
191
- const filter = { id: document.id }; // construct filter using document ids
192
- const fil = convertToRegexp(filter || {});
193
- const updatedDocs = new Promise((resolve, reject) => {
194
- collections[collection].update(fil, obj, { multi: true, returnUpdatedDocs: true }, (err, numReplaced, updatedDocs) => {
195
- if (err) {
196
- resolve(err);
197
- }
198
- else {
199
- resolve(updatedDocs);
200
- }
201
- });
202
- });
203
- if (_.isEmpty(updatedDocs)) {
204
- // document not found for update
205
- return [{
206
- error: true,
207
- errorMessage: 'document not found'
208
- }];
209
- }
210
- return _.map(updatedDocs, (doc) => {
211
- _.unset(doc, '_id');
212
- return doc;
213
- });
214
- }
215
- /**
216
- * Find each document based on it's key and update it.
217
- * If the document does not exist it will be created.
218
- *
219
- * @param {String} collection Collection name
220
- * @param {Object|Array.Object} documents
221
- */
222
- async upsert(collection, documents) {
223
- const collections = this.collections;
224
- let docs = _.cloneDeep(documents);
225
- if (!_.isArray(docs)) {
226
- docs = [docs];
227
- }
228
- const results = [];
229
- for (const doc of docs) {
230
- _.set(doc, '_id', doc.id);
231
- const result = new Promise((resolve, reject) => {
232
- collections[collection].update({ _id: doc._id }, doc, { upsert: true, returnUpdatedDocs: true }, (err, numReplaced, upserted) => {
233
- if (err) {
234
- reject(err);
235
- }
236
- resolve(upserted);
237
- });
238
- });
239
- results.push(await result);
240
- }
241
- return _.map(results, (doc) => {
242
- _.unset(doc, '_id');
243
- return doc;
244
- });
245
- }
246
- /**
247
- * Delete all documents selected by filter.
248
- *
249
- * @param {String} collection Collection name
250
- * @param {Object} filter
251
- */
252
- async delete(collection, ids) {
253
- const collections = this.collections;
254
- let fil = {};
255
- const deleteResponse = [];
256
- for (const id of ids) {
257
- collections[collection].find({ id }, (err, docs) => {
258
- if (_.isEmpty(docs)) {
259
- deleteResponse.push({
260
- error: true,
261
- errorMessage: 'Document not found'
262
- });
263
- }
264
- else {
265
- deleteResponse.push(docs[0]);
266
- }
267
- });
268
- }
269
- if (_.isEmpty(ids)) {
270
- fil = {}; // if no ids are provided delete all documents and filter for this is {}
271
- }
272
- else {
273
- fil = { id: { $in: ids } };
274
- }
275
- const numRemoved = await new Promise((resolve, reject) => {
276
- collections[collection].remove(fil, { multi: true }, (err, numRemoved) => {
277
- if (err) {
278
- throw new Error(err);
279
- }
280
- else {
281
- resolve(numRemoved);
282
- }
283
- });
284
- });
285
- return deleteResponse;
286
- }
287
- /**
288
- * Count all documents selected by filter.
289
- *
290
- * @param {String} collection Collection name
291
- * @param {Object} filter
292
- */
293
- async count(collection, filter = {}) {
294
- const collections = this.collections;
295
- const fil = convertToRegexp(filter || {});
296
- const result = new Promise((resolve, reject) => {
297
- collections[collection].count(fil, (err, count) => {
298
- if (err)
299
- reject(err);
300
- resolve(count);
301
- });
302
- });
303
- return result;
304
- }
305
- /**
306
- * When calling without a collection name,
307
- * delete all documents in all collections in the database.
308
- * When providing a collection name,
309
- * delete all documents in specified collection in the database.
310
- * @param [string] collection Collection name.
311
- */
312
- async truncate(collection) {
313
- if (_.isNil(collection)) {
314
- const collections = _.keys(this.collections);
315
- for (let i = 0; i < collections.length; i += 1) {
316
- await this.delete(collections[i], []);
317
- }
318
- }
319
- else {
320
- await this.delete(collection, []);
321
- }
322
- }
323
- }
324
- /**
325
- * Open all configured NeDB datastores.
326
- * @param {Object} config
327
- * example:
328
- * {
329
- * "provider": "nedb",
330
- * "collections": {
331
- * "notifications": {}
332
- * }
333
- * }
334
- * @param {Logger} logger
335
- * @return {Object} key, value map containing collection names
336
- * as keys and the corresponding NeDB datastores as values.
337
- */
338
- const loadDatastores = async (config, logger) => {
339
- if (_.isNil(config.collections)) {
340
- throw new Error('missing collection config value');
341
- }
342
- const collections = {};
343
- const colNames = _.keys(config.collections);
344
- for (let i = 0; i < colNames.length; i += 1) {
345
- const name = colNames[i];
346
- const conf = config.collections[name];
347
- if (conf.filename) {
348
- logger.verbose(`collection ${name} has filename ${conf.filename}`);
349
- conf.autoload = true;
350
- const load = () => {
351
- return (cb) => {
352
- conf.onload = cb;
353
- collections[name] = new Datastore(conf);
354
- };
355
- };
356
- await load();
357
- }
358
- else {
359
- collections[name] = new Datastore(conf);
360
- }
361
- }
362
- return collections;
363
- };
364
- /**
365
- * Create a new NeDB provider.
366
- *
367
- * @param {Object} conf NeDB configuration
368
- * @param {Object} [logger] Logger
369
- * @return {NedbProvider} NeDB provider
370
- */
371
- export const create = async (conf, logger) => {
372
- let log = logger;
373
- if (_.isNil(logger)) {
374
- log = {
375
- verbose: () => { },
376
- };
377
- }
378
- const collections = await loadDatastores(conf, log);
379
- return new NedbProvider(collections);
380
- };
381
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/database/provider/nedb/index.ts"],"names":[],"mappings":"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"}