@cocreate/utils 1.33.2 → 1.33.4
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/CHANGELOG.md +14 -0
- package/package.json +1 -1
- package/src/index.js +132 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [1.33.4](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.33.3...v1.33.4) (2024-02-15)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* $addToSet creates array if undefined ([64d02f9](https://github.com/CoCreate-app/CoCreate-utils/commit/64d02f9d3ee01011ee3701e781850b5e21a16ba6))
|
|
7
|
+
|
|
8
|
+
## [1.33.3](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.33.2...v1.33.3) (2024-02-14)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* createUpdate added to utils to be accessible by other modues ([a54f039](https://github.com/CoCreate-app/CoCreate-utils/commit/a54f03966e80b37cebdf7ee42dbd0b2efb530572))
|
|
14
|
+
|
|
1
15
|
## [1.33.2](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.33.1...v1.33.2) (2024-02-13)
|
|
2
16
|
|
|
3
17
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -172,6 +172,136 @@
|
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
+
function createUpdate(update, data, globalOpertors) {
|
|
176
|
+
let operatorKeys = {}
|
|
177
|
+
if (globalOpertors)
|
|
178
|
+
operatorKeys = { ...globalOpertors }
|
|
179
|
+
|
|
180
|
+
Object.keys(data).forEach(key => {
|
|
181
|
+
if (key.startsWith('$')) {
|
|
182
|
+
if (!key.includes('.'))
|
|
183
|
+
for (let oldkey of Object.keys(data[key]))
|
|
184
|
+
operatorKeys[key + '.' + oldkey] = data[key][oldkey]
|
|
185
|
+
else
|
|
186
|
+
operatorKeys[key] = data[key]
|
|
187
|
+
} else if (typeof data[key] === 'string' && data[key].startsWith('$')) {
|
|
188
|
+
operatorKeys[data[key] + '.' + key] = data[key]
|
|
189
|
+
} else if (key.endsWith(']')) {
|
|
190
|
+
const regex = /^(.*(?:\[\d+\].*?)?)\[(.*?)\](?:\[\])?$/;
|
|
191
|
+
const match = key.match(regex);
|
|
192
|
+
if (match[2] === '')
|
|
193
|
+
operatorKeys['$push.' + match[1]] = data[key]
|
|
194
|
+
else {
|
|
195
|
+
let index = parseInt(match[2], 10);
|
|
196
|
+
if (index === NaN)
|
|
197
|
+
operatorKeys[match[2] + '.' + match[1]] = data[key]
|
|
198
|
+
else
|
|
199
|
+
operatorKeys[key] = data[key]
|
|
200
|
+
}
|
|
201
|
+
} else if (key.includes('.')) {
|
|
202
|
+
operatorKeys[key] = data[key]
|
|
203
|
+
} else if (data[key] === undefined) {
|
|
204
|
+
delete update[key]
|
|
205
|
+
} else
|
|
206
|
+
update[key] = data[key]
|
|
207
|
+
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
return dotNotationToObjectUpdate(operatorKeys, update)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function dotNotationToObjectUpdate(data, object = {}) {
|
|
214
|
+
try {
|
|
215
|
+
for (const key of Object.keys(data)) {
|
|
216
|
+
let newObject = object
|
|
217
|
+
let oldObject = new Object(newObject)
|
|
218
|
+
let keys = key.replace(/\[(\d+)\]/g, '.$1').split('.');
|
|
219
|
+
let value = data[key]
|
|
220
|
+
let operator
|
|
221
|
+
if (keys[0].startsWith('$'))
|
|
222
|
+
operator = keys.shift()
|
|
223
|
+
|
|
224
|
+
let length = keys.length - 1
|
|
225
|
+
for (let i = 0; i < keys.length; i++) {
|
|
226
|
+
if (/^\d+$/.test(keys[i]))
|
|
227
|
+
keys[i] = parseInt(keys[i]);
|
|
228
|
+
|
|
229
|
+
if (length == i) {
|
|
230
|
+
if (operator) {
|
|
231
|
+
let operators = ['$rename', '$inc', '$push', '$each', '$splice', '$unset', '$delete', '$slice', '$pop', '$shift', '$addToSet', '$pull']
|
|
232
|
+
if (!operators.includes(operator))
|
|
233
|
+
continue
|
|
234
|
+
if (operator === '$rename') {
|
|
235
|
+
newObject[value] = newObject[keys[i]]
|
|
236
|
+
delete newObject[keys[i]]
|
|
237
|
+
} else if (operator === '$delete' || operator === '$unset' || operator === '$slice') {
|
|
238
|
+
if (typeof keys[i] === 'number')
|
|
239
|
+
newObject.slice(keys[i], 1);
|
|
240
|
+
else
|
|
241
|
+
delete newObject[keys[i]]
|
|
242
|
+
} else if (operator === '$shift') {
|
|
243
|
+
newObject[keys[i]].shift();
|
|
244
|
+
} else if (operator === '$pop') {
|
|
245
|
+
newObject[keys[i]].pop();
|
|
246
|
+
} else if (operator === '$addToSet') {
|
|
247
|
+
if (!newObject[keys[i]])
|
|
248
|
+
newObject[keys[i]] = []
|
|
249
|
+
let exists
|
|
250
|
+
if (Array.isArray(value)) {
|
|
251
|
+
exists = newObject[keys[i]].some(item => Array.isArray(item) && isEqualArray(item, value));
|
|
252
|
+
} else if (typeof value === 'object' && value !== null) {
|
|
253
|
+
exists = newObject[keys[i]].some(item => typeof item === 'object' && isEqualObject(item, value));
|
|
254
|
+
} else {
|
|
255
|
+
exists = newObject[keys[i]].includes(value);
|
|
256
|
+
}
|
|
257
|
+
if (!exists)
|
|
258
|
+
newObject[keys[i]].push(value)
|
|
259
|
+
} else if (operator === '$pull') {
|
|
260
|
+
if (Array.isArray(value)) {
|
|
261
|
+
newObject[keys[i]] = newObject[keys[i]].filter(item => !Array.isArray(item) || !isEqualArray(item, value));
|
|
262
|
+
} else if (typeof value === 'object' && value !== null) {
|
|
263
|
+
newObject[keys[i]] = newObject[keys[i]].filter(item => typeof item !== 'object' || !isEqualObject(item, value));
|
|
264
|
+
} else {
|
|
265
|
+
newObject[keys[i]] = newObject[keys[i]].filter(item => item !== value);
|
|
266
|
+
}
|
|
267
|
+
} else if (operator === '$push' || operator === '$splice') {
|
|
268
|
+
if (typeof keys[i] === 'number' && newObject.length >= keys[i])
|
|
269
|
+
newObject.splice(keys[i], 0, value);
|
|
270
|
+
else if (newObject[keys[i]])
|
|
271
|
+
newObject[keys[i]].push(value);
|
|
272
|
+
else
|
|
273
|
+
newObject[keys[i]] = [value];
|
|
274
|
+
} else if (operator === '$each') {
|
|
275
|
+
if (!Array.isArray(value))
|
|
276
|
+
value = [value]
|
|
277
|
+
if (typeof keys[i] === 'number')
|
|
278
|
+
newObject.splice(keys[i], 0, ...value);
|
|
279
|
+
else
|
|
280
|
+
newObject[keys[i]].push(...value);
|
|
281
|
+
} else if (operator === '$inc') {
|
|
282
|
+
newObject[keys[i]] += value
|
|
283
|
+
}
|
|
284
|
+
} else if (value === undefined) {
|
|
285
|
+
if (typeof keys[i] === 'number')
|
|
286
|
+
newObject.slice(keys[i], 1);
|
|
287
|
+
else
|
|
288
|
+
delete newObject[keys[i]]
|
|
289
|
+
} else
|
|
290
|
+
newObject[keys[i]] = value;
|
|
291
|
+
} else {
|
|
292
|
+
newObject[keys[i]] = oldObject[keys[i]] || {};
|
|
293
|
+
newObject = newObject[keys[i]]
|
|
294
|
+
oldObject = oldObject[keys[i]]
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return object
|
|
299
|
+
} catch (error) {
|
|
300
|
+
console.log("Error converting dot notation to object", error);
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
175
305
|
function domParser(str) {
|
|
176
306
|
try {
|
|
177
307
|
var mainTag = str.match(/\<(?<tag>[a-z0-9]+)(.*?)?\>/).groups.tag;
|
|
@@ -708,6 +838,7 @@
|
|
|
708
838
|
});
|
|
709
839
|
}
|
|
710
840
|
|
|
841
|
+
|
|
711
842
|
function getAttributes(el) {
|
|
712
843
|
if (!el) return;
|
|
713
844
|
|
|
@@ -776,6 +907,7 @@
|
|
|
776
907
|
queryData,
|
|
777
908
|
searchData,
|
|
778
909
|
sortData,
|
|
910
|
+
createUpdate,
|
|
779
911
|
getAttributes,
|
|
780
912
|
setAttributeNames,
|
|
781
913
|
getAttributeNames
|