1 |
|
2 |
|
3 |
|
4 | 'use strict';
|
5 |
|
6 | module.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 |
|
93 | const ObjectID = require('mongodb').ObjectID;
|
94 | const ArrayHelper = require('./ArrayHelper');
|
95 | const DateHelper = require('./DateHelper'); |
\ | No newline at end of file |