marko 6.0.0-next.3.59 → 6.0.0-next.3.60

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.
@@ -45,7 +45,13 @@ export declare enum AccessorChar {
45
45
  ControlledValue = ":",
46
46
  ControlledHandler = ";",
47
47
  ControlledType = "=",
48
- Getter = ">"
48
+ Getter = ">",
49
+ BranchAccessor = "*",
50
+ CatchContent = "^",
51
+ PlaceholderContent = "%",
52
+ PlaceholderBranch = "#",
53
+ PendingCount = ".",
54
+ Promise = "?"
49
55
  }
50
56
  export declare enum NodeType {
51
57
  Element = 1,
package/dist/debug/dom.js CHANGED
@@ -25,6 +25,7 @@ __export(dom_exports, {
25
25
  attrTags: () => attrTags,
26
26
  attrs: () => attrs,
27
27
  attrsEvents: () => attrsEvents,
28
+ awaitTag: () => awaitTag,
28
29
  classAttr: () => classAttr,
29
30
  compat: () => compat,
30
31
  conditional: () => conditional,
@@ -44,11 +45,13 @@ __export(dom_exports, {
44
45
  createContent: () => createContent,
45
46
  createRenderer: () => createRenderer,
46
47
  createTemplate: () => createTemplate,
48
+ createTry: () => createTry,
47
49
  data: () => data,
48
50
  dynamicClosure: () => dynamicClosure,
49
51
  dynamicClosureRead: () => dynamicClosureRead,
50
52
  dynamicTag: () => dynamicTag,
51
53
  effect: () => effect,
54
+ enableCatch: () => enableCatch,
52
55
  forIn: () => forIn,
53
56
  forOf: () => forOf,
54
57
  forTo: () => forTo,
@@ -1028,134 +1031,15 @@ function insertBranchBefore(branch, parentNode, nextSibling) {
1028
1031
  branch.___endNode
1029
1032
  );
1030
1033
  }
1031
-
1032
- // src/dom/queue.ts
1033
- var pendingRenders = [];
1034
- var pendingRendersLookup = /* @__PURE__ */ new Map();
1035
- var pendingEffects = [];
1036
- var rendering = false;
1037
- var scopeKeyOffset = 1e3;
1038
- function queueRender(scope, signal, signalKey, value2, scopeKey = scope.___id) {
1039
- const key = scopeKey * scopeKeyOffset + signalKey;
1040
- const existingRender = signalKey >= 0 && pendingRendersLookup.get(key);
1041
- if (existingRender) {
1042
- existingRender.___value = value2;
1043
- } else {
1044
- const render = {
1045
- ___key: key,
1046
- ___scope: scope,
1047
- ___signal: signal,
1048
- ___value: value2
1049
- };
1050
- let i = pendingRenders.push(render) - 1;
1051
- while (i) {
1052
- const parentIndex = i - 1 >> 1;
1053
- const parent = pendingRenders[parentIndex];
1054
- if (key - parent.___key >= 0) break;
1055
- pendingRenders[i] = parent;
1056
- i = parentIndex;
1057
- }
1058
- signalKey >= 0 && pendingRendersLookup.set(key, render);
1059
- pendingRenders[i] = render;
1060
- }
1061
- }
1062
- function queueEffect(scope, fn) {
1063
- pendingEffects.push(fn, scope);
1064
- }
1065
- function run() {
1066
- const effects = pendingEffects;
1067
- try {
1068
- rendering = true;
1069
- runRenders();
1070
- } finally {
1071
- pendingRenders = [];
1072
- pendingRendersLookup = /* @__PURE__ */ new Map();
1073
- pendingEffects = [];
1074
- rendering = false;
1075
- }
1076
- runEffects(effects);
1077
- }
1078
- function prepareEffects(fn) {
1079
- const prevRenders = pendingRenders;
1080
- const prevRendersLookup = pendingRendersLookup;
1081
- const prevEffects = pendingEffects;
1082
- const preparedEffects = pendingEffects = [];
1083
- pendingRenders = [];
1084
- pendingRendersLookup = /* @__PURE__ */ new Map();
1085
- try {
1086
- rendering = true;
1087
- fn();
1088
- runRenders();
1089
- } finally {
1090
- rendering = false;
1091
- pendingRenders = prevRenders;
1092
- pendingRendersLookup = prevRendersLookup;
1093
- pendingEffects = prevEffects;
1094
- }
1095
- return preparedEffects;
1096
- }
1097
- function runEffects(effects) {
1098
- for (let i = 0, scope; i < effects.length; ) {
1099
- effects[i++](
1100
- scope = effects[i++],
1101
- scope
1102
- );
1103
- }
1104
- }
1105
- function runRenders() {
1106
- while (pendingRenders.length) {
1107
- const render = pendingRenders[0];
1108
- const item = pendingRenders.pop();
1109
- if (render !== item) {
1110
- let i = 0;
1111
- const mid = pendingRenders.length >> 1;
1112
- const key = (pendingRenders[0] = item).___key;
1113
- while (i < mid) {
1114
- let bestChild = (i << 1) + 1;
1115
- const right = bestChild + 1;
1116
- if (right < pendingRenders.length && pendingRenders[right].___key - pendingRenders[bestChild].___key < 0) {
1117
- bestChild = right;
1118
- }
1119
- if (pendingRenders[bestChild].___key - key >= 0) {
1120
- break;
1121
- } else {
1122
- pendingRenders[i] = pendingRenders[bestChild];
1123
- i = bestChild;
1124
- }
1125
- }
1126
- pendingRenders[i] = item;
1127
- }
1128
- if (!render.___scope.___closestBranch?.___destroyed) {
1129
- render.___signal(render.___scope, render.___value);
1130
- }
1131
- }
1132
- finishPendingScopes();
1133
- }
1134
-
1135
- // src/dom/abort-signal.ts
1136
- function resetAbortSignal(scope, id) {
1137
- const ctrl = scope.___abortControllers?.[id];
1138
- if (ctrl) {
1139
- queueEffect(ctrl, abort);
1140
- scope.___abortControllers[id] = void 0;
1141
- }
1142
- }
1143
- function getAbortSignal(scope, id) {
1144
- if (scope.___closestBranch) {
1145
- (scope.___closestBranch.___abortScopes ||= /* @__PURE__ */ new Set()).add(scope);
1146
- }
1147
- return ((scope.___abortControllers ||= {})[id] ||= new AbortController()).signal;
1148
- }
1149
- function abort(ctrl) {
1150
- ctrl.abort();
1034
+ function tempDetatchBranch(branch) {
1035
+ insertChildNodes(
1036
+ branch.___startNode.ownerDocument.createDocumentFragment(),
1037
+ null,
1038
+ branch.___startNode,
1039
+ branch.___endNode
1040
+ );
1151
1041
  }
1152
1042
 
1153
- // src/common/compat-meta.ts
1154
- var prefix = true ? "$compat_" : "$C_";
1155
- var RENDERER_REGISTER_ID = prefix + (true ? "renderer" : "r");
1156
- var SET_SCOPE_REGISTER_ID = prefix + (true ? "setScope" : "s");
1157
- var RENDER_BODY_ID = prefix + (true ? "renderBody" : "b");
1158
-
1159
1043
  // src/dom/reconcile.ts
1160
1044
  var WRONG_POS = 2147483647;
1161
1045
  function reconcile(parent, oldBranches, newBranches, afterReference) {
@@ -1732,6 +1616,132 @@ function hoist(...path) {
1732
1616
  }
1733
1617
 
1734
1618
  // src/dom/control-flow.ts
1619
+ function awaitTag(nodeAccessor, renderer) {
1620
+ const promiseAccessor = nodeAccessor + "?" /* Promise */;
1621
+ const branchAccessor = nodeAccessor + "!" /* ConditionalScope */;
1622
+ return (scope, promise) => {
1623
+ let tryBranch = scope.___closestBranch;
1624
+ let awaitBranch = scope[branchAccessor];
1625
+ const referenceNode = scope[nodeAccessor];
1626
+ const namespaceNode = (awaitBranch?.___startNode ?? referenceNode).parentNode;
1627
+ while (tryBranch && !tryBranch["%" /* PlaceholderContent */]) {
1628
+ tryBranch = tryBranch.___parentBranch;
1629
+ }
1630
+ const thisPromise = scope[promiseAccessor] = promise.then((data2) => {
1631
+ if (scope.___closestBranch?.___destroyed || scope[promiseAccessor] !== thisPromise) {
1632
+ return;
1633
+ }
1634
+ scope[promiseAccessor] = void 0;
1635
+ const effects = prepareEffects(() => {
1636
+ if (!awaitBranch || !tryBranch) {
1637
+ insertBranchBefore(
1638
+ awaitBranch ??= scope[branchAccessor] = createAndSetupBranch(
1639
+ scope.$global,
1640
+ renderer,
1641
+ scope,
1642
+ namespaceNode
1643
+ ),
1644
+ referenceNode.parentNode,
1645
+ referenceNode
1646
+ );
1647
+ referenceNode.remove();
1648
+ }
1649
+ renderer.___params?.(awaitBranch, [data2]);
1650
+ });
1651
+ if (tryBranch) {
1652
+ if (!--tryBranch["." /* PendingCount */]) {
1653
+ const placeholderBranch = tryBranch["#" /* PlaceholderBranch */];
1654
+ if (placeholderBranch) {
1655
+ insertBranchBefore(
1656
+ tryBranch,
1657
+ placeholderBranch.___startNode.parentNode,
1658
+ placeholderBranch.___startNode
1659
+ );
1660
+ removeAndDestroyBranch(placeholderBranch);
1661
+ } else {
1662
+ insertBranchBefore(
1663
+ tryBranch,
1664
+ referenceNode.parentNode,
1665
+ referenceNode
1666
+ );
1667
+ }
1668
+ }
1669
+ } else {
1670
+ runEffects(effects);
1671
+ }
1672
+ }).catch((error) => {
1673
+ let tryBranch2 = scope.___closestBranch;
1674
+ while (tryBranch2 && !tryBranch2["^" /* CatchContent */]) {
1675
+ tryBranch2 = tryBranch2.___parentBranch;
1676
+ }
1677
+ if (!tryBranch2) {
1678
+ setTimeout(() => {
1679
+ throw error;
1680
+ });
1681
+ } else {
1682
+ setConditionalRenderer(
1683
+ tryBranch2._,
1684
+ tryBranch2["*" /* BranchAccessor */],
1685
+ tryBranch2["^" /* CatchContent */],
1686
+ createAndSetupBranch
1687
+ );
1688
+ tryBranch2["^" /* CatchContent */].___params?.(
1689
+ tryBranch2._[tryBranch2["*" /* BranchAccessor */] + "!" /* ConditionalScope */],
1690
+ [error]
1691
+ );
1692
+ }
1693
+ });
1694
+ if (tryBranch) {
1695
+ if (!tryBranch["." /* PendingCount */]) {
1696
+ tryBranch["." /* PendingCount */] = 0;
1697
+ requestAnimationFrame(() => {
1698
+ if (tryBranch["." /* PendingCount */] && !tryBranch.___destroyed) {
1699
+ const placeholderBranch = tryBranch["#" /* PlaceholderBranch */] = createAndSetupBranch(
1700
+ scope.$global,
1701
+ tryBranch["%" /* PlaceholderContent */],
1702
+ tryBranch._,
1703
+ tryBranch.___startNode.parentNode
1704
+ );
1705
+ insertBranchBefore(
1706
+ placeholderBranch,
1707
+ tryBranch.___startNode.parentNode,
1708
+ tryBranch.___startNode
1709
+ );
1710
+ tempDetatchBranch(tryBranch);
1711
+ }
1712
+ });
1713
+ }
1714
+ tryBranch["." /* PendingCount */]++;
1715
+ } else if (awaitBranch) {
1716
+ awaitBranch.___startNode.parentNode.insertBefore(
1717
+ referenceNode,
1718
+ awaitBranch.___startNode
1719
+ );
1720
+ tempDetatchBranch(awaitBranch);
1721
+ }
1722
+ };
1723
+ }
1724
+ function createTry(nodeAccessor, tryContent) {
1725
+ const branchAccessor = nodeAccessor + "!" /* ConditionalScope */;
1726
+ return (scope, input) => {
1727
+ if (!scope[branchAccessor]) {
1728
+ setConditionalRenderer(
1729
+ scope,
1730
+ nodeAccessor,
1731
+ tryContent,
1732
+ createAndSetupBranch
1733
+ );
1734
+ }
1735
+ const branch = scope[branchAccessor];
1736
+ if (branch) {
1737
+ branch["*" /* BranchAccessor */] = nodeAccessor;
1738
+ branch["^" /* CatchContent */] = normalizeDynamicRenderer(input.catch);
1739
+ branch["%" /* PlaceholderContent */] = normalizeDynamicRenderer(
1740
+ input.placeholder
1741
+ );
1742
+ }
1743
+ };
1744
+ }
1735
1745
  function conditional(nodeAccessor, ...branches) {
1736
1746
  const branchAccessor = nodeAccessor + "(" /* ConditionalRenderer */;
1737
1747
  return (scope, newBranch) => {
@@ -1927,6 +1937,161 @@ function byFirstArg(name) {
1927
1937
  return name;
1928
1938
  }
1929
1939
 
1940
+ // src/dom/queue.ts
1941
+ var pendingRenders = [];
1942
+ var pendingRendersLookup = /* @__PURE__ */ new Map();
1943
+ var pendingEffects = [];
1944
+ var rendering = false;
1945
+ var scopeKeyOffset = 1e3;
1946
+ function queueRender(scope, signal, signalKey, value2, scopeKey = scope.___id) {
1947
+ const key = scopeKey * scopeKeyOffset + signalKey;
1948
+ const existingRender = signalKey >= 0 && pendingRendersLookup.get(key);
1949
+ if (existingRender) {
1950
+ existingRender.___value = value2;
1951
+ } else {
1952
+ const render = {
1953
+ ___key: key,
1954
+ ___scope: scope,
1955
+ ___signal: signal,
1956
+ ___value: value2
1957
+ };
1958
+ let i = pendingRenders.push(render) - 1;
1959
+ while (i) {
1960
+ const parentIndex = i - 1 >> 1;
1961
+ const parent = pendingRenders[parentIndex];
1962
+ if (key - parent.___key >= 0) break;
1963
+ pendingRenders[i] = parent;
1964
+ i = parentIndex;
1965
+ }
1966
+ signalKey >= 0 && pendingRendersLookup.set(key, render);
1967
+ pendingRenders[i] = render;
1968
+ }
1969
+ }
1970
+ function queueEffect(scope, fn) {
1971
+ pendingEffects.push(fn, scope);
1972
+ }
1973
+ function run() {
1974
+ const effects = pendingEffects;
1975
+ try {
1976
+ rendering = true;
1977
+ runRenders();
1978
+ } finally {
1979
+ pendingRenders = [];
1980
+ pendingRendersLookup = /* @__PURE__ */ new Map();
1981
+ pendingEffects = [];
1982
+ rendering = false;
1983
+ }
1984
+ runEffects(effects);
1985
+ }
1986
+ function prepareEffects(fn) {
1987
+ const prevRenders = pendingRenders;
1988
+ const prevRendersLookup = pendingRendersLookup;
1989
+ const prevEffects = pendingEffects;
1990
+ const preparedEffects = pendingEffects = [];
1991
+ pendingRenders = [];
1992
+ pendingRendersLookup = /* @__PURE__ */ new Map();
1993
+ try {
1994
+ rendering = true;
1995
+ fn();
1996
+ runRenders();
1997
+ } finally {
1998
+ rendering = false;
1999
+ pendingRenders = prevRenders;
2000
+ pendingRendersLookup = prevRendersLookup;
2001
+ pendingEffects = prevEffects;
2002
+ }
2003
+ return preparedEffects;
2004
+ }
2005
+ function runEffects(effects) {
2006
+ for (let i = 0, scope; i < effects.length; ) {
2007
+ effects[i++](
2008
+ scope = effects[i++],
2009
+ scope
2010
+ );
2011
+ }
2012
+ }
2013
+ function runRenders() {
2014
+ while (pendingRenders.length) {
2015
+ const render = pendingRenders[0];
2016
+ const item = pendingRenders.pop();
2017
+ if (render !== item) {
2018
+ let i = 0;
2019
+ const mid = pendingRenders.length >> 1;
2020
+ const key = (pendingRenders[0] = item).___key;
2021
+ while (i < mid) {
2022
+ let bestChild = (i << 1) + 1;
2023
+ const right = bestChild + 1;
2024
+ if (right < pendingRenders.length && pendingRenders[right].___key - pendingRenders[bestChild].___key < 0) {
2025
+ bestChild = right;
2026
+ }
2027
+ if (pendingRenders[bestChild].___key - key >= 0) {
2028
+ break;
2029
+ } else {
2030
+ pendingRenders[i] = pendingRenders[bestChild];
2031
+ i = bestChild;
2032
+ }
2033
+ }
2034
+ pendingRenders[i] = item;
2035
+ }
2036
+ if (!render.___scope.___closestBranch?.___destroyed) {
2037
+ runRender(render);
2038
+ }
2039
+ }
2040
+ finishPendingScopes();
2041
+ }
2042
+ var runRender = (render) => render.___signal(render.___scope, render.___value);
2043
+ var enableCatch = () => {
2044
+ enableCatch = () => {
2045
+ };
2046
+ runRender = /* @__PURE__ */ ((runRender2) => (render) => {
2047
+ try {
2048
+ runRender2(render);
2049
+ } catch (error) {
2050
+ let branch = render.___scope.___closestBranch;
2051
+ while (branch && !branch["^" /* CatchContent */])
2052
+ branch = branch.___parentBranch;
2053
+ if (!branch) {
2054
+ throw error;
2055
+ } else {
2056
+ setConditionalRenderer(
2057
+ branch._,
2058
+ branch["*" /* BranchAccessor */],
2059
+ branch["^" /* CatchContent */],
2060
+ createAndSetupBranch
2061
+ );
2062
+ branch["^" /* CatchContent */].___params?.(
2063
+ branch._[branch["*" /* BranchAccessor */] + "!" /* ConditionalScope */],
2064
+ [error]
2065
+ );
2066
+ }
2067
+ }
2068
+ })(runRender);
2069
+ };
2070
+
2071
+ // src/dom/abort-signal.ts
2072
+ function resetAbortSignal(scope, id) {
2073
+ const ctrl = scope.___abortControllers?.[id];
2074
+ if (ctrl) {
2075
+ queueEffect(ctrl, abort);
2076
+ scope.___abortControllers[id] = void 0;
2077
+ }
2078
+ }
2079
+ function getAbortSignal(scope, id) {
2080
+ if (scope.___closestBranch) {
2081
+ (scope.___closestBranch.___abortScopes ||= /* @__PURE__ */ new Set()).add(scope);
2082
+ }
2083
+ return ((scope.___abortControllers ||= {})[id] ||= new AbortController()).signal;
2084
+ }
2085
+ function abort(ctrl) {
2086
+ ctrl.abort();
2087
+ }
2088
+
2089
+ // src/common/compat-meta.ts
2090
+ var prefix = true ? "$compat_" : "$C_";
2091
+ var RENDERER_REGISTER_ID = prefix + (true ? "renderer" : "r");
2092
+ var SET_SCOPE_REGISTER_ID = prefix + (true ? "setScope" : "s");
2093
+ var RENDER_BODY_ID = prefix + (true ? "renderBody" : "b");
2094
+
1930
2095
  // src/dom/compat.ts
1931
2096
  var classIdToBranch = /* @__PURE__ */ new Map();
1932
2097
  var compat = {