forked from pryv/open-pryv.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconverters.js
More file actions
127 lines (115 loc) · 3.9 KB
/
converters.js
File metadata and controls
127 lines (115 loc) · 3.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/**
* @license
* Copyright (C) 2020–2025 Pryv S.A. https://pryv.com
*
* This file is part of Open-Pryv.io and released under BSD-Clause-3 License
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/**
* Common converter helper functions for storage modules.
*/
const generateId = require('cuid');
exports.createIdIfMissing = function (item) {
item.id = item.id || generateId();
return item;
};
exports.getRenamePropertyFn = function (oldName, newName) {
return function (item) {
if (!item || item[oldName] == null) {
return item;
}
item[newName] = item[oldName];
delete item[oldName];
return item;
};
};
/**
* Converts the item's state to DB storage.
* In our exposed API, items supporting state can carry a 'trashed' boolean field (true or false;
* considered false if missing);
* in the database, though, for optimization we only retain the 'trashed' field when it is true.
*/
exports.stateToDB = function (item) {
if (item.trashed !== true) {
delete item.trashed;
}
return item;
};
exports.stateUpdate = function (update) {
if (update.$set.trashed != null && !update.$set.trashed) {
update.$unset.trashed = 1;
delete update.$set.trashed;
}
return update;
};
exports.getKeyValueSetUpdateFn = function (propertyName) {
propertyName = propertyName || 'clientData';
return function (update) {
const keyValueSet = update.$set[propertyName];
if (keyValueSet) {
Object.keys(keyValueSet).forEach(function (key) {
if (keyValueSet[key] !== null) {
update.$set[propertyName + '.' + key] = keyValueSet[key];
} else {
update.$unset[propertyName + '.' + key] = 1;
}
});
delete update.$set[propertyName];
}
return update;
};
};
exports.deletionToDB = function (item) {
if (item.deleted === undefined) { // undefined => null
item.deleted = null;
}
return item;
};
exports.deletionFromDB = function (dbItem) {
if (dbItem == null) { return dbItem; }
if (dbItem.deleted == null) { // undefined or null
delete dbItem.deleted;
}
return dbItem;
};
/**
* Inside $or clauses, converts "id" to "_id"
* @param {*} query
*/
exports.idInOrClause = function (query) {
if (query == null || query.$or == null) return query;
const convertedOrClause = query.$or.map(field => {
if (field.id != null) {
return { _id: field.id };
}
return field;
});
query.$or = convertedOrClause;
return query;
};