@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/utils",
3
- "version": "1.33.2",
3
+ "version": "1.33.4",
4
4
  "description": "A simple utils component in vanilla javascript. Easily configured using HTML5 attributes and/or JavaScript API.",
5
5
  "keywords": [
6
6
  "utils",
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