@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/utils",
3
- "version": "1.33.2",
3
+ "version": "1.33.3",
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,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