@cocreate/utils 1.33.1 → 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 +14 -0
- package/package.json +1 -1
- package/src/index.js +132 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
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
|
+
|
|
8
|
+
## [1.33.2](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.33.1...v1.33.2) (2024-02-13)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* selector split ([fd205fa](https://github.com/CoCreate-app/CoCreate-utils/commit/fd205faa2dfb2fef5a57526a9630d77974229ad6))
|
|
14
|
+
|
|
1
15
|
## [1.33.1](https://github.com/CoCreate-app/CoCreate-utils/compare/v1.33.0...v1.33.1) (2024-02-05)
|
|
2
16
|
|
|
3
17
|
|
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;
|
|
@@ -302,9 +430,8 @@
|
|
|
302
430
|
}
|
|
303
431
|
|
|
304
432
|
if (Selector) {
|
|
305
|
-
|
|
433
|
+
let selectors = Selector.split(/,(?![^()]*\))/g);
|
|
306
434
|
|
|
307
|
-
let selectors = Selector.split(',');
|
|
308
435
|
for (let j = 0; j < selectors.length; j++) {
|
|
309
436
|
if (selectors[j].includes('@')) {
|
|
310
437
|
selectors[j] = checkMediaQueries(selectors[j])
|
|
@@ -709,6 +836,7 @@
|
|
|
709
836
|
});
|
|
710
837
|
}
|
|
711
838
|
|
|
839
|
+
|
|
712
840
|
function getAttributes(el) {
|
|
713
841
|
if (!el) return;
|
|
714
842
|
|
|
@@ -718,7 +846,7 @@
|
|
|
718
846
|
for (let attribute of el.attributes) {
|
|
719
847
|
let variable = attributes[attribute.name]
|
|
720
848
|
if (variable) {
|
|
721
|
-
object[variable] = attribute.
|
|
849
|
+
object[variable] = el.getAttribute(attribute.name)
|
|
722
850
|
}
|
|
723
851
|
}
|
|
724
852
|
|
|
@@ -777,6 +905,7 @@
|
|
|
777
905
|
queryData,
|
|
778
906
|
searchData,
|
|
779
907
|
sortData,
|
|
908
|
+
createUpdate,
|
|
780
909
|
getAttributes,
|
|
781
910
|
setAttributeNames,
|
|
782
911
|
getAttributeNames
|