UNPKG

2.68 kBJavaScriptView Raw
1/**
2 * @copyright Copyright (c) 2019 Maxim Khorin <maksimovichu@gmail.com>
3 */
4'use strict';
5
6module.exports = class MongoHelper {
7
8 static isObjectId (id) {
9 return id instanceof ObjectID;
10 }
11
12 static isValidId (id) {
13 return ObjectID.isValid(id);
14 }
15
16 static isValidIds (ids) {
17 if (!Array.isArray(ids)) {
18 return false;
19 }
20 for (const id of ids) {
21 if (!ObjectID.isValid(id)) {
22 return false;
23 }
24 }
25 return true;
26 }
27
28 static createObjectId (value) {
29 return value ? ObjectID(value) : new ObjectID;
30 }
31
32 static indexOf (id, values) {
33 if (!Array.isArray(values)) {
34 return -1;
35 }
36 if (!(id instanceof ObjectID)) {
37 return values.indexOf(id);
38 }
39 for (let i = 0; i < values.length; ++i) {
40 if (id.equals(values[i])) {
41 return i;
42 }
43 }
44 return -1;
45 }
46
47 static diff (targets, sources) {
48 return ArrayHelper.diff(targets, sources, this.indexOf);
49 }
50
51 static exclude (targets, sources) {
52 return ArrayHelper.exclude(targets, sources, this.indexOf);
53 }
54
55 static intersect (sources, targets) {
56 return ArrayHelper.intersect(sources, targets, this.indexOf);
57 }
58
59 static uniqueStrict (values) {
60 return ArrayHelper.uniqueStrict(values, this.indexOf);
61 }
62
63 static normalizeExportData (data) {
64 data = data || {};
65 for (const key of Object.keys(data)) {
66 const value = data[key];
67 if (value instanceof ObjectID) {
68 data[key] = {$oid: value.toString()};
69 } else if (value instanceof Date) {
70 data[key] = {$date: value.toISOString()};
71 } else if (value instanceof Object) {
72 this.normalizeExportData(value);
73 }
74 }
75 }
76
77 static normalizeImportData (data) {
78 data = data || {};
79 for (const key of Object.keys(data)) {
80 const value = data[key];
81 if (!value || !(value instanceof Object)) {
82 } else if (DateHelper.isValid(value.$date)) {
83 data[key] = new Date(value.$date);
84 } else if (ObjectID.isValid(value.$oid)) {
85 data[key] = ObjectID(value.$oid);
86 } else {
87 this.normalizeImportData(value);
88 }
89 }
90 }
91};
92
93const ObjectID = require('mongodb').ObjectID;
94const ArrayHelper = require('./ArrayHelper');
95const DateHelper = require('./DateHelper');
\No newline at end of file