@symbo.ls/scratch 2.11.446 → 2.11.453

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.
@@ -302,6 +302,8 @@ var require_array = __commonJS({
302
302
  arraysEqual: () => arraysEqual,
303
303
  cutArrayAfterValue: () => cutArrayAfterValue,
304
304
  cutArrayBeforeValue: () => cutArrayBeforeValue,
305
+ filterArrays: () => filterArrays,
306
+ filterArraysFast: () => filterArraysFast,
305
307
  getFrequencyInArray: () => getFrequencyInArray,
306
308
  joinArrays: () => joinArrays,
307
309
  mergeAndCloneIfArray: () => mergeAndCloneIfArray,
@@ -410,6 +412,13 @@ var require_array = __commonJS({
410
412
  }
411
413
  return true;
412
414
  };
415
+ var filterArrays = (sourceArr, excludeArr) => {
416
+ return sourceArr.filter((item) => !excludeArr.includes(item));
417
+ };
418
+ var filterArraysFast = (sourceArr, excludeArr) => {
419
+ const excludeSet = new Set(excludeArr);
420
+ return sourceArr.filter((item) => !excludeSet.has(item));
421
+ };
413
422
  }
414
423
  });
415
424
 
@@ -603,9 +612,11 @@ var require_object = __commonJS({
603
612
  diff: () => diff,
604
613
  diffArrays: () => diffArrays,
605
614
  diffObjects: () => diffObjects,
615
+ excludeKeysFromObject: () => excludeKeysFromObject,
606
616
  exec: () => exec,
607
617
  flattenRecursive: () => flattenRecursive,
608
618
  hasOwnProperty: () => hasOwnProperty,
619
+ isCyclic: () => isCyclic,
609
620
  isEmpty: () => isEmpty,
610
621
  isEmptyObject: () => isEmptyObject,
611
622
  isEqualDeep: () => isEqualDeep,
@@ -731,20 +742,28 @@ var require_object = __commonJS({
731
742
  }
732
743
  return clone2;
733
744
  };
734
- var deepCloneWithExtend = (obj, excludeFrom = ["node"], options = {}) => {
745
+ var deepCloneWithExtend = (obj, excludeFrom = ["node"], options = {}, visited = /* @__PURE__ */ new WeakSet()) => {
746
+ if ((0, import_types.isObjectLike)(obj)) {
747
+ if (visited.has(obj)) {
748
+ return obj;
749
+ }
750
+ visited.add(obj);
751
+ }
735
752
  const o = options.window ? (0, import_types.isArray)(obj) ? new options.window.Array([]) : new options.window.Object({}) : (0, import_types.isArray)(obj) ? [] : {};
736
753
  for (const prop in obj) {
737
754
  if (!Object.prototype.hasOwnProperty.call(obj, prop))
738
755
  continue;
739
756
  const objProp = obj[prop];
740
- if (excludeFrom.includes(prop) || prop.startsWith("__") || options.cleanUndefined && (0, import_types.isUndefined)(objProp) || options.cleanNull && (0, import_types.isNull)(objProp))
757
+ if (excludeFrom.includes(prop) || prop.startsWith("__") || options.cleanUndefined && (0, import_types.isUndefined)(objProp) || options.cleanNull && (0, import_types.isNull)(objProp)) {
741
758
  continue;
759
+ }
742
760
  if ((0, import_types.isObjectLike)(objProp)) {
743
- o[prop] = deepCloneWithExtend(objProp, excludeFrom, options);
761
+ o[prop] = deepCloneWithExtend(objProp, excludeFrom, options, visited);
744
762
  } else if ((0, import_types.isFunction)(objProp) && options.window) {
745
763
  o[prop] = (options.window || import_globals.window).eval("(" + objProp.toString() + ")");
746
- } else
764
+ } else {
747
765
  o[prop] = objProp;
766
+ }
748
767
  }
749
768
  return o;
750
769
  };
@@ -921,7 +940,7 @@ var require_object = __commonJS({
921
940
  };
922
941
  var stringToObject = (str, opts = { verbose: true }) => {
923
942
  try {
924
- return import_globals.window.eval("(" + str + ")");
943
+ return str ? import_globals.window.eval("(" + str + ")") : {};
925
944
  } catch (e) {
926
945
  if (opts.verbose)
927
946
  console.warn(e);
@@ -1001,20 +1020,27 @@ var require_object = __commonJS({
1001
1020
  return acc;
1002
1021
  }, deletedValues);
1003
1022
  };
1004
- var overwrite = (element, params, excludeFrom = []) => {
1005
- const { ref } = element;
1006
- const changes = {};
1023
+ var overwrite = (element, params, opts = {}) => {
1024
+ const { __ref: ref } = element;
1025
+ const excl = opts.exclude || [];
1026
+ const allowUnderscore = opts.preventUnderscore;
1027
+ const preventCaching = opts.preventCaching;
1007
1028
  for (const e in params) {
1008
- if (excludeFrom.includes(e) || e.startsWith("__"))
1029
+ if (excl.includes(e) || !allowUnderscore && e.startsWith("__"))
1009
1030
  continue;
1010
1031
  const elementProp = element[e];
1011
1032
  const paramsProp = params[e];
1012
- if (paramsProp) {
1013
- ref.__cache[e] = changes[e] = elementProp;
1014
- ref[e] = paramsProp;
1033
+ if (paramsProp !== void 0) {
1034
+ element[e] = paramsProp;
1035
+ if (ref && !preventCaching) {
1036
+ ref.__cache[e] = elementProp;
1037
+ }
1038
+ if ((0, import_types.isObject)(opts.diff)) {
1039
+ diff[e] = elementProp;
1040
+ }
1015
1041
  }
1016
1042
  }
1017
- return changes;
1043
+ return element;
1018
1044
  };
1019
1045
  var overwriteShallow = (obj, params, excludeFrom = []) => {
1020
1046
  for (const e in params) {
@@ -1024,23 +1050,26 @@ var require_object = __commonJS({
1024
1050
  }
1025
1051
  return obj;
1026
1052
  };
1027
- var overwriteDeep = (obj, params, excludeFrom = [], visited = /* @__PURE__ */ new WeakMap()) => {
1053
+ var overwriteDeep = (obj, params, opts = {}, visited = /* @__PURE__ */ new WeakMap()) => {
1054
+ const excl = opts.exclude || [];
1055
+ const forcedExclude = opts.preventForce ? [] : ["node", "window"];
1028
1056
  if (!(0, import_types.isObjectLike)(obj) || !(0, import_types.isObjectLike)(params) || (0, import_node.isDOMNode)(obj) || (0, import_node.isDOMNode)(params)) {
1029
1057
  return params;
1030
1058
  }
1031
- if (visited.has(obj)) {
1059
+ if (visited.has(obj))
1032
1060
  return visited.get(obj);
1033
- }
1034
1061
  visited.set(obj, obj);
1035
1062
  for (const e in params) {
1036
- if (e === "__ref" || excludeFrom.includes(e) || e.startsWith("__"))
1063
+ if (!Object.hasOwnProperty.call(params, e))
1064
+ continue;
1065
+ if (excl.includes(e) || forcedExclude && e.startsWith("__"))
1037
1066
  continue;
1038
1067
  const objProp = obj[e];
1039
1068
  const paramsProp = params[e];
1040
1069
  if ((0, import_node.isDOMNode)(paramsProp)) {
1041
1070
  obj[e] = paramsProp;
1042
1071
  } else if ((0, import_types.isObjectLike)(objProp) && (0, import_types.isObjectLike)(paramsProp)) {
1043
- obj[e] = overwriteDeep(objProp, paramsProp, excludeFrom, visited);
1072
+ obj[e] = overwriteDeep(objProp, paramsProp, opts, visited);
1044
1073
  } else if (paramsProp !== void 0) {
1045
1074
  obj[e] = paramsProp;
1046
1075
  }
@@ -1203,6 +1232,30 @@ var require_object = __commonJS({
1203
1232
  }
1204
1233
  }
1205
1234
  };
1235
+ var isCyclic = (obj) => {
1236
+ const seenObjects = [];
1237
+ function detect(obj2) {
1238
+ if (obj2 && typeof obj2 === "object") {
1239
+ if (seenObjects.indexOf(obj2) !== -1) {
1240
+ return true;
1241
+ }
1242
+ seenObjects.push(obj2);
1243
+ for (const key in obj2) {
1244
+ if (Object.hasOwnProperty.call(obj2, key) && detect(obj2[key])) {
1245
+ console.log(obj2, "cycle at " + key);
1246
+ return true;
1247
+ }
1248
+ }
1249
+ }
1250
+ return false;
1251
+ }
1252
+ return detect(obj);
1253
+ };
1254
+ var excludeKeysFromObject = (obj, excludedKeys) => {
1255
+ const result = { ...obj };
1256
+ excludedKeys.forEach((key) => delete result[key]);
1257
+ return result;
1258
+ };
1206
1259
  }
1207
1260
  });
1208
1261
 
@@ -1622,6 +1675,8 @@ var require_component = __commonJS({
1622
1675
  return /^[a-z]*$/.test(firstCharKey);
1623
1676
  };
1624
1677
  var addAdditionalExtend = (newExtend, element) => {
1678
+ if (!newExtend)
1679
+ return element;
1625
1680
  const { extend: elementExtend } = element;
1626
1681
  const originalArray = (0, import__.isArray)(elementExtend) ? elementExtend : [elementExtend];
1627
1682
  const receivedArray = (0, import__.isArray)(newExtend) ? newExtend : [newExtend];
@@ -1629,8 +1684,23 @@ var require_component = __commonJS({
1629
1684
  return { ...element, extend };
1630
1685
  };
1631
1686
  var checkIfSugar = (element, parent, key) => {
1632
- const { extend, props, childExtend, extends: extendProps, childrenExtends, childProps, children, on, $collection, $stateCollection, $propsCollection } = element;
1687
+ const {
1688
+ extend,
1689
+ props,
1690
+ childExtend,
1691
+ extends: extendProps,
1692
+ childrenExtends,
1693
+ childProps,
1694
+ children,
1695
+ on,
1696
+ $collection,
1697
+ $stateCollection,
1698
+ $propsCollection
1699
+ } = element;
1633
1700
  const hasComponentAttrs = extend || childExtend || props || on || $collection || $stateCollection || $propsCollection;
1701
+ if (hasComponentAttrs && (childProps || extendProps || children || childrenExtends)) {
1702
+ element.error("Sugar component includes params for builtin components");
1703
+ }
1634
1704
  return !hasComponentAttrs || childProps || extendProps || children || childrenExtends;
1635
1705
  };
1636
1706
  var extendizeByKey = (element, parent, key) => {
@@ -1642,11 +1712,11 @@ var require_component = __commonJS({
1642
1712
  if (element === isExtendKeyComponent)
1643
1713
  return element;
1644
1714
  else if (isSugar) {
1645
- const newElem = {
1715
+ const newElem = addAdditionalExtend(element.extends, {
1646
1716
  extend: extendFromKey,
1647
1717
  tag,
1648
1718
  props: { ...element }
1649
- };
1719
+ });
1650
1720
  if (childrenExtends)
1651
1721
  newElem.childExtend = childrenExtends;
1652
1722
  return newElem;
@@ -2117,6 +2187,8 @@ var require_cjs2 = __commonJS({
2117
2187
  arraysEqual: () => arraysEqual,
2118
2188
  cutArrayAfterValue: () => cutArrayAfterValue,
2119
2189
  cutArrayBeforeValue: () => cutArrayBeforeValue,
2190
+ filterArrays: () => filterArrays,
2191
+ filterArraysFast: () => filterArraysFast,
2120
2192
  getFrequencyInArray: () => getFrequencyInArray,
2121
2193
  joinArrays: () => joinArrays,
2122
2194
  mergeAndCloneIfArray: () => mergeAndCloneIfArray,
@@ -2225,6 +2297,13 @@ var require_cjs2 = __commonJS({
2225
2297
  }
2226
2298
  return true;
2227
2299
  };
2300
+ var filterArrays = (sourceArr, excludeArr) => {
2301
+ return sourceArr.filter((item) => !excludeArr.includes(item));
2302
+ };
2303
+ var filterArraysFast = (sourceArr, excludeArr) => {
2304
+ const excludeSet = new Set(excludeArr);
2305
+ return sourceArr.filter((item) => !excludeSet.has(item));
2306
+ };
2228
2307
  }
2229
2308
  });
2230
2309
  var require_string2 = __commonJS2({
@@ -2414,9 +2493,11 @@ var require_cjs2 = __commonJS({
2414
2493
  diff: () => diff,
2415
2494
  diffArrays: () => diffArrays,
2416
2495
  diffObjects: () => diffObjects,
2496
+ excludeKeysFromObject: () => excludeKeysFromObject,
2417
2497
  exec: () => exec,
2418
2498
  flattenRecursive: () => flattenRecursive,
2419
2499
  hasOwnProperty: () => hasOwnProperty,
2500
+ isCyclic: () => isCyclic,
2420
2501
  isEmpty: () => isEmpty,
2421
2502
  isEmptyObject: () => isEmptyObject,
2422
2503
  isEqualDeep: () => isEqualDeep,
@@ -2542,20 +2623,28 @@ var require_cjs2 = __commonJS({
2542
2623
  }
2543
2624
  return clone2;
2544
2625
  };
2545
- var deepCloneWithExtend = (obj, excludeFrom = ["node"], options = {}) => {
2626
+ var deepCloneWithExtend = (obj, excludeFrom = ["node"], options = {}, visited = /* @__PURE__ */ new WeakSet()) => {
2627
+ if ((0, import_types.isObjectLike)(obj)) {
2628
+ if (visited.has(obj)) {
2629
+ return obj;
2630
+ }
2631
+ visited.add(obj);
2632
+ }
2546
2633
  const o = options.window ? (0, import_types.isArray)(obj) ? new options.window.Array([]) : new options.window.Object({}) : (0, import_types.isArray)(obj) ? [] : {};
2547
2634
  for (const prop in obj) {
2548
2635
  if (!Object.prototype.hasOwnProperty.call(obj, prop))
2549
2636
  continue;
2550
2637
  const objProp = obj[prop];
2551
- if (excludeFrom.includes(prop) || prop.startsWith("__") || options.cleanUndefined && (0, import_types.isUndefined)(objProp) || options.cleanNull && (0, import_types.isNull)(objProp))
2638
+ if (excludeFrom.includes(prop) || prop.startsWith("__") || options.cleanUndefined && (0, import_types.isUndefined)(objProp) || options.cleanNull && (0, import_types.isNull)(objProp)) {
2552
2639
  continue;
2640
+ }
2553
2641
  if ((0, import_types.isObjectLike)(objProp)) {
2554
- o[prop] = deepCloneWithExtend(objProp, excludeFrom, options);
2642
+ o[prop] = deepCloneWithExtend(objProp, excludeFrom, options, visited);
2555
2643
  } else if ((0, import_types.isFunction)(objProp) && options.window) {
2556
2644
  o[prop] = (options.window || import_globals.window).eval("(" + objProp.toString() + ")");
2557
- } else
2645
+ } else {
2558
2646
  o[prop] = objProp;
2647
+ }
2559
2648
  }
2560
2649
  return o;
2561
2650
  };
@@ -2732,7 +2821,7 @@ var require_cjs2 = __commonJS({
2732
2821
  };
2733
2822
  var stringToObject = (str, opts = { verbose: true }) => {
2734
2823
  try {
2735
- return import_globals.window.eval("(" + str + ")");
2824
+ return str ? import_globals.window.eval("(" + str + ")") : {};
2736
2825
  } catch (e) {
2737
2826
  if (opts.verbose)
2738
2827
  console.warn(e);
@@ -2812,20 +2901,27 @@ var require_cjs2 = __commonJS({
2812
2901
  return acc;
2813
2902
  }, deletedValues);
2814
2903
  };
2815
- var overwrite = (element, params, excludeFrom = []) => {
2816
- const { ref } = element;
2817
- const changes = {};
2904
+ var overwrite = (element, params, opts = {}) => {
2905
+ const { __ref: ref } = element;
2906
+ const excl = opts.exclude || [];
2907
+ const allowUnderscore = opts.preventUnderscore;
2908
+ const preventCaching = opts.preventCaching;
2818
2909
  for (const e in params) {
2819
- if (excludeFrom.includes(e) || e.startsWith("__"))
2910
+ if (excl.includes(e) || !allowUnderscore && e.startsWith("__"))
2820
2911
  continue;
2821
2912
  const elementProp = element[e];
2822
2913
  const paramsProp = params[e];
2823
- if (paramsProp) {
2824
- ref.__cache[e] = changes[e] = elementProp;
2825
- ref[e] = paramsProp;
2914
+ if (paramsProp !== void 0) {
2915
+ element[e] = paramsProp;
2916
+ if (ref && !preventCaching) {
2917
+ ref.__cache[e] = elementProp;
2918
+ }
2919
+ if ((0, import_types.isObject)(opts.diff)) {
2920
+ diff[e] = elementProp;
2921
+ }
2826
2922
  }
2827
2923
  }
2828
- return changes;
2924
+ return element;
2829
2925
  };
2830
2926
  var overwriteShallow = (obj, params, excludeFrom = []) => {
2831
2927
  for (const e in params) {
@@ -2835,23 +2931,26 @@ var require_cjs2 = __commonJS({
2835
2931
  }
2836
2932
  return obj;
2837
2933
  };
2838
- var overwriteDeep = (obj, params, excludeFrom = [], visited = /* @__PURE__ */ new WeakMap()) => {
2934
+ var overwriteDeep = (obj, params, opts = {}, visited = /* @__PURE__ */ new WeakMap()) => {
2935
+ const excl = opts.exclude || [];
2936
+ const forcedExclude = opts.preventForce ? [] : ["node", "window"];
2839
2937
  if (!(0, import_types.isObjectLike)(obj) || !(0, import_types.isObjectLike)(params) || (0, import_node.isDOMNode)(obj) || (0, import_node.isDOMNode)(params)) {
2840
2938
  return params;
2841
2939
  }
2842
- if (visited.has(obj)) {
2940
+ if (visited.has(obj))
2843
2941
  return visited.get(obj);
2844
- }
2845
2942
  visited.set(obj, obj);
2846
2943
  for (const e in params) {
2847
- if (e === "__ref" || excludeFrom.includes(e) || e.startsWith("__"))
2944
+ if (!Object.hasOwnProperty.call(params, e))
2945
+ continue;
2946
+ if (excl.includes(e) || forcedExclude && e.startsWith("__"))
2848
2947
  continue;
2849
2948
  const objProp = obj[e];
2850
2949
  const paramsProp = params[e];
2851
2950
  if ((0, import_node.isDOMNode)(paramsProp)) {
2852
2951
  obj[e] = paramsProp;
2853
2952
  } else if ((0, import_types.isObjectLike)(objProp) && (0, import_types.isObjectLike)(paramsProp)) {
2854
- obj[e] = overwriteDeep(objProp, paramsProp, excludeFrom, visited);
2953
+ obj[e] = overwriteDeep(objProp, paramsProp, opts, visited);
2855
2954
  } else if (paramsProp !== void 0) {
2856
2955
  obj[e] = paramsProp;
2857
2956
  }
@@ -3014,6 +3113,30 @@ var require_cjs2 = __commonJS({
3014
3113
  }
3015
3114
  }
3016
3115
  };
3116
+ var isCyclic = (obj) => {
3117
+ const seenObjects = [];
3118
+ function detect(obj2) {
3119
+ if (obj2 && typeof obj2 === "object") {
3120
+ if (seenObjects.indexOf(obj2) !== -1) {
3121
+ return true;
3122
+ }
3123
+ seenObjects.push(obj2);
3124
+ for (const key in obj2) {
3125
+ if (Object.hasOwnProperty.call(obj2, key) && detect(obj2[key])) {
3126
+ console.log(obj2, "cycle at " + key);
3127
+ return true;
3128
+ }
3129
+ }
3130
+ }
3131
+ return false;
3132
+ }
3133
+ return detect(obj);
3134
+ };
3135
+ var excludeKeysFromObject = (obj, excludedKeys) => {
3136
+ const result = { ...obj };
3137
+ excludedKeys.forEach((key) => delete result[key]);
3138
+ return result;
3139
+ };
3017
3140
  }
3018
3141
  });
3019
3142
  var require_function2 = __commonJS2({
@@ -3423,6 +3546,8 @@ var require_cjs2 = __commonJS({
3423
3546
  return /^[a-z]*$/.test(firstCharKey);
3424
3547
  };
3425
3548
  var addAdditionalExtend = (newExtend, element) => {
3549
+ if (!newExtend)
3550
+ return element;
3426
3551
  const { extend: elementExtend } = element;
3427
3552
  const originalArray = (0, import__.isArray)(elementExtend) ? elementExtend : [elementExtend];
3428
3553
  const receivedArray = (0, import__.isArray)(newExtend) ? newExtend : [newExtend];
@@ -3430,8 +3555,23 @@ var require_cjs2 = __commonJS({
3430
3555
  return { ...element, extend };
3431
3556
  };
3432
3557
  var checkIfSugar = (element, parent, key) => {
3433
- const { extend, props, childExtend, extends: extendProps, childrenExtends, childProps, children, on, $collection, $stateCollection, $propsCollection } = element;
3558
+ const {
3559
+ extend,
3560
+ props,
3561
+ childExtend,
3562
+ extends: extendProps,
3563
+ childrenExtends,
3564
+ childProps,
3565
+ children,
3566
+ on,
3567
+ $collection,
3568
+ $stateCollection,
3569
+ $propsCollection
3570
+ } = element;
3434
3571
  const hasComponentAttrs = extend || childExtend || props || on || $collection || $stateCollection || $propsCollection;
3572
+ if (hasComponentAttrs && (childProps || extendProps || children || childrenExtends)) {
3573
+ element.error("Sugar component includes params for builtin components");
3574
+ }
3435
3575
  return !hasComponentAttrs || childProps || extendProps || children || childrenExtends;
3436
3576
  };
3437
3577
  var extendizeByKey = (element, parent, key) => {
@@ -3443,11 +3583,11 @@ var require_cjs2 = __commonJS({
3443
3583
  if (element === isExtendKeyComponent)
3444
3584
  return element;
3445
3585
  else if (isSugar) {
3446
- const newElem = {
3586
+ const newElem = addAdditionalExtend(element.extends, {
3447
3587
  extend: extendFromKey,
3448
3588
  tag,
3449
3589
  props: { ...element }
3450
- };
3590
+ });
3451
3591
  if (childrenExtends)
3452
3592
  newElem.childExtend = childrenExtends;
3453
3593
  return newElem;
@@ -302,6 +302,8 @@ var require_array = __commonJS({
302
302
  arraysEqual: () => arraysEqual,
303
303
  cutArrayAfterValue: () => cutArrayAfterValue,
304
304
  cutArrayBeforeValue: () => cutArrayBeforeValue,
305
+ filterArrays: () => filterArrays,
306
+ filterArraysFast: () => filterArraysFast,
305
307
  getFrequencyInArray: () => getFrequencyInArray,
306
308
  joinArrays: () => joinArrays,
307
309
  mergeAndCloneIfArray: () => mergeAndCloneIfArray,
@@ -410,6 +412,13 @@ var require_array = __commonJS({
410
412
  }
411
413
  return true;
412
414
  };
415
+ var filterArrays = (sourceArr, excludeArr) => {
416
+ return sourceArr.filter((item) => !excludeArr.includes(item));
417
+ };
418
+ var filterArraysFast = (sourceArr, excludeArr) => {
419
+ const excludeSet = new Set(excludeArr);
420
+ return sourceArr.filter((item) => !excludeSet.has(item));
421
+ };
413
422
  }
414
423
  });
415
424
 
@@ -603,9 +612,11 @@ var require_object = __commonJS({
603
612
  diff: () => diff,
604
613
  diffArrays: () => diffArrays,
605
614
  diffObjects: () => diffObjects,
615
+ excludeKeysFromObject: () => excludeKeysFromObject,
606
616
  exec: () => exec,
607
617
  flattenRecursive: () => flattenRecursive,
608
618
  hasOwnProperty: () => hasOwnProperty,
619
+ isCyclic: () => isCyclic,
609
620
  isEmpty: () => isEmpty,
610
621
  isEmptyObject: () => isEmptyObject,
611
622
  isEqualDeep: () => isEqualDeep,
@@ -731,20 +742,28 @@ var require_object = __commonJS({
731
742
  }
732
743
  return clone2;
733
744
  };
734
- var deepCloneWithExtend = (obj, excludeFrom = ["node"], options = {}) => {
745
+ var deepCloneWithExtend = (obj, excludeFrom = ["node"], options = {}, visited = /* @__PURE__ */ new WeakSet()) => {
746
+ if ((0, import_types.isObjectLike)(obj)) {
747
+ if (visited.has(obj)) {
748
+ return obj;
749
+ }
750
+ visited.add(obj);
751
+ }
735
752
  const o = options.window ? (0, import_types.isArray)(obj) ? new options.window.Array([]) : new options.window.Object({}) : (0, import_types.isArray)(obj) ? [] : {};
736
753
  for (const prop in obj) {
737
754
  if (!Object.prototype.hasOwnProperty.call(obj, prop))
738
755
  continue;
739
756
  const objProp = obj[prop];
740
- if (excludeFrom.includes(prop) || prop.startsWith("__") || options.cleanUndefined && (0, import_types.isUndefined)(objProp) || options.cleanNull && (0, import_types.isNull)(objProp))
757
+ if (excludeFrom.includes(prop) || prop.startsWith("__") || options.cleanUndefined && (0, import_types.isUndefined)(objProp) || options.cleanNull && (0, import_types.isNull)(objProp)) {
741
758
  continue;
759
+ }
742
760
  if ((0, import_types.isObjectLike)(objProp)) {
743
- o[prop] = deepCloneWithExtend(objProp, excludeFrom, options);
761
+ o[prop] = deepCloneWithExtend(objProp, excludeFrom, options, visited);
744
762
  } else if ((0, import_types.isFunction)(objProp) && options.window) {
745
763
  o[prop] = (options.window || import_globals.window).eval("(" + objProp.toString() + ")");
746
- } else
764
+ } else {
747
765
  o[prop] = objProp;
766
+ }
748
767
  }
749
768
  return o;
750
769
  };
@@ -921,7 +940,7 @@ var require_object = __commonJS({
921
940
  };
922
941
  var stringToObject = (str, opts = { verbose: true }) => {
923
942
  try {
924
- return import_globals.window.eval("(" + str + ")");
943
+ return str ? import_globals.window.eval("(" + str + ")") : {};
925
944
  } catch (e) {
926
945
  if (opts.verbose)
927
946
  console.warn(e);
@@ -1001,20 +1020,27 @@ var require_object = __commonJS({
1001
1020
  return acc;
1002
1021
  }, deletedValues);
1003
1022
  };
1004
- var overwrite = (element, params, excludeFrom = []) => {
1005
- const { ref } = element;
1006
- const changes = {};
1023
+ var overwrite = (element, params, opts = {}) => {
1024
+ const { __ref: ref } = element;
1025
+ const excl = opts.exclude || [];
1026
+ const allowUnderscore = opts.preventUnderscore;
1027
+ const preventCaching = opts.preventCaching;
1007
1028
  for (const e in params) {
1008
- if (excludeFrom.includes(e) || e.startsWith("__"))
1029
+ if (excl.includes(e) || !allowUnderscore && e.startsWith("__"))
1009
1030
  continue;
1010
1031
  const elementProp = element[e];
1011
1032
  const paramsProp = params[e];
1012
- if (paramsProp) {
1013
- ref.__cache[e] = changes[e] = elementProp;
1014
- ref[e] = paramsProp;
1033
+ if (paramsProp !== void 0) {
1034
+ element[e] = paramsProp;
1035
+ if (ref && !preventCaching) {
1036
+ ref.__cache[e] = elementProp;
1037
+ }
1038
+ if ((0, import_types.isObject)(opts.diff)) {
1039
+ diff[e] = elementProp;
1040
+ }
1015
1041
  }
1016
1042
  }
1017
- return changes;
1043
+ return element;
1018
1044
  };
1019
1045
  var overwriteShallow = (obj, params, excludeFrom = []) => {
1020
1046
  for (const e in params) {
@@ -1024,23 +1050,26 @@ var require_object = __commonJS({
1024
1050
  }
1025
1051
  return obj;
1026
1052
  };
1027
- var overwriteDeep = (obj, params, excludeFrom = [], visited = /* @__PURE__ */ new WeakMap()) => {
1053
+ var overwriteDeep = (obj, params, opts = {}, visited = /* @__PURE__ */ new WeakMap()) => {
1054
+ const excl = opts.exclude || [];
1055
+ const forcedExclude = opts.preventForce ? [] : ["node", "window"];
1028
1056
  if (!(0, import_types.isObjectLike)(obj) || !(0, import_types.isObjectLike)(params) || (0, import_node.isDOMNode)(obj) || (0, import_node.isDOMNode)(params)) {
1029
1057
  return params;
1030
1058
  }
1031
- if (visited.has(obj)) {
1059
+ if (visited.has(obj))
1032
1060
  return visited.get(obj);
1033
- }
1034
1061
  visited.set(obj, obj);
1035
1062
  for (const e in params) {
1036
- if (e === "__ref" || excludeFrom.includes(e) || e.startsWith("__"))
1063
+ if (!Object.hasOwnProperty.call(params, e))
1064
+ continue;
1065
+ if (excl.includes(e) || forcedExclude && e.startsWith("__"))
1037
1066
  continue;
1038
1067
  const objProp = obj[e];
1039
1068
  const paramsProp = params[e];
1040
1069
  if ((0, import_node.isDOMNode)(paramsProp)) {
1041
1070
  obj[e] = paramsProp;
1042
1071
  } else if ((0, import_types.isObjectLike)(objProp) && (0, import_types.isObjectLike)(paramsProp)) {
1043
- obj[e] = overwriteDeep(objProp, paramsProp, excludeFrom, visited);
1072
+ obj[e] = overwriteDeep(objProp, paramsProp, opts, visited);
1044
1073
  } else if (paramsProp !== void 0) {
1045
1074
  obj[e] = paramsProp;
1046
1075
  }
@@ -1203,6 +1232,30 @@ var require_object = __commonJS({
1203
1232
  }
1204
1233
  }
1205
1234
  };
1235
+ var isCyclic = (obj) => {
1236
+ const seenObjects = [];
1237
+ function detect(obj2) {
1238
+ if (obj2 && typeof obj2 === "object") {
1239
+ if (seenObjects.indexOf(obj2) !== -1) {
1240
+ return true;
1241
+ }
1242
+ seenObjects.push(obj2);
1243
+ for (const key in obj2) {
1244
+ if (Object.hasOwnProperty.call(obj2, key) && detect(obj2[key])) {
1245
+ console.log(obj2, "cycle at " + key);
1246
+ return true;
1247
+ }
1248
+ }
1249
+ }
1250
+ return false;
1251
+ }
1252
+ return detect(obj);
1253
+ };
1254
+ var excludeKeysFromObject = (obj, excludedKeys) => {
1255
+ const result = { ...obj };
1256
+ excludedKeys.forEach((key) => delete result[key]);
1257
+ return result;
1258
+ };
1206
1259
  }
1207
1260
  });
1208
1261
 
@@ -1622,6 +1675,8 @@ var require_component = __commonJS({
1622
1675
  return /^[a-z]*$/.test(firstCharKey);
1623
1676
  };
1624
1677
  var addAdditionalExtend = (newExtend, element) => {
1678
+ if (!newExtend)
1679
+ return element;
1625
1680
  const { extend: elementExtend } = element;
1626
1681
  const originalArray = (0, import__.isArray)(elementExtend) ? elementExtend : [elementExtend];
1627
1682
  const receivedArray = (0, import__.isArray)(newExtend) ? newExtend : [newExtend];
@@ -1629,8 +1684,23 @@ var require_component = __commonJS({
1629
1684
  return { ...element, extend };
1630
1685
  };
1631
1686
  var checkIfSugar = (element, parent, key) => {
1632
- const { extend, props, childExtend, extends: extendProps, childrenExtends, childProps, children, on, $collection, $stateCollection, $propsCollection } = element;
1687
+ const {
1688
+ extend,
1689
+ props,
1690
+ childExtend,
1691
+ extends: extendProps,
1692
+ childrenExtends,
1693
+ childProps,
1694
+ children,
1695
+ on,
1696
+ $collection,
1697
+ $stateCollection,
1698
+ $propsCollection
1699
+ } = element;
1633
1700
  const hasComponentAttrs = extend || childExtend || props || on || $collection || $stateCollection || $propsCollection;
1701
+ if (hasComponentAttrs && (childProps || extendProps || children || childrenExtends)) {
1702
+ element.error("Sugar component includes params for builtin components");
1703
+ }
1634
1704
  return !hasComponentAttrs || childProps || extendProps || children || childrenExtends;
1635
1705
  };
1636
1706
  var extendizeByKey = (element, parent, key) => {
@@ -1642,11 +1712,11 @@ var require_component = __commonJS({
1642
1712
  if (element === isExtendKeyComponent)
1643
1713
  return element;
1644
1714
  else if (isSugar) {
1645
- const newElem = {
1715
+ const newElem = addAdditionalExtend(element.extends, {
1646
1716
  extend: extendFromKey,
1647
1717
  tag,
1648
1718
  props: { ...element }
1649
- };
1719
+ });
1650
1720
  if (childrenExtends)
1651
1721
  newElem.childExtend = childrenExtends;
1652
1722
  return newElem;