@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/utils",
3
- "version": "1.33.1",
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;
@@ -302,9 +430,8 @@
302
430
  }
303
431
 
304
432
  if (Selector) {
305
- // let selectors = Selector.split(/,(?![^()]*\))/g);
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.value
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