@cocreate/utils 1.33.2 → 1.33.3
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 +7 -0
- package/package.json +1 -1
- package/src/index.js +130 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.33.3](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.33.2...v1.33.3) (2024-02-14)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* createUpdate added to utils to be accessible by other modues ([a54f039](https://github.com/CoCreate-app/CoCreate-utils/commit/a54f03966e80b37cebdf7ee42dbd0b2efb530572))
|
|
7
|
+
|
|
1
8
|
## [1.33.2](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.33.1...v1.33.2) (2024-02-13)
|
|
2
9
|
|
|
3
10
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -172,6 +172,134 @@
|
|
|
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
|
+
let exists
|
|
248
|
+
if (Array.isArray(value)) {
|
|
249
|
+
exists = newObject[keys[i]].some(item => Array.isArray(item) && isEqualArray(item, value));
|
|
250
|
+
} else if (typeof value === 'object' && value !== null) {
|
|
251
|
+
exists = newObject[keys[i]].some(item => typeof item === 'object' && isEqualObject(item, value));
|
|
252
|
+
} else {
|
|
253
|
+
exists = newObject[keys[i]].includes(value);
|
|
254
|
+
}
|
|
255
|
+
if (!exists)
|
|
256
|
+
newObject[keys[i]].push(value)
|
|
257
|
+
} else if (operator === '$pull') {
|
|
258
|
+
if (Array.isArray(value)) {
|
|
259
|
+
newObject[keys[i]] = newObject[keys[i]].filter(item => !Array.isArray(item) || !isEqualArray(item, value));
|
|
260
|
+
} else if (typeof value === 'object' && value !== null) {
|
|
261
|
+
newObject[keys[i]] = newObject[keys[i]].filter(item => typeof item !== 'object' || !isEqualObject(item, value));
|
|
262
|
+
} else {
|
|
263
|
+
newObject[keys[i]] = newObject[keys[i]].filter(item => item !== value);
|
|
264
|
+
}
|
|
265
|
+
} else if (operator === '$push' || operator === '$splice') {
|
|
266
|
+
if (typeof keys[i] === 'number' && newObject.length >= keys[i])
|
|
267
|
+
newObject.splice(keys[i], 0, value);
|
|
268
|
+
else if (newObject[keys[i]])
|
|
269
|
+
newObject[keys[i]].push(value);
|
|
270
|
+
else
|
|
271
|
+
newObject[keys[i]] = [value];
|
|
272
|
+
} else if (operator === '$each') {
|
|
273
|
+
if (!Array.isArray(value))
|
|
274
|
+
value = [value]
|
|
275
|
+
if (typeof keys[i] === 'number')
|
|
276
|
+
newObject.splice(keys[i], 0, ...value);
|
|
277
|
+
else
|
|
278
|
+
newObject[keys[i]].push(...value);
|
|
279
|
+
} else if (operator === '$inc') {
|
|
280
|
+
newObject[keys[i]] += value
|
|
281
|
+
}
|
|
282
|
+
} else if (value === undefined) {
|
|
283
|
+
if (typeof keys[i] === 'number')
|
|
284
|
+
newObject.slice(keys[i], 1);
|
|
285
|
+
else
|
|
286
|
+
delete newObject[keys[i]]
|
|
287
|
+
} else
|
|
288
|
+
newObject[keys[i]] = value;
|
|
289
|
+
} else {
|
|
290
|
+
newObject[keys[i]] = oldObject[keys[i]] || {};
|
|
291
|
+
newObject = newObject[keys[i]]
|
|
292
|
+
oldObject = oldObject[keys[i]]
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return object
|
|
297
|
+
} catch (error) {
|
|
298
|
+
console.log("Error converting dot notation to object", error);
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
175
303
|
function domParser(str) {
|
|
176
304
|
try {
|
|
177
305
|
var mainTag = str.match(/\<(?<tag>[a-z0-9]+)(.*?)?\>/).groups.tag;
|
|
@@ -708,6 +836,7 @@
|
|
|
708
836
|
});
|
|
709
837
|
}
|
|
710
838
|
|
|
839
|
+
|
|
711
840
|
function getAttributes(el) {
|
|
712
841
|
if (!el) return;
|
|
713
842
|
|
|
@@ -776,6 +905,7 @@
|
|
|
776
905
|
queryData,
|
|
777
906
|
searchData,
|
|
778
907
|
sortData,
|
|
908
|
+
createUpdate,
|
|
779
909
|
getAttributes,
|
|
780
910
|
setAttributeNames,
|
|
781
911
|
getAttributeNames
|