valyrian.js 7.2.11 → 8.0.0

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.
Files changed (165) hide show
  1. package/README.md +6 -6
  2. package/dist/flux-store/index.d.ts +32 -0
  3. package/dist/flux-store/index.d.ts.map +1 -0
  4. package/dist/flux-store/index.js +258 -0
  5. package/dist/flux-store/index.js.map +7 -0
  6. package/dist/flux-store/index.min.js +1 -0
  7. package/dist/flux-store/index.min.js.map +1 -0
  8. package/dist/flux-store/index.mjs +237 -0
  9. package/dist/flux-store/index.mjs.map +7 -0
  10. package/dist/hooks/index.d.ts.map +1 -1
  11. package/dist/hooks/index.js +42 -75
  12. package/dist/hooks/index.js.map +2 -2
  13. package/dist/hooks/index.min.js +1 -0
  14. package/dist/hooks/index.min.js.map +1 -0
  15. package/dist/hooks/index.mjs +43 -76
  16. package/dist/hooks/index.mjs.map +2 -2
  17. package/dist/index.d.ts +52 -54
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +397 -328
  20. package/dist/index.js.map +3 -3
  21. package/dist/index.min.js +1 -1
  22. package/dist/index.min.js.map +1 -1
  23. package/dist/index.mjs +397 -328
  24. package/dist/index.mjs.map +3 -3
  25. package/dist/native-store/index.d.ts +14 -0
  26. package/dist/native-store/index.d.ts.map +1 -0
  27. package/dist/native-store/index.js +103 -0
  28. package/dist/native-store/index.js.map +7 -0
  29. package/dist/native-store/index.min.js +1 -0
  30. package/dist/native-store/index.min.js.map +1 -0
  31. package/dist/native-store/index.mjs +82 -0
  32. package/dist/native-store/index.mjs.map +7 -0
  33. package/dist/node/index.d.ts.map +1 -1
  34. package/dist/node/index.js +223 -86
  35. package/dist/node/index.js.map +4 -4
  36. package/dist/node/index.mjs +223 -86
  37. package/dist/node/index.mjs.map +4 -4
  38. package/dist/node/node.sw.js +152 -0
  39. package/dist/node/utils/inline.d.ts.map +1 -1
  40. package/dist/node/utils/node.sw.js +152 -0
  41. package/dist/node/utils/session-storage.d.ts +22 -0
  42. package/dist/node/utils/session-storage.d.ts.map +1 -0
  43. package/dist/node/utils/sw.d.ts.map +1 -1
  44. package/dist/node/utils/tree-adapter.d.ts +9 -0
  45. package/dist/node/utils/tree-adapter.d.ts.map +1 -1
  46. package/dist/pulse-store/index.d.ts +13 -0
  47. package/dist/pulse-store/index.d.ts.map +1 -0
  48. package/dist/pulse-store/index.js +143 -0
  49. package/dist/pulse-store/index.js.map +7 -0
  50. package/dist/pulse-store/index.min.js +1 -0
  51. package/dist/pulse-store/index.min.js.map +1 -0
  52. package/dist/pulse-store/index.mjs +122 -0
  53. package/dist/pulse-store/index.mjs.map +7 -0
  54. package/dist/request/index.d.ts.map +1 -1
  55. package/dist/request/index.js +68 -89
  56. package/dist/request/index.js.map +2 -2
  57. package/dist/request/index.min.js +1 -0
  58. package/dist/request/index.min.js.map +1 -0
  59. package/dist/request/index.mjs +68 -89
  60. package/dist/request/index.mjs.map +2 -2
  61. package/dist/router/index.d.ts +32 -31
  62. package/dist/router/index.d.ts.map +1 -1
  63. package/dist/router/index.js +256 -104
  64. package/dist/router/index.js.map +3 -3
  65. package/dist/router/index.min.js +1 -0
  66. package/dist/router/index.min.js.map +1 -0
  67. package/dist/router/index.mjs +256 -104
  68. package/dist/router/index.mjs.map +3 -3
  69. package/dist/signals/index.d.ts +6 -0
  70. package/dist/signals/index.d.ts.map +1 -0
  71. package/dist/signals/index.js +92 -0
  72. package/dist/signals/index.js.map +7 -0
  73. package/dist/signals/index.min.js +1 -0
  74. package/dist/signals/index.min.js.map +1 -0
  75. package/dist/signals/index.mjs +71 -0
  76. package/dist/signals/index.mjs.map +7 -0
  77. package/dist/suspense/index.d.ts +6 -0
  78. package/dist/suspense/index.d.ts.map +1 -0
  79. package/dist/suspense/index.js +67 -0
  80. package/dist/suspense/index.js.map +7 -0
  81. package/dist/suspense/index.min.js +1 -0
  82. package/dist/suspense/index.min.js.map +1 -0
  83. package/dist/suspense/index.mjs +46 -0
  84. package/dist/suspense/index.mjs.map +7 -0
  85. package/dist/sw/index.min.js +1 -0
  86. package/dist/sw/index.min.js.map +1 -0
  87. package/dist/translate/index.d.ts +19 -0
  88. package/dist/translate/index.d.ts.map +1 -0
  89. package/dist/translate/index.js +150 -0
  90. package/dist/translate/index.js.map +7 -0
  91. package/dist/translate/index.min.js +1 -0
  92. package/dist/translate/index.min.js.map +1 -0
  93. package/dist/translate/index.mjs +129 -0
  94. package/dist/translate/index.mjs.map +7 -0
  95. package/dist/tsconfig.tsbuildinfo +1 -1
  96. package/dist/utils/deep-freeze.d.ts +3 -0
  97. package/dist/utils/deep-freeze.d.ts.map +1 -0
  98. package/dist/utils/getter-setter.d.ts +3 -0
  99. package/dist/utils/getter-setter.d.ts.map +1 -0
  100. package/dist/utils/has-changed.d.ts +2 -0
  101. package/dist/utils/has-changed.d.ts.map +1 -0
  102. package/dist/utils/index.d.ts +4 -0
  103. package/dist/utils/index.d.ts.map +1 -0
  104. package/dist/utils/index.js +138 -0
  105. package/dist/utils/index.js.map +7 -0
  106. package/dist/utils/index.min.js +1 -0
  107. package/dist/utils/index.min.js.map +1 -0
  108. package/dist/utils/index.mjs +115 -0
  109. package/dist/utils/index.mjs.map +7 -0
  110. package/lib/flux-store/index.ts +301 -0
  111. package/lib/hooks/index.ts +52 -101
  112. package/lib/index.ts +479 -719
  113. package/lib/native-store/index.ts +106 -0
  114. package/lib/node/index.ts +5 -3
  115. package/lib/node/utils/icons.ts +5 -5
  116. package/lib/node/utils/inline.ts +17 -17
  117. package/lib/node/utils/node.sw.js +152 -0
  118. package/lib/node/utils/session-storage.ts +117 -0
  119. package/lib/node/utils/sw.ts +35 -11
  120. package/lib/node/utils/tree-adapter.ts +99 -52
  121. package/lib/pulse-store/index.ts +181 -0
  122. package/lib/request/index.ts +86 -116
  123. package/lib/router/index.ts +358 -170
  124. package/lib/signals/index.ts +98 -0
  125. package/lib/suspense/index.ts +57 -0
  126. package/lib/translate/index.ts +156 -0
  127. package/lib/utils/deep-freeze.ts +54 -0
  128. package/lib/utils/getter-setter.ts +40 -0
  129. package/lib/utils/has-changed.ts +43 -0
  130. package/lib/utils/index.ts +3 -0
  131. package/package.json +38 -50
  132. package/tsconfig.json +1 -1
  133. package/dist/dataset/index.d.ts +0 -24
  134. package/dist/dataset/index.d.ts.map +0 -1
  135. package/dist/dataset/index.js +0 -178
  136. package/dist/dataset/index.js.map +0 -7
  137. package/dist/dataset/index.mjs +0 -157
  138. package/dist/dataset/index.mjs.map +0 -7
  139. package/dist/node/node.sw.tpl +0 -133
  140. package/dist/node/utils/node.sw.tpl +0 -133
  141. package/dist/proxy-signal/index.d.ts +0 -23
  142. package/dist/proxy-signal/index.d.ts.map +0 -1
  143. package/dist/proxy-signal/index.js +0 -138
  144. package/dist/proxy-signal/index.js.map +0 -7
  145. package/dist/proxy-signal/index.mjs +0 -117
  146. package/dist/proxy-signal/index.mjs.map +0 -7
  147. package/dist/signal/index.d.ts +0 -20
  148. package/dist/signal/index.d.ts.map +0 -1
  149. package/dist/signal/index.js +0 -95
  150. package/dist/signal/index.js.map +0 -7
  151. package/dist/signal/index.mjs +0 -74
  152. package/dist/signal/index.mjs.map +0 -7
  153. package/dist/store/index.d.ts +0 -16
  154. package/dist/store/index.d.ts.map +0 -1
  155. package/dist/store/index.js +0 -93
  156. package/dist/store/index.js.map +0 -7
  157. package/dist/store/index.mjs +0 -72
  158. package/dist/store/index.mjs.map +0 -7
  159. package/lib/dataset/index.ts +0 -193
  160. package/lib/index.d.ts +0 -0
  161. package/lib/interfaces.ts.bak +0 -141
  162. package/lib/node/utils/node.sw.tpl +0 -133
  163. package/lib/proxy-signal/index.ts +0 -187
  164. package/lib/signal/index.ts +0 -161
  165. package/lib/store/index.ts +0 -101
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // lib/signals/index.ts
21
+ var signals_exports = {};
22
+ __export(signals_exports, {
23
+ createEffect: () => createEffect,
24
+ createSignal: () => createSignal,
25
+ createSignalStore: () => createSignalStore
26
+ });
27
+ module.exports = __toCommonJS(signals_exports);
28
+ var import_valyrian = require("valyrian.js");
29
+ var import_utils = require("valyrian.js/utils");
30
+ var effectStack = [];
31
+ function createSignal(initialValue) {
32
+ let value = initialValue;
33
+ const subscribers = /* @__PURE__ */ new Set();
34
+ const vnodesToUpdate = /* @__PURE__ */ new WeakSet();
35
+ const runSubscribers = () => subscribers.forEach((subscriber) => subscriber());
36
+ const read = () => {
37
+ const currentEffect = effectStack[effectStack.length - 1];
38
+ if (currentEffect && !subscribers.has(currentEffect)) {
39
+ subscribers.add(currentEffect);
40
+ }
41
+ const currentVnode = import_valyrian.current.vnode;
42
+ if (currentVnode && !vnodesToUpdate.has(currentVnode)) {
43
+ const subscription = () => {
44
+ if (!currentVnode.dom) {
45
+ subscribers.delete(subscription);
46
+ vnodesToUpdate.delete(currentVnode);
47
+ return;
48
+ }
49
+ (0, import_valyrian.updateVnode)(currentVnode);
50
+ };
51
+ subscribers.add(subscription);
52
+ vnodesToUpdate.add(currentVnode);
53
+ }
54
+ return value;
55
+ };
56
+ const write = (newValue) => {
57
+ const resolvedValue = typeof newValue === "function" ? newValue(value) : newValue;
58
+ if (import_valyrian.current.event && !import_valyrian.current.event.defaultPrevented) {
59
+ import_valyrian.current.event.preventDefault();
60
+ }
61
+ if (!(0, import_utils.hasChanged)(value, resolvedValue)) {
62
+ return;
63
+ }
64
+ value = resolvedValue;
65
+ runSubscribers();
66
+ };
67
+ return [read, write, runSubscribers];
68
+ }
69
+ function createEffect(effect) {
70
+ const runEffect = () => {
71
+ try {
72
+ effectStack.push(runEffect);
73
+ effect();
74
+ } finally {
75
+ effectStack.pop();
76
+ }
77
+ };
78
+ runEffect();
79
+ }
80
+ function createSignalStore(initialState) {
81
+ const [state, , runSubscribers] = createSignal(initialState);
82
+ const setter = (path, newValue) => {
83
+ const current2 = (0, import_utils.get)(initialState, path);
84
+ const resolvedValue = typeof newValue === "function" ? newValue(current2) : newValue;
85
+ if (!(0, import_utils.hasChanged)(current2, resolvedValue)) {
86
+ return;
87
+ }
88
+ (0, import_utils.set)(initialState, path, resolvedValue);
89
+ runSubscribers();
90
+ };
91
+ return [state, setter];
92
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../lib/signals/index.ts"],
4
+ "sourcesContent": ["import { current, updateVnode, Vnode, VnodeWithDom } from \"valyrian.js\";\nimport { get, set, hasChanged } from \"valyrian.js/utils\";\n\nconst effectStack: Function[] = [];\n\n// eslint-disable-next-line no-unused-vars\nexport type Signal<T> = [() => T, (newValue: T | ((current: T) => T)) => void, () => void];\n\nexport function createSignal<T>(initialValue: T): Signal<T> {\n let value = initialValue;\n const subscribers = new Set<Function>();\n const vnodesToUpdate = new WeakSet<Vnode>();\n\n const runSubscribers = () => subscribers.forEach((subscriber) => subscriber());\n\n const read = () => {\n const currentEffect = effectStack[effectStack.length - 1];\n if (currentEffect && !subscribers.has(currentEffect)) {\n subscribers.add(currentEffect);\n }\n\n const currentVnode = current.vnode as VnodeWithDom;\n if (currentVnode && !vnodesToUpdate.has(currentVnode)) {\n const subscription = () => {\n if (!currentVnode.dom) {\n subscribers.delete(subscription);\n vnodesToUpdate.delete(currentVnode);\n return;\n }\n updateVnode(currentVnode);\n };\n\n subscribers.add(subscription);\n vnodesToUpdate.add(currentVnode);\n }\n\n return value;\n };\n\n // eslint-disable-next-line no-unused-vars\n const write = (newValue: T | ((current: T) => T)) => {\n // eslint-disable-next-line no-unused-vars\n const resolvedValue = typeof newValue === \"function\" ? (newValue as (current: T) => T)(value) : newValue;\n\n if (current.event && !current.event.defaultPrevented) {\n current.event.preventDefault();\n }\n\n if (!hasChanged(value, resolvedValue)) {\n return;\n }\n\n value = resolvedValue;\n\n runSubscribers();\n };\n\n return [read, write, runSubscribers];\n}\n\nexport function createEffect(effect: Function) {\n const runEffect = () => {\n try {\n effectStack.push(runEffect);\n effect();\n } finally {\n effectStack.pop();\n }\n };\n\n runEffect();\n}\n\n// Path is a string with dot notation, e.g:\n// 'a.b.c' === obj.a.b.c\n// 'a.0.c' === obj.a[0].c\n// eslint-disable-next-line no-unused-vars\nexport type SignalStore<T> = [() => T, (path: string, newValue: T | ((current: T) => T)) => void];\n\nexport function createSignalStore<T>(initialState: T): SignalStore<T> {\n const [state, , runSubscribers] = createSignal(initialState);\n\n // eslint-disable-next-line no-unused-vars\n const setter = (path: string, newValue: T | ((current: T) => T)) => {\n const current = get(initialState, path);\n // eslint-disable-next-line no-unused-vars\n const resolvedValue = typeof newValue === \"function\" ? (newValue as (current: T) => T)(current) : newValue;\n\n if (!hasChanged(current, resolvedValue)) {\n return;\n }\n\n set(initialState, path, resolvedValue);\n runSubscribers();\n };\n\n return [state, setter];\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAA0D;AAC1D,mBAAqC;AAErC,IAAM,cAA0B,CAAC;AAK1B,SAAS,aAAgB,cAA4B;AAC1D,MAAI,QAAQ;AACZ,QAAM,cAAc,oBAAI,IAAc;AACtC,QAAM,iBAAiB,oBAAI,QAAe;AAE1C,QAAM,iBAAiB,MAAM,YAAY,QAAQ,CAAC,eAAe,WAAW,CAAC;AAE7E,QAAM,OAAO,MAAM;AACjB,UAAM,gBAAgB,YAAY,YAAY,SAAS,CAAC;AACxD,QAAI,iBAAiB,CAAC,YAAY,IAAI,aAAa,GAAG;AACpD,kBAAY,IAAI,aAAa;AAAA,IAC/B;AAEA,UAAM,eAAe,wBAAQ;AAC7B,QAAI,gBAAgB,CAAC,eAAe,IAAI,YAAY,GAAG;AACrD,YAAM,eAAe,MAAM;AACzB,YAAI,CAAC,aAAa,KAAK;AACrB,sBAAY,OAAO,YAAY;AAC/B,yBAAe,OAAO,YAAY;AAClC;AAAA,QACF;AACA,yCAAY,YAAY;AAAA,MAC1B;AAEA,kBAAY,IAAI,YAAY;AAC5B,qBAAe,IAAI,YAAY;AAAA,IACjC;AAEA,WAAO;AAAA,EACT;AAGA,QAAM,QAAQ,CAAC,aAAsC;AAEnD,UAAM,gBAAgB,OAAO,aAAa,aAAc,SAA+B,KAAK,IAAI;AAEhG,QAAI,wBAAQ,SAAS,CAAC,wBAAQ,MAAM,kBAAkB;AACpD,8BAAQ,MAAM,eAAe;AAAA,IAC/B;AAEA,QAAI,KAAC,yBAAW,OAAO,aAAa,GAAG;AACrC;AAAA,IACF;AAEA,YAAQ;AAER,mBAAe;AAAA,EACjB;AAEA,SAAO,CAAC,MAAM,OAAO,cAAc;AACrC;AAEO,SAAS,aAAa,QAAkB;AAC7C,QAAM,YAAY,MAAM;AACtB,QAAI;AACF,kBAAY,KAAK,SAAS;AAC1B,aAAO;AAAA,IACT,UAAE;AACA,kBAAY,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,YAAU;AACZ;AAQO,SAAS,kBAAqB,cAAiC;AACpE,QAAM,CAAC,OAAO,EAAE,cAAc,IAAI,aAAa,YAAY;AAG3D,QAAM,SAAS,CAAC,MAAc,aAAsC;AAClE,UAAMA,eAAU,kBAAI,cAAc,IAAI;AAEtC,UAAM,gBAAgB,OAAO,aAAa,aAAc,SAA+BA,QAAO,IAAI;AAElG,QAAI,KAAC,yBAAWA,UAAS,aAAa,GAAG;AACvC;AAAA,IACF;AAEA,0BAAI,cAAc,MAAM,aAAa;AACrC,mBAAe;AAAA,EACjB;AAEA,SAAO,CAAC,OAAO,MAAM;AACvB;",
6
+ "names": ["current"]
7
+ }
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,o={};((t,n)=>{for(var r in n)e(t,r,{get:n[r],enumerable:!0})})(o,{createEffect:()=>i,createSignal:()=>s,createSignalStore:()=>d});var a,c=(a=o,((o,a,c,u)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let f of n(a))r.call(o,f)||f===c||e(o,f,{get:()=>a[f],enumerable:!(u=t(a,f))||u.enumerable});return o})(e({},"__esModule",{value:!0}),a)),u=require("valyrian.js"),f=require("valyrian.js/utils"),l=[];function s(e){let t=e;const n=new Set,r=new WeakSet,o=()=>n.forEach(e=>e());return[()=>{const e=l[l.length-1];e&&!n.has(e)&&n.add(e);const o=u.current.vnode;if(o&&!r.has(o)){const e=()=>{if(!o.dom)return n.delete(e),void r.delete(o);(0,u.updateVnode)(o)};n.add(e),r.add(o)}return t},e=>{const n="function"==typeof e?e(t):e;u.current.event&&!u.current.event.defaultPrevented&&u.current.event.preventDefault(),(0,f.hasChanged)(t,n)&&(t=n,o())},o]}function i(e){const t=()=>{try{l.push(t),e()}finally{l.pop()}};t()}function d(e){const[t,,n]=s(e);return[t,(t,r)=>{const o=(0,f.get)(e,t),a="function"==typeof r?r(o):r;(0,f.hasChanged)(o,a)&&((0,f.set)(e,t,a),n())}]}"undefined"!=typeof module?module.exports=c:self.ValyrianSignals=c})();//# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzaWduYWxzX2V4cG9ydHMiLCJfX2V4cG9ydCIsImNyZWF0ZUVmZmVjdCIsImNyZWF0ZVNpZ25hbCIsImNyZWF0ZVNpZ25hbFN0b3JlIiwiX19FWFBPUlRTX18iLCJpbXBvcnRfdmFseXJpYW4iLCJyZXF1aXJlIiwiaW1wb3J0X3V0aWxzIiwiZWZmZWN0U3RhY2siLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSIsInN1YnNjcmliZXJzIiwiU2V0Iiwidm5vZGVzVG9VcGRhdGUiLCJXZWFrU2V0IiwicnVuU3Vic2NyaWJlcnMiLCJmb3JFYWNoIiwic3Vic2NyaWJlciIsImN1cnJlbnRFZmZlY3QiLCJsZW5ndGgiLCJoYXMiLCJhZGQiLCJjdXJyZW50Vm5vZGUiLCJjdXJyZW50Iiwidm5vZGUiLCJzdWJzY3JpcHRpb24iLCJkb20iLCJkZWxldGUiLCJ1cGRhdGVWbm9kZSIsIm5ld1ZhbHVlIiwicmVzb2x2ZWRWYWx1ZSIsImV2ZW50IiwiZGVmYXVsdFByZXZlbnRlZCIsInByZXZlbnREZWZhdWx0IiwiaGFzQ2hhbmdlZCIsImVmZmVjdCIsInJ1bkVmZmVjdCIsInB1c2giLCJwb3AiLCJpbml0aWFsU3RhdGUiLCJzdGF0ZSIsInBhdGgiLCJnZXQiLCJzZXQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvc2lnbmFscy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjdXJyZW50LCB1cGRhdGVWbm9kZSwgVm5vZGUsIFZub2RlV2l0aERvbSB9IGZyb20gXCJ2YWx5cmlhbi5qc1wiO1xuaW1wb3J0IHsgZ2V0LCBzZXQsIGhhc0NoYW5nZWQgfSBmcm9tIFwidmFseXJpYW4uanMvdXRpbHNcIjtcblxuY29uc3QgZWZmZWN0U3RhY2s6IEZ1bmN0aW9uW10gPSBbXTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgdHlwZSBTaWduYWw8VD4gPSBbKCkgPT4gVCwgKG5ld1ZhbHVlOiBUIHwgKChjdXJyZW50OiBUKSA9PiBUKSkgPT4gdm9pZCwgKCkgPT4gdm9pZF07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaWduYWw8VD4oaW5pdGlhbFZhbHVlOiBUKTogU2lnbmFsPFQ+IHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICBjb25zdCBzdWJzY3JpYmVycyA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG4gIGNvbnN0IHZub2Rlc1RvVXBkYXRlID0gbmV3IFdlYWtTZXQ8Vm5vZGU+KCk7XG5cbiAgY29uc3QgcnVuU3Vic2NyaWJlcnMgPSAoKSA9PiBzdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiBzdWJzY3JpYmVyKCkpO1xuXG4gIGNvbnN0IHJlYWQgPSAoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEVmZmVjdCA9IGVmZmVjdFN0YWNrW2VmZmVjdFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmIChjdXJyZW50RWZmZWN0ICYmICFzdWJzY3JpYmVycy5oYXMoY3VycmVudEVmZmVjdCkpIHtcbiAgICAgIHN1YnNjcmliZXJzLmFkZChjdXJyZW50RWZmZWN0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Vm5vZGUgPSBjdXJyZW50LnZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgICBpZiAoY3VycmVudFZub2RlICYmICF2bm9kZXNUb1VwZGF0ZS5oYXMoY3VycmVudFZub2RlKSkge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWN1cnJlbnRWbm9kZS5kb20pIHtcbiAgICAgICAgICBzdWJzY3JpYmVycy5kZWxldGUoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICB2bm9kZXNUb1VwZGF0ZS5kZWxldGUoY3VycmVudFZub2RlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlVm5vZGUoY3VycmVudFZub2RlKTtcbiAgICAgIH07XG5cbiAgICAgIHN1YnNjcmliZXJzLmFkZChzdWJzY3JpcHRpb24pO1xuICAgICAgdm5vZGVzVG9VcGRhdGUuYWRkKGN1cnJlbnRWbm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBjb25zdCB3cml0ZSA9IChuZXdWYWx1ZTogVCB8ICgoY3VycmVudDogVCkgPT4gVCkpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlID0gdHlwZW9mIG5ld1ZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyAobmV3VmFsdWUgYXMgKGN1cnJlbnQ6IFQpID0+IFQpKHZhbHVlKSA6IG5ld1ZhbHVlO1xuXG4gICAgaWYgKGN1cnJlbnQuZXZlbnQgJiYgIWN1cnJlbnQuZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgY3VycmVudC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmICghaGFzQ2hhbmdlZCh2YWx1ZSwgcmVzb2x2ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IHJlc29sdmVkVmFsdWU7XG5cbiAgICBydW5TdWJzY3JpYmVycygpO1xuICB9O1xuXG4gIHJldHVybiBbcmVhZCwgd3JpdGUsIHJ1blN1YnNjcmliZXJzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVmZmVjdChlZmZlY3Q6IEZ1bmN0aW9uKSB7XG4gIGNvbnN0IHJ1bkVmZmVjdCA9ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgZWZmZWN0U3RhY2sucHVzaChydW5FZmZlY3QpO1xuICAgICAgZWZmZWN0KCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVmZmVjdFN0YWNrLnBvcCgpO1xuICAgIH1cbiAgfTtcblxuICBydW5FZmZlY3QoKTtcbn1cblxuLy8gUGF0aCBpcyBhIHN0cmluZyB3aXRoIGRvdCBub3RhdGlvbiwgZS5nOlxuLy8gJ2EuYi5jJyA9PT0gb2JqLmEuYi5jXG4vLyAnYS4wLmMnID09PSBvYmouYVswXS5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmV4cG9ydCB0eXBlIFNpZ25hbFN0b3JlPFQ+ID0gWygpID0+IFQsIChwYXRoOiBzdHJpbmcsIG5ld1ZhbHVlOiBUIHwgKChjdXJyZW50OiBUKSA9PiBUKSkgPT4gdm9pZF07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaWduYWxTdG9yZTxUPihpbml0aWFsU3RhdGU6IFQpOiBTaWduYWxTdG9yZTxUPiB7XG4gIGNvbnN0IFtzdGF0ZSwgLCBydW5TdWJzY3JpYmVyc10gPSBjcmVhdGVTaWduYWwoaW5pdGlhbFN0YXRlKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgY29uc3Qgc2V0dGVyID0gKHBhdGg6IHN0cmluZywgbmV3VmFsdWU6IFQgfCAoKGN1cnJlbnQ6IFQpID0+IFQpKSA9PiB7XG4gICAgY29uc3QgY3VycmVudCA9IGdldChpbml0aWFsU3RhdGUsIHBhdGgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHJlc29sdmVkVmFsdWUgPSB0eXBlb2YgbmV3VmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IChuZXdWYWx1ZSBhcyAoY3VycmVudDogVCkgPT4gVCkoY3VycmVudCkgOiBuZXdWYWx1ZTtcblxuICAgIGlmICghaGFzQ2hhbmdlZChjdXJyZW50LCByZXNvbHZlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldChpbml0aWFsU3RhdGUsIHBhdGgsIHJlc29sdmVkVmFsdWUpO1xuICAgIHJ1blN1YnNjcmliZXJzKCk7XG4gIH07XG5cbiAgcmV0dXJuIFtzdGF0ZSwgc2V0dGVyXTtcbn1cbiJdLCJtYXBwaW5ncyI6ImdKQUFBQSxFQUFBLEcseURBQUFDLENBQUFELEVBQUEsQ0FBQUUsYUFBQSxJQUFBQSxFQUFBQyxhQUFBLElBQUFBLEVBQUFDLGtCQUFBLElBQUFBLElBQUEsSSxFQUFBQyxHLEVBQUFMLEUsME1BQUFNLEVBQTBEQyxRQUFBLGVBQzFEQyxFQUFxQ0QsUUFBQSxxQkFFL0JFLEVBQTBCLEdBS3pCLFNBQVNOLEVBQWdCTyxHQUM5QixJQUFJQyxFQUFRRCxFQUNaLE1BQU1FLEVBQWMsSUFBSUMsSUFDbEJDLEVBQWlCLElBQUlDLFFBRXJCQyxFQUFpQixJQUFNSixFQUFZSyxRQUFTQyxHQUFlQSxLQTRDakUsTUFBTyxDQTFDTSxLQUNYLE1BQU1DLEVBQWdCVixFQUFZQSxFQUFZVyxPQUFTLEdBQ25ERCxJQUFrQlAsRUFBWVMsSUFBSUYsSUFDcENQLEVBQVlVLElBQUlILEdBR2xCLE1BQU1JLEVBQWVqQixFQUFBa0IsUUFBUUMsTUFDN0IsR0FBSUYsSUFBaUJULEVBQWVPLElBQUlFLEdBQWUsQ0FDckQsTUFBTUcsRUFBZSxLQUNuQixJQUFLSCxFQUFhSSxJQUdoQixPQUZBZixFQUFZZ0IsT0FBT0YsUUFDbkJaLEVBQWVjLE9BQU9MLElBR3hCLEVBQUFqQixFQUFBdUIsYUFBWU4sRUFBWSxFQUcxQlgsRUFBWVUsSUFBSUksR0FDaEJaLEVBQWVRLElBQUlDLEVBQ3JCLENBRUEsT0FBT1osQ0FBQSxFQUlNbUIsSUFFYixNQUFNQyxFQUFvQyxtQkFBYkQsRUFBMkJBLEVBQStCbkIsR0FBU21CLEVBRTVGeEIsRUFBQWtCLFFBQVFRLFFBQVUxQixFQUFBa0IsUUFBUVEsTUFBTUMsa0JBQ2xDM0IsRUFBQWtCLFFBQVFRLE1BQU1FLGtCQUdaLEVBQUMxQixFQUFBMkIsWUFBV3hCLEVBQU9vQixLQUl2QnBCLEVBQVFvQixFQUVSZixJQUFlLEVBR0lBLEVBQ3ZCLENBRU8sU0FBU2QsRUFBYWtDLEdBQzNCLE1BQU1DLEVBQVksS0FDaEIsSUFDRTVCLEVBQVk2QixLQUFLRCxHQUNqQkQsR0FDRixTQUNFM0IsRUFBWThCLEtBQ2QsR0FHRkYsR0FDRixDQVFPLFNBQVNqQyxFQUFxQm9DLEdBQ25DLE1BQU9DLEVBQU8sQ0FBRXpCLEdBQWtCYixFQUFhcUMsR0FnQi9DLE1BQU8sQ0FBQ0MsRUFiTyxDQUFDQyxFQUFjWixLQUM1QixNQUFNTixLQUFVaEIsRUFBQW1DLEtBQUlILEVBQWNFLEdBRTVCWCxFQUFvQyxtQkFBYkQsRUFBMkJBLEVBQStCTixHQUFXTSxHQUU5RixFQUFDdEIsRUFBQTJCLFlBQVdYLEVBQVNPLE1BSXpCLEVBQUF2QixFQUFBb0MsS0FBSUosRUFBY0UsRUFBTVgsR0FDeEJmLElBQWUsRUFJbkIsQyJ9
@@ -0,0 +1,71 @@
1
+ // lib/signals/index.ts
2
+ import { current, updateVnode } from "valyrian.js";
3
+ import { get, set, hasChanged } from "valyrian.js/utils";
4
+ var effectStack = [];
5
+ function createSignal(initialValue) {
6
+ let value = initialValue;
7
+ const subscribers = /* @__PURE__ */ new Set();
8
+ const vnodesToUpdate = /* @__PURE__ */ new WeakSet();
9
+ const runSubscribers = () => subscribers.forEach((subscriber) => subscriber());
10
+ const read = () => {
11
+ const currentEffect = effectStack[effectStack.length - 1];
12
+ if (currentEffect && !subscribers.has(currentEffect)) {
13
+ subscribers.add(currentEffect);
14
+ }
15
+ const currentVnode = current.vnode;
16
+ if (currentVnode && !vnodesToUpdate.has(currentVnode)) {
17
+ const subscription = () => {
18
+ if (!currentVnode.dom) {
19
+ subscribers.delete(subscription);
20
+ vnodesToUpdate.delete(currentVnode);
21
+ return;
22
+ }
23
+ updateVnode(currentVnode);
24
+ };
25
+ subscribers.add(subscription);
26
+ vnodesToUpdate.add(currentVnode);
27
+ }
28
+ return value;
29
+ };
30
+ const write = (newValue) => {
31
+ const resolvedValue = typeof newValue === "function" ? newValue(value) : newValue;
32
+ if (current.event && !current.event.defaultPrevented) {
33
+ current.event.preventDefault();
34
+ }
35
+ if (!hasChanged(value, resolvedValue)) {
36
+ return;
37
+ }
38
+ value = resolvedValue;
39
+ runSubscribers();
40
+ };
41
+ return [read, write, runSubscribers];
42
+ }
43
+ function createEffect(effect) {
44
+ const runEffect = () => {
45
+ try {
46
+ effectStack.push(runEffect);
47
+ effect();
48
+ } finally {
49
+ effectStack.pop();
50
+ }
51
+ };
52
+ runEffect();
53
+ }
54
+ function createSignalStore(initialState) {
55
+ const [state, , runSubscribers] = createSignal(initialState);
56
+ const setter = (path, newValue) => {
57
+ const current2 = get(initialState, path);
58
+ const resolvedValue = typeof newValue === "function" ? newValue(current2) : newValue;
59
+ if (!hasChanged(current2, resolvedValue)) {
60
+ return;
61
+ }
62
+ set(initialState, path, resolvedValue);
63
+ runSubscribers();
64
+ };
65
+ return [state, setter];
66
+ }
67
+ export {
68
+ createEffect,
69
+ createSignal,
70
+ createSignalStore
71
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../lib/signals/index.ts"],
4
+ "sourcesContent": ["import { current, updateVnode, Vnode, VnodeWithDom } from \"valyrian.js\";\nimport { get, set, hasChanged } from \"valyrian.js/utils\";\n\nconst effectStack: Function[] = [];\n\n// eslint-disable-next-line no-unused-vars\nexport type Signal<T> = [() => T, (newValue: T | ((current: T) => T)) => void, () => void];\n\nexport function createSignal<T>(initialValue: T): Signal<T> {\n let value = initialValue;\n const subscribers = new Set<Function>();\n const vnodesToUpdate = new WeakSet<Vnode>();\n\n const runSubscribers = () => subscribers.forEach((subscriber) => subscriber());\n\n const read = () => {\n const currentEffect = effectStack[effectStack.length - 1];\n if (currentEffect && !subscribers.has(currentEffect)) {\n subscribers.add(currentEffect);\n }\n\n const currentVnode = current.vnode as VnodeWithDom;\n if (currentVnode && !vnodesToUpdate.has(currentVnode)) {\n const subscription = () => {\n if (!currentVnode.dom) {\n subscribers.delete(subscription);\n vnodesToUpdate.delete(currentVnode);\n return;\n }\n updateVnode(currentVnode);\n };\n\n subscribers.add(subscription);\n vnodesToUpdate.add(currentVnode);\n }\n\n return value;\n };\n\n // eslint-disable-next-line no-unused-vars\n const write = (newValue: T | ((current: T) => T)) => {\n // eslint-disable-next-line no-unused-vars\n const resolvedValue = typeof newValue === \"function\" ? (newValue as (current: T) => T)(value) : newValue;\n\n if (current.event && !current.event.defaultPrevented) {\n current.event.preventDefault();\n }\n\n if (!hasChanged(value, resolvedValue)) {\n return;\n }\n\n value = resolvedValue;\n\n runSubscribers();\n };\n\n return [read, write, runSubscribers];\n}\n\nexport function createEffect(effect: Function) {\n const runEffect = () => {\n try {\n effectStack.push(runEffect);\n effect();\n } finally {\n effectStack.pop();\n }\n };\n\n runEffect();\n}\n\n// Path is a string with dot notation, e.g:\n// 'a.b.c' === obj.a.b.c\n// 'a.0.c' === obj.a[0].c\n// eslint-disable-next-line no-unused-vars\nexport type SignalStore<T> = [() => T, (path: string, newValue: T | ((current: T) => T)) => void];\n\nexport function createSignalStore<T>(initialState: T): SignalStore<T> {\n const [state, , runSubscribers] = createSignal(initialState);\n\n // eslint-disable-next-line no-unused-vars\n const setter = (path: string, newValue: T | ((current: T) => T)) => {\n const current = get(initialState, path);\n // eslint-disable-next-line no-unused-vars\n const resolvedValue = typeof newValue === \"function\" ? (newValue as (current: T) => T)(current) : newValue;\n\n if (!hasChanged(current, resolvedValue)) {\n return;\n }\n\n set(initialState, path, resolvedValue);\n runSubscribers();\n };\n\n return [state, setter];\n}\n"],
5
+ "mappings": ";AAAA,SAAS,SAAS,mBAAwC;AAC1D,SAAS,KAAK,KAAK,kBAAkB;AAErC,IAAM,cAA0B,CAAC;AAK1B,SAAS,aAAgB,cAA4B;AAC1D,MAAI,QAAQ;AACZ,QAAM,cAAc,oBAAI,IAAc;AACtC,QAAM,iBAAiB,oBAAI,QAAe;AAE1C,QAAM,iBAAiB,MAAM,YAAY,QAAQ,CAAC,eAAe,WAAW,CAAC;AAE7E,QAAM,OAAO,MAAM;AACjB,UAAM,gBAAgB,YAAY,YAAY,SAAS,CAAC;AACxD,QAAI,iBAAiB,CAAC,YAAY,IAAI,aAAa,GAAG;AACpD,kBAAY,IAAI,aAAa;AAAA,IAC/B;AAEA,UAAM,eAAe,QAAQ;AAC7B,QAAI,gBAAgB,CAAC,eAAe,IAAI,YAAY,GAAG;AACrD,YAAM,eAAe,MAAM;AACzB,YAAI,CAAC,aAAa,KAAK;AACrB,sBAAY,OAAO,YAAY;AAC/B,yBAAe,OAAO,YAAY;AAClC;AAAA,QACF;AACA,oBAAY,YAAY;AAAA,MAC1B;AAEA,kBAAY,IAAI,YAAY;AAC5B,qBAAe,IAAI,YAAY;AAAA,IACjC;AAEA,WAAO;AAAA,EACT;AAGA,QAAM,QAAQ,CAAC,aAAsC;AAEnD,UAAM,gBAAgB,OAAO,aAAa,aAAc,SAA+B,KAAK,IAAI;AAEhG,QAAI,QAAQ,SAAS,CAAC,QAAQ,MAAM,kBAAkB;AACpD,cAAQ,MAAM,eAAe;AAAA,IAC/B;AAEA,QAAI,CAAC,WAAW,OAAO,aAAa,GAAG;AACrC;AAAA,IACF;AAEA,YAAQ;AAER,mBAAe;AAAA,EACjB;AAEA,SAAO,CAAC,MAAM,OAAO,cAAc;AACrC;AAEO,SAAS,aAAa,QAAkB;AAC7C,QAAM,YAAY,MAAM;AACtB,QAAI;AACF,kBAAY,KAAK,SAAS;AAC1B,aAAO;AAAA,IACT,UAAE;AACA,kBAAY,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,YAAU;AACZ;AAQO,SAAS,kBAAqB,cAAiC;AACpE,QAAM,CAAC,OAAO,EAAE,cAAc,IAAI,aAAa,YAAY;AAG3D,QAAM,SAAS,CAAC,MAAc,aAAsC;AAClE,UAAMA,WAAU,IAAI,cAAc,IAAI;AAEtC,UAAM,gBAAgB,OAAO,aAAa,aAAc,SAA+BA,QAAO,IAAI;AAElG,QAAI,CAAC,WAAWA,UAAS,aAAa,GAAG;AACvC;AAAA,IACF;AAEA,QAAI,cAAc,MAAM,aAAa;AACrC,mBAAe;AAAA,EACjB;AAEA,SAAO,CAAC,OAAO,MAAM;AACvB;",
6
+ "names": ["current"]
7
+ }
@@ -0,0 +1,6 @@
1
+ import { ValyrianComponent, Vnode, Children } from "valyrian.js";
2
+ export declare function Suspense({ fallback, error }: {
3
+ fallback: any | Vnode | ValyrianComponent;
4
+ error?: (e: Error) => any | Vnode | ValyrianComponent;
5
+ }, children: Children): ValyrianComponent;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/suspense/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAqD,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGpH,wBAAgB,QAAQ,CACtB,EACE,QAAQ,EACR,KAAK,EACN,EACD;IAAE,QAAQ,EAAE,GAAG,GAAG,KAAK,GAAG,iBAAiB,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,GAAG,iBAAiB,CAAA;CAAE,EACpG,QAAQ,EAAE,QAAQ,GACjB,iBAAiB,CA8CnB"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // lib/suspense/index.ts
21
+ var suspense_exports = {};
22
+ __export(suspense_exports, {
23
+ Suspense: () => Suspense
24
+ });
25
+ module.exports = __toCommonJS(suspense_exports);
26
+ var import_valyrian = require("valyrian.js");
27
+ var import_hooks = require("valyrian.js/hooks");
28
+ function Suspense({
29
+ fallback,
30
+ error
31
+ }, children) {
32
+ const [loadedChildren, setLoadedChildren] = (0, import_hooks.useState)(null);
33
+ const [err, setErr] = (0, import_hooks.useState)(null);
34
+ return (0, import_valyrian.v)(() => {
35
+ if (err()) {
36
+ if (error) {
37
+ return error(err());
38
+ }
39
+ return err().message;
40
+ }
41
+ if (loadedChildren()) {
42
+ return loadedChildren();
43
+ }
44
+ Promise.all(
45
+ children.map((child) => {
46
+ if ((0, import_valyrian.isVnodeComponent)(child)) {
47
+ if ((0, import_valyrian.isPOJOComponent)(child.tag)) {
48
+ return child.tag.view.bind(child.tag)(child.props || {}, child.children);
49
+ }
50
+ return child.tag(child.props || {}, child.children);
51
+ }
52
+ if ((0, import_valyrian.isPOJOComponent)(child)) {
53
+ return child.view.bind(child)({}, []);
54
+ }
55
+ if ((0, import_valyrian.isComponent)(child)) {
56
+ return child({}, []);
57
+ }
58
+ return child;
59
+ })
60
+ ).then((newChildren) => {
61
+ setLoadedChildren(newChildren);
62
+ }).catch((e) => {
63
+ setErr(e);
64
+ });
65
+ return fallback;
66
+ }, {});
67
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../lib/suspense/index.ts"],
4
+ "sourcesContent": ["import { ValyrianComponent, Vnode, isVnodeComponent, isPOJOComponent, isComponent, v, Children } from \"valyrian.js\";\nimport { useState } from \"valyrian.js/hooks\";\n\nexport function Suspense(\n {\n fallback,\n error\n }: // eslint-disable-next-line no-unused-vars\n { fallback: any | Vnode | ValyrianComponent; error?: (e: Error) => any | Vnode | ValyrianComponent },\n children: Children\n): ValyrianComponent {\n const [loadedChildren, setLoadedChildren] = useState(null);\n const [err, setErr] = useState(null);\n\n return v(() => {\n if (err()) {\n if (error) {\n return error(err());\n }\n return err().message;\n }\n\n if (loadedChildren()) {\n return loadedChildren();\n }\n\n Promise.all(\n children.map((child) => {\n if (isVnodeComponent(child)) {\n if (isPOJOComponent(child.tag)) {\n return child.tag.view.bind(child.tag)(child.props || {}, child.children);\n }\n\n return child.tag(child.props || {}, child.children);\n }\n\n if (isPOJOComponent(child)) {\n return child.view.bind(child)({}, []);\n }\n\n if (isComponent(child)) {\n return child({}, []);\n }\n\n return child;\n })\n )\n .then((newChildren) => {\n setLoadedChildren(newChildren);\n })\n .catch((e) => {\n setErr(e);\n });\n\n return fallback;\n }, {}) as unknown as ValyrianComponent;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAsG;AACtG,mBAAyB;AAElB,SAAS,SACd;AAAA,EACE;AAAA,EACA;AACF,GAEA,UACmB;AACnB,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,uBAAS,IAAI;AACzD,QAAM,CAAC,KAAK,MAAM,QAAI,uBAAS,IAAI;AAEnC,aAAO,mBAAE,MAAM;AACb,QAAI,IAAI,GAAG;AACT,UAAI,OAAO;AACT,eAAO,MAAM,IAAI,CAAC;AAAA,MACpB;AACA,aAAO,IAAI,EAAE;AAAA,IACf;AAEA,QAAI,eAAe,GAAG;AACpB,aAAO,eAAe;AAAA,IACxB;AAEA,YAAQ;AAAA,MACN,SAAS,IAAI,CAAC,UAAU;AACtB,gBAAI,kCAAiB,KAAK,GAAG;AAC3B,kBAAI,iCAAgB,MAAM,GAAG,GAAG;AAC9B,mBAAO,MAAM,IAAI,KAAK,KAAK,MAAM,GAAG,EAAE,MAAM,SAAS,CAAC,GAAG,MAAM,QAAQ;AAAA,UACzE;AAEA,iBAAO,MAAM,IAAI,MAAM,SAAS,CAAC,GAAG,MAAM,QAAQ;AAAA,QACpD;AAEA,gBAAI,iCAAgB,KAAK,GAAG;AAC1B,iBAAO,MAAM,KAAK,KAAK,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACtC;AAEA,gBAAI,6BAAY,KAAK,GAAG;AACtB,iBAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AAAA,QACrB;AAEA,eAAO;AAAA,MACT,CAAC;AAAA,IACH,EACG,KAAK,CAAC,gBAAgB;AACrB,wBAAkB,WAAW;AAAA,IAC/B,CAAC,EACA,MAAM,CAAC,MAAM;AACZ,aAAO,CAAC;AAAA,IACV,CAAC;AAEH,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,o={};((t,r)=>{for(var n in r)e(t,n,{get:r[n],enumerable:!0})})(o,{Suspense:()=>p});var a,s=(a=o,((o,a,s,i)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let l of r(a))n.call(o,l)||l===s||e(o,l,{get:()=>a[l],enumerable:!(i=t(a,l))||i.enumerable});return o})(e({},"__esModule",{value:!0}),a)),i=require("valyrian.js"),l=require("valyrian.js/hooks");function p({fallback:e,error:t},r){const[n,o]=(0,l.useState)(null),[a,s]=(0,l.useState)(null);return(0,i.v)(()=>a()?t?t(a()):a().message:n()?n():(Promise.all(r.map(e=>(0,i.isVnodeComponent)(e)?(0,i.isPOJOComponent)(e.tag)?e.tag.view.bind(e.tag)(e.props||{},e.children):e.tag(e.props||{},e.children):(0,i.isPOJOComponent)(e)?e.view.bind(e)({},[]):(0,i.isComponent)(e)?e({},[]):e)).then(e=>{o(e)}).catch(e=>{s(e)}),e),{})}"undefined"!=typeof module?module.exports=s:self.ValyrianSuspense=s})();//# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdXNwZW5zZV9leHBvcnRzIiwiX19leHBvcnQiLCJTdXNwZW5zZSIsIl9fRVhQT1JUU19fIiwiaW1wb3J0X3ZhbHlyaWFuIiwicmVxdWlyZSIsImltcG9ydF9ob29rcyIsImZhbGxiYWNrIiwiZXJyb3IiLCJjaGlsZHJlbiIsImxvYWRlZENoaWxkcmVuIiwic2V0TG9hZGVkQ2hpbGRyZW4iLCJ1c2VTdGF0ZSIsImVyciIsInNldEVyciIsInYiLCJtZXNzYWdlIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImNoaWxkIiwiaXNWbm9kZUNvbXBvbmVudCIsImlzUE9KT0NvbXBvbmVudCIsInRhZyIsInZpZXciLCJiaW5kIiwicHJvcHMiLCJpc0NvbXBvbmVudCIsInRoZW4iLCJuZXdDaGlsZHJlbiIsImNhdGNoIiwiZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zdXNwZW5zZS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWx5cmlhbkNvbXBvbmVudCwgVm5vZGUsIGlzVm5vZGVDb21wb25lbnQsIGlzUE9KT0NvbXBvbmVudCwgaXNDb21wb25lbnQsIHYsIENoaWxkcmVuIH0gZnJvbSBcInZhbHlyaWFuLmpzXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJ2YWx5cmlhbi5qcy9ob29rc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gU3VzcGVuc2UoXG4gIHtcbiAgICBmYWxsYmFjayxcbiAgICBlcnJvclxuICB9OiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgeyBmYWxsYmFjazogYW55IHwgVm5vZGUgfCBWYWx5cmlhbkNvbXBvbmVudDsgZXJyb3I/OiAoZTogRXJyb3IpID0+IGFueSB8IFZub2RlIHwgVmFseXJpYW5Db21wb25lbnQgfSxcbiAgY2hpbGRyZW46IENoaWxkcmVuXG4pOiBWYWx5cmlhbkNvbXBvbmVudCB7XG4gIGNvbnN0IFtsb2FkZWRDaGlsZHJlbiwgc2V0TG9hZGVkQ2hpbGRyZW5dID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtlcnIsIHNldEVycl0gPSB1c2VTdGF0ZShudWxsKTtcblxuICByZXR1cm4gdigoKSA9PiB7XG4gICAgaWYgKGVycigpKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKGVycigpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnIoKS5tZXNzYWdlO1xuICAgIH1cblxuICAgIGlmIChsb2FkZWRDaGlsZHJlbigpKSB7XG4gICAgICByZXR1cm4gbG9hZGVkQ2hpbGRyZW4oKTtcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbChcbiAgICAgIGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYgKGlzVm5vZGVDb21wb25lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgaWYgKGlzUE9KT0NvbXBvbmVudChjaGlsZC50YWcpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQudGFnLnZpZXcuYmluZChjaGlsZC50YWcpKGNoaWxkLnByb3BzIHx8IHt9LCBjaGlsZC5jaGlsZHJlbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNoaWxkLnRhZyhjaGlsZC5wcm9wcyB8fCB7fSwgY2hpbGQuY2hpbGRyZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUE9KT0NvbXBvbmVudChjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQudmlldy5iaW5kKGNoaWxkKSh7fSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQ29tcG9uZW50KGNoaWxkKSkge1xuICAgICAgICAgIHJldHVybiBjaGlsZCh7fSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfSlcbiAgICApXG4gICAgICAudGhlbigobmV3Q2hpbGRyZW4pID0+IHtcbiAgICAgICAgc2V0TG9hZGVkQ2hpbGRyZW4obmV3Q2hpbGRyZW4pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBzZXRFcnIoZSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfSwge30pIGFzIHVua25vd24gYXMgVmFseXJpYW5Db21wb25lbnQ7XG59XG4iXSwibWFwcGluZ3MiOiJnSkFBQUEsRUFBQSxHLHlEQUFBQyxDQUFBRCxFQUFBLENBQUFFLFNBQUEsSUFBQUEsSUFBQSxJLEVBQUFDLEcsRUFBQUgsRSwwTUFBQUksRUFBc0dDLFFBQUEsZUFDdEdDLEVBQXlCRCxRQUFBLHFCQUVsQixTQUFTSCxHQUNkSyxTQUNFQSxFQUFBQyxNQUNBQSxHQUdGQyxHQUVBLE1BQU9DLEVBQWdCQyxJQUFpQixFQUFJTCxFQUFBTSxVQUFTLE9BQzlDQyxFQUFLQyxJQUFNLEVBQUlSLEVBQUFNLFVBQVMsTUFFL0IsU0FBT1IsRUFBQVcsR0FBRSxJQUNIRixJQUNFTCxFQUNLQSxFQUFNSyxLQUVSQSxJQUFNRyxRQUdYTixJQUNLQSxLQUdUTyxRQUFRQyxJQUNOVCxFQUFTVSxJQUFLQyxJQUNaLEVBQUloQixFQUFBaUIsa0JBQWlCRCxJQUNuQixFQUFJaEIsRUFBQWtCLGlCQUFnQkYsRUFBTUcsS0FDakJILEVBQU1HLElBQUlDLEtBQUtDLEtBQUtMLEVBQU1HLElBQTFCSCxDQUErQkEsRUFBTU0sT0FBUyxDQUFDLEVBQUdOLEVBQU1YLFVBRzFEVyxFQUFNRyxJQUFJSCxFQUFNTSxPQUFTLENBQUMsRUFBR04sRUFBTVgsV0FHNUMsRUFBSUwsRUFBQWtCLGlCQUFnQkYsR0FDWEEsRUFBTUksS0FBS0MsS0FBS0wsRUFBaEJBLENBQXVCLENBQUMsRUFBRyxLQUdwQyxFQUFJaEIsRUFBQXVCLGFBQVlQLEdBQ1BBLEVBQU0sQ0FBQyxFQUFHLElBR1pBLElBR1JRLEtBQU1DLElBQ0xsQixFQUFrQmtCLEVBQVcsR0FFOUJDLE1BQU9DLElBQ05qQixFQUFPaUIsRUFBQyxHQUdMeEIsR0FDTixDQUFDLEVBQ04sQyJ9
@@ -0,0 +1,46 @@
1
+ // lib/suspense/index.ts
2
+ import { isVnodeComponent, isPOJOComponent, isComponent, v } from "valyrian.js";
3
+ import { useState } from "valyrian.js/hooks";
4
+ function Suspense({
5
+ fallback,
6
+ error
7
+ }, children) {
8
+ const [loadedChildren, setLoadedChildren] = useState(null);
9
+ const [err, setErr] = useState(null);
10
+ return v(() => {
11
+ if (err()) {
12
+ if (error) {
13
+ return error(err());
14
+ }
15
+ return err().message;
16
+ }
17
+ if (loadedChildren()) {
18
+ return loadedChildren();
19
+ }
20
+ Promise.all(
21
+ children.map((child) => {
22
+ if (isVnodeComponent(child)) {
23
+ if (isPOJOComponent(child.tag)) {
24
+ return child.tag.view.bind(child.tag)(child.props || {}, child.children);
25
+ }
26
+ return child.tag(child.props || {}, child.children);
27
+ }
28
+ if (isPOJOComponent(child)) {
29
+ return child.view.bind(child)({}, []);
30
+ }
31
+ if (isComponent(child)) {
32
+ return child({}, []);
33
+ }
34
+ return child;
35
+ })
36
+ ).then((newChildren) => {
37
+ setLoadedChildren(newChildren);
38
+ }).catch((e) => {
39
+ setErr(e);
40
+ });
41
+ return fallback;
42
+ }, {});
43
+ }
44
+ export {
45
+ Suspense
46
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../lib/suspense/index.ts"],
4
+ "sourcesContent": ["import { ValyrianComponent, Vnode, isVnodeComponent, isPOJOComponent, isComponent, v, Children } from \"valyrian.js\";\nimport { useState } from \"valyrian.js/hooks\";\n\nexport function Suspense(\n {\n fallback,\n error\n }: // eslint-disable-next-line no-unused-vars\n { fallback: any | Vnode | ValyrianComponent; error?: (e: Error) => any | Vnode | ValyrianComponent },\n children: Children\n): ValyrianComponent {\n const [loadedChildren, setLoadedChildren] = useState(null);\n const [err, setErr] = useState(null);\n\n return v(() => {\n if (err()) {\n if (error) {\n return error(err());\n }\n return err().message;\n }\n\n if (loadedChildren()) {\n return loadedChildren();\n }\n\n Promise.all(\n children.map((child) => {\n if (isVnodeComponent(child)) {\n if (isPOJOComponent(child.tag)) {\n return child.tag.view.bind(child.tag)(child.props || {}, child.children);\n }\n\n return child.tag(child.props || {}, child.children);\n }\n\n if (isPOJOComponent(child)) {\n return child.view.bind(child)({}, []);\n }\n\n if (isComponent(child)) {\n return child({}, []);\n }\n\n return child;\n })\n )\n .then((newChildren) => {\n setLoadedChildren(newChildren);\n })\n .catch((e) => {\n setErr(e);\n });\n\n return fallback;\n }, {}) as unknown as ValyrianComponent;\n}\n"],
5
+ "mappings": ";AAAA,SAAmC,kBAAkB,iBAAiB,aAAa,SAAmB;AACtG,SAAS,gBAAgB;AAElB,SAAS,SACd;AAAA,EACE;AAAA,EACA;AACF,GAEA,UACmB;AACnB,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,IAAI;AACzD,QAAM,CAAC,KAAK,MAAM,IAAI,SAAS,IAAI;AAEnC,SAAO,EAAE,MAAM;AACb,QAAI,IAAI,GAAG;AACT,UAAI,OAAO;AACT,eAAO,MAAM,IAAI,CAAC;AAAA,MACpB;AACA,aAAO,IAAI,EAAE;AAAA,IACf;AAEA,QAAI,eAAe,GAAG;AACpB,aAAO,eAAe;AAAA,IACxB;AAEA,YAAQ;AAAA,MACN,SAAS,IAAI,CAAC,UAAU;AACtB,YAAI,iBAAiB,KAAK,GAAG;AAC3B,cAAI,gBAAgB,MAAM,GAAG,GAAG;AAC9B,mBAAO,MAAM,IAAI,KAAK,KAAK,MAAM,GAAG,EAAE,MAAM,SAAS,CAAC,GAAG,MAAM,QAAQ;AAAA,UACzE;AAEA,iBAAO,MAAM,IAAI,MAAM,SAAS,CAAC,GAAG,MAAM,QAAQ;AAAA,QACpD;AAEA,YAAI,gBAAgB,KAAK,GAAG;AAC1B,iBAAO,MAAM,KAAK,KAAK,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACtC;AAEA,YAAI,YAAY,KAAK,GAAG;AACtB,iBAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AAAA,QACrB;AAEA,eAAO;AAAA,MACT,CAAC;AAAA,IACH,EACG,KAAK,CAAC,gBAAgB;AACrB,wBAAkB,WAAW;AAAA,IAC/B,CAAC,EACA,MAAM,CAAC,MAAM;AACZ,aAAO,CAAC;AAAA,IACV,CAAC;AAEH,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e=Object.defineProperty,r=Object.getOwnPropertyDescriptor,t=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,a={};((r,t)=>{for(var o in t)e(r,o,{get:t[o],enumerable:!0})})(a,{registerSw:()=>c});var n,i=(n=a,((a,n,i,s)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let c of t(n))o.call(a,c)||c===i||e(a,c,{get:()=>n[c],enumerable:!(s=r(n,c))||s.enumerable});return a})(e({},"__esModule",{value:!0}),n)),s=require("valyrian.js");async function c(e="./sw.js",r={scope:"/"}){if(!s.isNodeJs)return await navigator.serviceWorker.register(e,r),navigator.serviceWorker}"undefined"!=typeof module?module.exports=i:self.ValyrianSw=i})();//# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzd19leHBvcnRzIiwiX19leHBvcnQiLCJyZWdpc3RlclN3IiwiX19FWFBPUlRTX18iLCJpbXBvcnRfdmFseXJpYW4iLCJyZXF1aXJlIiwiYXN5bmMiLCJmaWxlIiwib3B0aW9ucyIsInNjb3BlIiwiaXNOb2RlSnMiLCJuYXZpZ2F0b3IiLCJzZXJ2aWNlV29ya2VyIiwicmVnaXN0ZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvc3cvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOb2RlSnMgfSBmcm9tIFwidmFseXJpYW4uanNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyU3coZmlsZSA9IFwiLi9zdy5qc1wiLCBvcHRpb25zOiBSZWdpc3RyYXRpb25PcHRpb25zID0geyBzY29wZTogXCIvXCIgfSkge1xuICBpZiAoaXNOb2RlSnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoZmlsZSwgb3B0aW9ucyk7XG4gIHJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlcjtcbn1cbiJdLCJtYXBwaW5ncyI6ImdKQUFBQSxFQUFBLEcseURBQUFDLENBQUFELEVBQUEsQ0FBQUUsV0FBQSxJQUFBQSxJQUFBLEksRUFBQUMsRyxFQUFBSCxFLDBNQUFBSSxFQUF5QkMsUUFBQSxlQUV6QkMsZUFBc0JKLEVBQVdLLEVBQU8sVUFBV0MsRUFBK0IsQ0FBRUMsTUFBTyxNQUN6RixJQUFJTCxFQUFBTSxTQUlKLGFBRE1DLFVBQVVDLGNBQWNDLFNBQVNOLEVBQU1DLEdBQ3RDRyxVQUFVQyxhQUNuQixDIn0=
@@ -0,0 +1,19 @@
1
+ export declare function t(path: string, params?: Record<string, string>): string;
2
+ export declare function setTranslations(defaultTranslation: Record<string, any>, newTranslations?: Record<string, Record<string, any>>): void;
3
+ export declare function getTranslations(): Record<string, Record<string, any>>;
4
+ export declare function setLang(newLang: string): void;
5
+ export declare function getLang(): string;
6
+ export declare class NumberFormatter {
7
+ #private;
8
+ get value(): number;
9
+ private constructor();
10
+ set(newValue: number | string, shiftDecimal?: boolean): this;
11
+ private clean;
12
+ format(digits?: number, options?: Intl.NumberFormatOptions, customLocale?: Intl.LocalesArgument): string;
13
+ fromDecimalPlaces(decimalPlaces: number): this;
14
+ toDecimalPlaces(decimalPlaces: number): this;
15
+ getDecimalPlaces(): number;
16
+ shiftDecimalPlaces(): this;
17
+ static create(value?: number | string, shiftDecimal?: boolean): NumberFormatter;
18
+ }
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/translate/index.ts"],"names":[],"mappings":"AAMA,wBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAoBvE;AAED,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACvC,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM,QAe1D;AAED,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAErE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAiB7C;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,qBAAa,eAAe;;IAG1B,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,OAAO;IAEA,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,YAAY,UAAQ;IAK1D,OAAO,CAAC,KAAK;IAYb,MAAM,CAAC,MAAM,SAAI,EAAE,OAAO,GAAE,IAAI,CAAC,mBAAwB,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,GAAG,MAAM;IAavG,iBAAiB,CAAC,aAAa,EAAE,MAAM;IAQvC,eAAe,CAAC,aAAa,EAAE,MAAM;IAOrC,gBAAgB,IAAI,MAAM;IAU1B,kBAAkB;IAIlB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAE,MAAM,GAAG,MAAU,EAAE,YAAY,UAAQ,GAAG,eAAe;CAIjF"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // lib/translate/index.ts
21
+ var translate_exports = {};
22
+ __export(translate_exports, {
23
+ NumberFormatter: () => NumberFormatter,
24
+ getLang: () => getLang,
25
+ getTranslations: () => getTranslations,
26
+ setLang: () => setLang,
27
+ setTranslations: () => setTranslations,
28
+ t: () => t
29
+ });
30
+ module.exports = __toCommonJS(translate_exports);
31
+ var import_valyrian = require("valyrian.js");
32
+ var import_utils = require("valyrian.js/utils");
33
+ var translations = {};
34
+ var lang = "en";
35
+ function t(path, params) {
36
+ const langDef = translations[lang];
37
+ const translation = (0, import_utils.get)(langDef, path);
38
+ if (typeof translation !== "string") {
39
+ console.warn(`Translation not found for ${path}`);
40
+ return path;
41
+ }
42
+ if (!params) {
43
+ return translation;
44
+ }
45
+ return translation.replace(/{(\w+)}/g, (_, key) => {
46
+ if (key in params) {
47
+ return params[key];
48
+ }
49
+ return `{${key}}`;
50
+ });
51
+ }
52
+ function setTranslations(defaultTranslation, newTranslations = {}) {
53
+ for (const lang2 in translations) {
54
+ Reflect.deleteProperty(translations, lang2);
55
+ }
56
+ translations.en = { ...defaultTranslation };
57
+ for (const lang2 in newTranslations) {
58
+ translations[lang2] = {
59
+ ...defaultTranslation,
60
+ ...newTranslations[lang2]
61
+ };
62
+ }
63
+ (0, import_valyrian.update)();
64
+ }
65
+ function getTranslations() {
66
+ return translations;
67
+ }
68
+ function setLang(newLang) {
69
+ if (typeof newLang !== "string") {
70
+ throw new Error(`Language ${newLang} not found`);
71
+ }
72
+ const parsedLang = newLang.toLowerCase().split("-").shift()?.split("_").shift();
73
+ if (typeof parsedLang !== "string") {
74
+ throw new Error(`Language ${newLang} not found`);
75
+ }
76
+ if (!translations[parsedLang]) {
77
+ throw new Error(`Language ${newLang} not found`);
78
+ }
79
+ lang = parsedLang;
80
+ (0, import_valyrian.update)();
81
+ }
82
+ function getLang() {
83
+ return lang;
84
+ }
85
+ var NumberFormatter = class _NumberFormatter {
86
+ #value = 0;
87
+ get value() {
88
+ return this.#value;
89
+ }
90
+ constructor() {
91
+ }
92
+ set(newValue, shiftDecimal = false) {
93
+ this.#value = this.clean(newValue, shiftDecimal);
94
+ return this;
95
+ }
96
+ clean(value, shiftDecimal = false) {
97
+ let stringNumber = String(value).replace(/[^0-9.-]+/g, "");
98
+ if (shiftDecimal) {
99
+ stringNumber = stringNumber.replace(/\./g, "");
100
+ }
101
+ const number = Number(stringNumber);
102
+ return isNaN(number) ? 0 : number;
103
+ }
104
+ format(digits = 2, options = {}, customLocale) {
105
+ const lang2 = customLocale || getLang();
106
+ const formatter = new Intl.NumberFormat(lang2, {
107
+ style: "currency",
108
+ currency: "USD",
109
+ minimumFractionDigits: digits,
110
+ maximumFractionDigits: digits,
111
+ ...options
112
+ });
113
+ return formatter.format(this.#value);
114
+ }
115
+ fromDecimalPlaces(decimalPlaces) {
116
+ const currentDecimalPlaces = this.getDecimalPlaces();
117
+ const factor = Math.pow(10, decimalPlaces - currentDecimalPlaces);
118
+ this.#value = Number((this.#value / factor).toFixed(decimalPlaces));
119
+ return this;
120
+ }
121
+ // Ex toDecimalPlaces(1) = 123.456 -> 12345.6
122
+ toDecimalPlaces(decimalPlaces) {
123
+ const currentDecimalPlaces = this.getDecimalPlaces();
124
+ const factor = Math.pow(10, currentDecimalPlaces - decimalPlaces);
125
+ this.#value = Number((this.#value * factor).toFixed(decimalPlaces));
126
+ return this;
127
+ }
128
+ getDecimalPlaces() {
129
+ if (Math.floor(this.#value) === this.#value) {
130
+ return 0;
131
+ }
132
+ const stringValue = String(this.#value);
133
+ const decimalIndex = stringValue.indexOf(".");
134
+ return decimalIndex === -1 ? 0 : stringValue.length - decimalIndex - 1;
135
+ }
136
+ shiftDecimalPlaces() {
137
+ return this.toDecimalPlaces(0);
138
+ }
139
+ static create(value = 0, shiftDecimal = false) {
140
+ const formatter = new _NumberFormatter();
141
+ return formatter.set(value, shiftDecimal);
142
+ }
143
+ };
144
+ (0, import_valyrian.directive)("t", (value, vnode) => {
145
+ const keys = typeof value === "string" ? [value] : vnode.children;
146
+ const params = vnode.props["v-t-params"] || {};
147
+ const children = keys.map((key) => typeof key === "string" && key.trim().length > 1 ? t(key.trim(), params) : key);
148
+ vnode.children = children;
149
+ });
150
+ (0, import_valyrian.setPropNameReserved)("v-t-params");
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../lib/translate/index.ts"],
4
+ "sourcesContent": ["import { directive, setPropNameReserved, update, VnodeWithDom } from \"valyrian.js\";\nimport { get } from \"valyrian.js/utils\";\n\nconst translations: Record<string, Record<string, any>> = {};\nlet lang = \"en\";\n\nexport function t(path: string, params?: Record<string, string>): string {\n const langDef = translations[lang];\n const translation = get(langDef, path);\n\n if (typeof translation !== \"string\") {\n // eslint-disable-next-line no-console\n console.warn(`Translation not found for ${path}`);\n return path;\n }\n\n if (!params) {\n return translation;\n }\n\n return translation.replace(/{(\\w+)}/g, (_, key) => {\n if (key in params) {\n return params[key];\n }\n return `{${key}}`;\n });\n}\n\nexport function setTranslations(\n defaultTranslation: Record<string, any>,\n newTranslations: Record<string, Record<string, any>> = {}\n) {\n for (const lang in translations) {\n Reflect.deleteProperty(translations, lang);\n }\n\n translations.en = { ...defaultTranslation };\n\n for (const lang in newTranslations) {\n translations[lang] = {\n ...defaultTranslation,\n ...newTranslations[lang]\n };\n }\n update();\n}\n\nexport function getTranslations(): Record<string, Record<string, any>> {\n return translations;\n}\n\nexport function setLang(newLang: string): void {\n if (typeof newLang !== \"string\") {\n throw new Error(`Language ${newLang} not found`);\n }\n\n const parsedLang = newLang.toLowerCase().split(\"-\").shift()?.split(\"_\").shift();\n\n if (typeof parsedLang !== \"string\") {\n throw new Error(`Language ${newLang} not found`);\n }\n\n if (!translations[parsedLang]) {\n throw new Error(`Language ${newLang} not found`);\n }\n\n lang = parsedLang;\n update();\n}\n\nexport function getLang(): string {\n return lang;\n}\n\nexport class NumberFormatter {\n #value: number = 0;\n\n get value(): number {\n return this.#value;\n }\n\n private constructor() {}\n\n public set(newValue: number | string, shiftDecimal = false) {\n this.#value = this.clean(newValue, shiftDecimal);\n return this;\n }\n\n private clean(value: string | number, shiftDecimal = false): number {\n let stringNumber = String(value).replace(/[^0-9.-]+/g, \"\");\n\n if (shiftDecimal) {\n stringNumber = stringNumber.replace(/\\./g, \"\");\n }\n\n const number = Number(stringNumber);\n\n return isNaN(number) ? 0 : number;\n }\n\n format(digits = 2, options: Intl.NumberFormatOptions = {}, customLocale?: Intl.LocalesArgument): string {\n const lang = customLocale || getLang();\n const formatter = new Intl.NumberFormat(lang as string, {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n ...options\n });\n\n return formatter.format(this.#value);\n }\n\n fromDecimalPlaces(decimalPlaces: number) {\n const currentDecimalPlaces = this.getDecimalPlaces();\n const factor = Math.pow(10, decimalPlaces - currentDecimalPlaces);\n this.#value = Number((this.#value / factor).toFixed(decimalPlaces));\n return this;\n }\n\n // Ex toDecimalPlaces(1) = 123.456 -> 12345.6\n toDecimalPlaces(decimalPlaces: number) {\n const currentDecimalPlaces = this.getDecimalPlaces();\n const factor = Math.pow(10, currentDecimalPlaces - decimalPlaces);\n this.#value = Number((this.#value * factor).toFixed(decimalPlaces));\n return this;\n }\n\n getDecimalPlaces(): number {\n if (Math.floor(this.#value) === this.#value) {\n return 0;\n }\n\n const stringValue = String(this.#value);\n const decimalIndex = stringValue.indexOf(\".\");\n return decimalIndex === -1 ? 0 : stringValue.length - decimalIndex - 1;\n }\n\n shiftDecimalPlaces() {\n return this.toDecimalPlaces(0);\n }\n\n static create(value: number | string = 0, shiftDecimal = false): NumberFormatter {\n const formatter = new NumberFormatter();\n return formatter.set(value, shiftDecimal);\n }\n}\n\ndirective(\"t\", (value: string | null, vnode: VnodeWithDom): void => {\n const keys = typeof value === \"string\" ? [value] : vnode.children;\n const params = vnode.props[\"v-t-params\"] || {};\n const children = keys.map((key) => (typeof key === \"string\" && key.trim().length > 1 ? t(key.trim(), params) : key));\n vnode.children = children;\n});\n\nsetPropNameReserved(\"v-t-params\");\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqE;AACrE,mBAAoB;AAEpB,IAAM,eAAoD,CAAC;AAC3D,IAAI,OAAO;AAEJ,SAAS,EAAE,MAAc,QAAyC;AACvE,QAAM,UAAU,aAAa,IAAI;AACjC,QAAM,kBAAc,kBAAI,SAAS,IAAI;AAErC,MAAI,OAAO,gBAAgB,UAAU;AAEnC,YAAQ,KAAK,6BAA6B,IAAI,EAAE;AAChD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,SAAO,YAAY,QAAQ,YAAY,CAAC,GAAG,QAAQ;AACjD,QAAI,OAAO,QAAQ;AACjB,aAAO,OAAO,GAAG;AAAA,IACnB;AACA,WAAO,IAAI,GAAG;AAAA,EAChB,CAAC;AACH;AAEO,SAAS,gBACd,oBACA,kBAAuD,CAAC,GACxD;AACA,aAAWA,SAAQ,cAAc;AAC/B,YAAQ,eAAe,cAAcA,KAAI;AAAA,EAC3C;AAEA,eAAa,KAAK,EAAE,GAAG,mBAAmB;AAE1C,aAAWA,SAAQ,iBAAiB;AAClC,iBAAaA,KAAI,IAAI;AAAA,MACnB,GAAG;AAAA,MACH,GAAG,gBAAgBA,KAAI;AAAA,IACzB;AAAA,EACF;AACA,8BAAO;AACT;AAEO,SAAS,kBAAuD;AACrE,SAAO;AACT;AAEO,SAAS,QAAQ,SAAuB;AAC7C,MAAI,OAAO,YAAY,UAAU;AAC/B,UAAM,IAAI,MAAM,YAAY,OAAO,YAAY;AAAA,EACjD;AAEA,QAAM,aAAa,QAAQ,YAAY,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,EAAE,MAAM;AAE9E,MAAI,OAAO,eAAe,UAAU;AAClC,UAAM,IAAI,MAAM,YAAY,OAAO,YAAY;AAAA,EACjD;AAEA,MAAI,CAAC,aAAa,UAAU,GAAG;AAC7B,UAAM,IAAI,MAAM,YAAY,OAAO,YAAY;AAAA,EACjD;AAEA,SAAO;AACP,8BAAO;AACT;AAEO,SAAS,UAAkB;AAChC,SAAO;AACT;AAEO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAC3B,SAAiB;AAAA,EAEjB,IAAI,QAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,cAAc;AAAA,EAAC;AAAA,EAEhB,IAAI,UAA2B,eAAe,OAAO;AAC1D,SAAK,SAAS,KAAK,MAAM,UAAU,YAAY;AAC/C,WAAO;AAAA,EACT;AAAA,EAEQ,MAAM,OAAwB,eAAe,OAAe;AAClE,QAAI,eAAe,OAAO,KAAK,EAAE,QAAQ,cAAc,EAAE;AAEzD,QAAI,cAAc;AAChB,qBAAe,aAAa,QAAQ,OAAO,EAAE;AAAA,IAC/C;AAEA,UAAM,SAAS,OAAO,YAAY;AAElC,WAAO,MAAM,MAAM,IAAI,IAAI;AAAA,EAC7B;AAAA,EAEA,OAAO,SAAS,GAAG,UAAoC,CAAC,GAAG,cAA6C;AACtG,UAAMA,QAAO,gBAAgB,QAAQ;AACrC,UAAM,YAAY,IAAI,KAAK,aAAaA,OAAgB;AAAA,MACtD,OAAO;AAAA,MACP,UAAU;AAAA,MACV,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,MACvB,GAAG;AAAA,IACL,CAAC;AAED,WAAO,UAAU,OAAO,KAAK,MAAM;AAAA,EACrC;AAAA,EAEA,kBAAkB,eAAuB;AACvC,UAAM,uBAAuB,KAAK,iBAAiB;AACnD,UAAM,SAAS,KAAK,IAAI,IAAI,gBAAgB,oBAAoB;AAChE,SAAK,SAAS,QAAQ,KAAK,SAAS,QAAQ,QAAQ,aAAa,CAAC;AAClE,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,gBAAgB,eAAuB;AACrC,UAAM,uBAAuB,KAAK,iBAAiB;AACnD,UAAM,SAAS,KAAK,IAAI,IAAI,uBAAuB,aAAa;AAChE,SAAK,SAAS,QAAQ,KAAK,SAAS,QAAQ,QAAQ,aAAa,CAAC;AAClE,WAAO;AAAA,EACT;AAAA,EAEA,mBAA2B;AACzB,QAAI,KAAK,MAAM,KAAK,MAAM,MAAM,KAAK,QAAQ;AAC3C,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,KAAK,MAAM;AACtC,UAAM,eAAe,YAAY,QAAQ,GAAG;AAC5C,WAAO,iBAAiB,KAAK,IAAI,YAAY,SAAS,eAAe;AAAA,EACvE;AAAA,EAEA,qBAAqB;AACnB,WAAO,KAAK,gBAAgB,CAAC;AAAA,EAC/B;AAAA,EAEA,OAAO,OAAO,QAAyB,GAAG,eAAe,OAAwB;AAC/E,UAAM,YAAY,IAAI,iBAAgB;AACtC,WAAO,UAAU,IAAI,OAAO,YAAY;AAAA,EAC1C;AACF;AAAA,IAEA,2BAAU,KAAK,CAAC,OAAsB,UAA8B;AAClE,QAAM,OAAO,OAAO,UAAU,WAAW,CAAC,KAAK,IAAI,MAAM;AACzD,QAAM,SAAS,MAAM,MAAM,YAAY,KAAK,CAAC;AAC7C,QAAM,WAAW,KAAK,IAAI,CAAC,QAAS,OAAO,QAAQ,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,EAAE,IAAI,KAAK,GAAG,MAAM,IAAI,GAAI;AACnH,QAAM,WAAW;AACnB,CAAC;AAAA,IAED,qCAAoB,YAAY;",
6
+ "names": ["lang"]
7
+ }
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,a={};((t,r)=>{for(var n in r)e(t,n,{get:r[n],enumerable:!0})})(a,{NumberFormatter:()=>v,getLang:()=>h,getTranslations:()=>g,setLang:()=>p,setTranslations:()=>m,t:()=>f});var i,o=(i=a,((a,i,o,s)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let l of r(i))n.call(a,l)||l===o||e(a,l,{get:()=>i[l],enumerable:!(s=t(i,l))||s.enumerable});return a})(e({},"__esModule",{value:!0}),i)),s=require("valyrian.js"),l=require("valyrian.js/utils"),u={},c="en";function f(e,t){const r=u[c],n=(0,l.get)(r,e);return"string"!=typeof n?(console.warn(`Translation not found for ${e}`),e):t?n.replace(/{(\w+)}/g,(e,r)=>r in t?t[r]:`{${r}}`):n}function m(e,t={}){for(const e in u)Reflect.deleteProperty(u,e);u.en={...e};for(const r in t)u[r]={...e,...t[r]};(0,s.update)()}function g(){return u}function p(e){if("string"!=typeof e)throw new Error(`Language ${e} not found`);const t=e.toLowerCase().split("-").shift()?.split("_").shift();if("string"!=typeof t)throw new Error(`Language ${e} not found`);if(!u[t])throw new Error(`Language ${e} not found`);c=t,(0,s.update)()}function h(){return c}var v=class e{#e=0;get value(){return this.#e}constructor(){}set(e,t=!1){return this.#e=this.clean(e,t),this}clean(e,t=!1){let r=String(e).replace(/[^0-9.-]+/g,"");t&&(r=r.replace(/\./g,""));const n=Number(r);return isNaN(n)?0:n}format(e=2,t={},r){const n=r||h();return new Intl.NumberFormat(n,{style:"currency",currency:"USD",minimumFractionDigits:e,maximumFractionDigits:e,...t}).format(this.#e)}fromDecimalPlaces(e){const t=this.getDecimalPlaces(),r=Math.pow(10,e-t);return this.#e=Number((this.#e/r).toFixed(e)),this}toDecimalPlaces(e){const t=this.getDecimalPlaces(),r=Math.pow(10,t-e);return this.#e=Number((this.#e*r).toFixed(e)),this}getDecimalPlaces(){if(Math.floor(this.#e)===this.#e)return 0;const e=String(this.#e),t=e.indexOf(".");return-1===t?0:e.length-t-1}shiftDecimalPlaces(){return this.toDecimalPlaces(0)}static create(t=0,r=!1){return(new e).set(t,r)}};(0,s.directive)("t",(e,t)=>{const r="string"==typeof e?[e]:t.children,n=t.props["v-t-params"]||{},a=r.map(e=>"string"==typeof e&&e.trim().length>1?f(e.trim(),n):e);t.children=a}),(0,s.setPropNameReserved)("v-t-params"),"undefined"!=typeof module?module.exports=o:self.ValyrianTranslate=o})();//# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0cmFuc2xhdGVfZXhwb3J0cyIsIl9fZXhwb3J0IiwiTnVtYmVyRm9ybWF0dGVyIiwiZ2V0TGFuZyIsImdldFRyYW5zbGF0aW9ucyIsInNldExhbmciLCJzZXRUcmFuc2xhdGlvbnMiLCJ0IiwiX19FWFBPUlRTX18iLCJpbXBvcnRfdmFseXJpYW4iLCJyZXF1aXJlIiwiaW1wb3J0X3V0aWxzIiwidHJhbnNsYXRpb25zIiwibGFuZyIsInBhdGgiLCJwYXJhbXMiLCJsYW5nRGVmIiwidHJhbnNsYXRpb24iLCJnZXQiLCJjb25zb2xlIiwid2FybiIsInJlcGxhY2UiLCJfIiwia2V5IiwiZGVmYXVsdFRyYW5zbGF0aW9uIiwibmV3VHJhbnNsYXRpb25zIiwiUmVmbGVjdCIsImRlbGV0ZVByb3BlcnR5IiwiZW4iLCJ1cGRhdGUiLCJuZXdMYW5nIiwiRXJyb3IiLCJwYXJzZWRMYW5nIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsInNoaWZ0IiwiX051bWJlckZvcm1hdHRlciIsInZhbHVlIiwidGhpcyIsImNvbnN0cnVjdG9yIiwic2V0IiwibmV3VmFsdWUiLCJzaGlmdERlY2ltYWwiLCJjbGVhbiIsInN0cmluZ051bWJlciIsIlN0cmluZyIsIm51bWJlciIsIk51bWJlciIsImlzTmFOIiwiZm9ybWF0IiwiZGlnaXRzIiwib3B0aW9ucyIsImN1c3RvbUxvY2FsZSIsIkludGwiLCJOdW1iZXJGb3JtYXQiLCJzdHlsZSIsImN1cnJlbmN5IiwibWluaW11bUZyYWN0aW9uRGlnaXRzIiwibWF4aW11bUZyYWN0aW9uRGlnaXRzIiwiZnJvbURlY2ltYWxQbGFjZXMiLCJkZWNpbWFsUGxhY2VzIiwiY3VycmVudERlY2ltYWxQbGFjZXMiLCJnZXREZWNpbWFsUGxhY2VzIiwiZmFjdG9yIiwiTWF0aCIsInBvdyIsInRvRml4ZWQiLCJ0b0RlY2ltYWxQbGFjZXMiLCJmbG9vciIsInN0cmluZ1ZhbHVlIiwiZGVjaW1hbEluZGV4IiwiaW5kZXhPZiIsImxlbmd0aCIsInNoaWZ0RGVjaW1hbFBsYWNlcyIsImNyZWF0ZSIsImRpcmVjdGl2ZSIsInZub2RlIiwia2V5cyIsImNoaWxkcmVuIiwicHJvcHMiLCJtYXAiLCJ0cmltIiwic2V0UHJvcE5hbWVSZXNlcnZlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi90cmFuc2xhdGUvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlyZWN0aXZlLCBzZXRQcm9wTmFtZVJlc2VydmVkLCB1cGRhdGUsIFZub2RlV2l0aERvbSB9IGZyb20gXCJ2YWx5cmlhbi5qc1wiO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSBcInZhbHlyaWFuLmpzL3V0aWxzXCI7XG5cbmNvbnN0IHRyYW5zbGF0aW9uczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4gPSB7fTtcbmxldCBsYW5nID0gXCJlblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdChwYXRoOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICBjb25zdCBsYW5nRGVmID0gdHJhbnNsYXRpb25zW2xhbmddO1xuICBjb25zdCB0cmFuc2xhdGlvbiA9IGdldChsYW5nRGVmLCBwYXRoKTtcblxuICBpZiAodHlwZW9mIHRyYW5zbGF0aW9uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oYFRyYW5zbGF0aW9uIG5vdCBmb3VuZCBmb3IgJHtwYXRofWApO1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRpb247XG4gIH1cblxuICByZXR1cm4gdHJhbnNsYXRpb24ucmVwbGFjZSgveyhcXHcrKX0vZywgKF8sIGtleSkgPT4ge1xuICAgIGlmIChrZXkgaW4gcGFyYW1zKSB7XG4gICAgICByZXR1cm4gcGFyYW1zW2tleV07XG4gICAgfVxuICAgIHJldHVybiBgeyR7a2V5fX1gO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRyYW5zbGF0aW9ucyhcbiAgZGVmYXVsdFRyYW5zbGF0aW9uOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBuZXdUcmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge31cbikge1xuICBmb3IgKGNvbnN0IGxhbmcgaW4gdHJhbnNsYXRpb25zKSB7XG4gICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0cmFuc2xhdGlvbnMsIGxhbmcpO1xuICB9XG5cbiAgdHJhbnNsYXRpb25zLmVuID0geyAuLi5kZWZhdWx0VHJhbnNsYXRpb24gfTtcblxuICBmb3IgKGNvbnN0IGxhbmcgaW4gbmV3VHJhbnNsYXRpb25zKSB7XG4gICAgdHJhbnNsYXRpb25zW2xhbmddID0ge1xuICAgICAgLi4uZGVmYXVsdFRyYW5zbGF0aW9uLFxuICAgICAgLi4ubmV3VHJhbnNsYXRpb25zW2xhbmddXG4gICAgfTtcbiAgfVxuICB1cGRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9ucygpOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIHJldHVybiB0cmFuc2xhdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYW5nKG5ld0xhbmc6IHN0cmluZyk6IHZvaWQge1xuICBpZiAodHlwZW9mIG5ld0xhbmcgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYExhbmd1YWdlICR7bmV3TGFuZ30gbm90IGZvdW5kYCk7XG4gIH1cblxuICBjb25zdCBwYXJzZWRMYW5nID0gbmV3TGFuZy50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiLVwiKS5zaGlmdCgpPy5zcGxpdChcIl9cIikuc2hpZnQoKTtcblxuICBpZiAodHlwZW9mIHBhcnNlZExhbmcgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYExhbmd1YWdlICR7bmV3TGFuZ30gbm90IGZvdW5kYCk7XG4gIH1cblxuICBpZiAoIXRyYW5zbGF0aW9uc1twYXJzZWRMYW5nXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTGFuZ3VhZ2UgJHtuZXdMYW5nfSBub3QgZm91bmRgKTtcbiAgfVxuXG4gIGxhbmcgPSBwYXJzZWRMYW5nO1xuICB1cGRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhbmcoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxhbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBOdW1iZXJGb3JtYXR0ZXIge1xuICAjdmFsdWU6IG51bWJlciA9IDA7XG5cbiAgZ2V0IHZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI3ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHVibGljIHNldChuZXdWYWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBzaGlmdERlY2ltYWwgPSBmYWxzZSkge1xuICAgIHRoaXMuI3ZhbHVlID0gdGhpcy5jbGVhbihuZXdWYWx1ZSwgc2hpZnREZWNpbWFsKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW4odmFsdWU6IHN0cmluZyB8IG51bWJlciwgc2hpZnREZWNpbWFsID0gZmFsc2UpOiBudW1iZXIge1xuICAgIGxldCBzdHJpbmdOdW1iZXIgPSBTdHJpbmcodmFsdWUpLnJlcGxhY2UoL1teMC05Li1dKy9nLCBcIlwiKTtcblxuICAgIGlmIChzaGlmdERlY2ltYWwpIHtcbiAgICAgIHN0cmluZ051bWJlciA9IHN0cmluZ051bWJlci5yZXBsYWNlKC9cXC4vZywgXCJcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKHN0cmluZ051bWJlcik7XG5cbiAgICByZXR1cm4gaXNOYU4obnVtYmVyKSA/IDAgOiBudW1iZXI7XG4gIH1cblxuICBmb3JtYXQoZGlnaXRzID0gMiwgb3B0aW9uczogSW50bC5OdW1iZXJGb3JtYXRPcHRpb25zID0ge30sIGN1c3RvbUxvY2FsZT86IEludGwuTG9jYWxlc0FyZ3VtZW50KTogc3RyaW5nIHtcbiAgICBjb25zdCBsYW5nID0gY3VzdG9tTG9jYWxlIHx8IGdldExhbmcoKTtcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobGFuZyBhcyBzdHJpbmcsIHtcbiAgICAgIHN0eWxlOiBcImN1cnJlbmN5XCIsXG4gICAgICBjdXJyZW5jeTogXCJVU0RcIixcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZGlnaXRzLFxuICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBkaWdpdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh0aGlzLiN2YWx1ZSk7XG4gIH1cblxuICBmcm9tRGVjaW1hbFBsYWNlcyhkZWNpbWFsUGxhY2VzOiBudW1iZXIpIHtcbiAgICBjb25zdCBjdXJyZW50RGVjaW1hbFBsYWNlcyA9IHRoaXMuZ2V0RGVjaW1hbFBsYWNlcygpO1xuICAgIGNvbnN0IGZhY3RvciA9IE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzIC0gY3VycmVudERlY2ltYWxQbGFjZXMpO1xuICAgIHRoaXMuI3ZhbHVlID0gTnVtYmVyKCh0aGlzLiN2YWx1ZSAvIGZhY3RvcikudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBFeCB0b0RlY2ltYWxQbGFjZXMoMSkgPSAxMjMuNDU2IC0+IDEyMzQ1LjZcbiAgdG9EZWNpbWFsUGxhY2VzKGRlY2ltYWxQbGFjZXM6IG51bWJlcikge1xuICAgIGNvbnN0IGN1cnJlbnREZWNpbWFsUGxhY2VzID0gdGhpcy5nZXREZWNpbWFsUGxhY2VzKCk7XG4gICAgY29uc3QgZmFjdG9yID0gTWF0aC5wb3coMTAsIGN1cnJlbnREZWNpbWFsUGxhY2VzIC0gZGVjaW1hbFBsYWNlcyk7XG4gICAgdGhpcy4jdmFsdWUgPSBOdW1iZXIoKHRoaXMuI3ZhbHVlICogZmFjdG9yKS50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldERlY2ltYWxQbGFjZXMoKTogbnVtYmVyIHtcbiAgICBpZiAoTWF0aC5mbG9vcih0aGlzLiN2YWx1ZSkgPT09IHRoaXMuI3ZhbHVlKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IFN0cmluZyh0aGlzLiN2YWx1ZSk7XG4gICAgY29uc3QgZGVjaW1hbEluZGV4ID0gc3RyaW5nVmFsdWUuaW5kZXhPZihcIi5cIik7XG4gICAgcmV0dXJuIGRlY2ltYWxJbmRleCA9PT0gLTEgPyAwIDogc3RyaW5nVmFsdWUubGVuZ3RoIC0gZGVjaW1hbEluZGV4IC0gMTtcbiAgfVxuXG4gIHNoaWZ0RGVjaW1hbFBsYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy50b0RlY2ltYWxQbGFjZXMoMCk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgPSAwLCBzaGlmdERlY2ltYWwgPSBmYWxzZSk6IE51bWJlckZvcm1hdHRlciB7XG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IE51bWJlckZvcm1hdHRlcigpO1xuICAgIHJldHVybiBmb3JtYXR0ZXIuc2V0KHZhbHVlLCBzaGlmdERlY2ltYWwpO1xuICB9XG59XG5cbmRpcmVjdGl2ZShcInRcIiwgKHZhbHVlOiBzdHJpbmcgfCBudWxsLCB2bm9kZTogVm5vZGVXaXRoRG9tKTogdm9pZCA9PiB7XG4gIGNvbnN0IGtleXMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBbdmFsdWVdIDogdm5vZGUuY2hpbGRyZW47XG4gIGNvbnN0IHBhcmFtcyA9IHZub2RlLnByb3BzW1widi10LXBhcmFtc1wiXSB8fCB7fTtcbiAgY29uc3QgY2hpbGRyZW4gPSBrZXlzLm1hcCgoa2V5KSA9PiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiAmJiBrZXkudHJpbSgpLmxlbmd0aCA+IDEgPyB0KGtleS50cmltKCksIHBhcmFtcykgOiBrZXkpKTtcbiAgdm5vZGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbn0pO1xuXG5zZXRQcm9wTmFtZVJlc2VydmVkKFwidi10LXBhcmFtc1wiKTtcbiJdLCJtYXBwaW5ncyI6ImdKQUFBQSxFQUFBLEcseURBQUFDLENBQUFELEVBQUEsQ0FBQUUsZ0JBQUEsSUFBQUEsRUFBQUMsUUFBQSxJQUFBQSxFQUFBQyxnQkFBQSxJQUFBQSxFQUFBQyxRQUFBLElBQUFBLEVBQUFDLGdCQUFBLElBQUFBLEVBQUFDLEVBQUEsSUFBQUEsSUFBQSxJLEVBQUFDLEcsRUFBQVIsRSwwTUFBQVMsRUFBcUVDLFFBQUEsZUFDckVDLEVBQW9CRCxRQUFBLHFCQUVkRSxFQUFvRCxDQUFDLEVBQ3ZEQyxFQUFPLEtBRUosU0FBU04sRUFBRU8sRUFBY0MsR0FDOUIsTUFBTUMsRUFBVUosRUFBYUMsR0FDdkJJLEdBQUEsRUFBY04sRUFBQU8sS0FBSUYsRUFBU0YsR0FFakMsTUFBMkIsaUJBQWhCRyxHQUVURSxRQUFRQyxLQUFLLDZCQUE2Qk4sS0FDbkNBLEdBR0pDLEVBSUVFLEVBQVlJLFFBQVEsV0FBWSxDQUFDQyxFQUFHQyxJQUNyQ0EsS0FBT1IsRUFDRkEsRUFBT1EsR0FFVCxJQUFJQSxNQVBKTixDQVNYLENBRU8sU0FBU1gsRUFDZGtCLEVBQ0FDLEVBQXVELENBQUMsR0FFeEQsVUFBV1osS0FBUUQsRUFDakJjLFFBQVFDLGVBQWVmLEVBQWNDLEdBR3ZDRCxFQUFhZ0IsR0FBSyxJQUFLSixHQUV2QixVQUFXWCxLQUFRWSxFQUNqQmIsRUFBYUMsR0FBUSxJQUNoQlcsS0FDQUMsRUFBZ0JaLEtBR3ZCLEVBQUFKLEVBQUFvQixTQUNGLENBRU8sU0FBU3pCLElBQ2QsT0FBT1EsQ0FDVCxDQUVPLFNBQVNQLEVBQVF5QixHQUN0QixHQUF1QixpQkFBWkEsRUFDVCxNQUFNLElBQUlDLE1BQU0sWUFBWUQsZUFHOUIsTUFBTUUsRUFBYUYsRUFBUUcsY0FBY0MsTUFBTSxLQUFLQyxTQUFTRCxNQUFNLEtBQUtDLFFBRXhFLEdBQTBCLGlCQUFmSCxFQUNULE1BQU0sSUFBSUQsTUFBTSxZQUFZRCxlQUc5QixJQUFLbEIsRUFBYW9CLEdBQ2hCLE1BQU0sSUFBSUQsTUFBTSxZQUFZRCxlQUc5QmpCLEVBQU9tQixHQUNQLEVBQUF2QixFQUFBb0IsU0FDRixDQUVPLFNBQVMxQixJQUNkLE9BQU9VLENBQ1QsQ0FFTyxJQUFNWCxFQUFOLE1BQU1rQyxFQUNYQyxHQUFpQixFQUVqQixTQUFJQSxHQUNGLE9BQU9DLE1BQUtELENBQ2QsQ0FFUSxXQUFBRSxHQUFlLENBRWhCLEdBQUFDLENBQUlDLEVBQTJCQyxHQUFlLEdBRW5ELE9BREFKLE1BQUtELEVBQVNDLEtBQUtLLE1BQU1GLEVBQVVDLEdBQzVCSixJQUNULENBRVEsS0FBQUssQ0FBTU4sRUFBd0JLLEdBQWUsR0FDbkQsSUFBSUUsRUFBZUMsT0FBT1IsR0FBT2hCLFFBQVEsYUFBYyxJQUVuRHFCLElBQ0ZFLEVBQWVBLEVBQWF2QixRQUFRLE1BQU8sS0FHN0MsTUFBTXlCLEVBQVNDLE9BQU9ILEdBRXRCLE9BQU9JLE1BQU1GLEdBQVUsRUFBSUEsQ0FDN0IsQ0FFQSxNQUFBRyxDQUFPQyxFQUFTLEVBQUdDLEVBQW9DLENBQUMsRUFBR0MsR0FDekQsTUFBTXZDLEVBQU91QyxHQUFnQmpELElBUzdCLE9BUmtCLElBQUlrRCxLQUFLQyxhQUFhekMsRUFBZ0IsQ0FDdEQwQyxNQUFPLFdBQ1BDLFNBQVUsTUFDVkMsc0JBQXVCUCxFQUN2QlEsc0JBQXVCUixLQUNwQkMsSUFHWUYsT0FBT1gsTUFBS0QsRUFDL0IsQ0FFQSxpQkFBQXNCLENBQWtCQyxHQUNoQixNQUFNQyxFQUF1QnZCLEtBQUt3QixtQkFDNUJDLEVBQVNDLEtBQUtDLElBQUksR0FBSUwsRUFBZ0JDLEdBRTVDLE9BREF2QixNQUFLRCxFQUFTVSxRQUFRVCxNQUFLRCxFQUFTMEIsR0FBUUcsUUFBUU4sSUFDN0N0QixJQUNULENBR0EsZUFBQTZCLENBQWdCUCxHQUNkLE1BQU1DLEVBQXVCdkIsS0FBS3dCLG1CQUM1QkMsRUFBU0MsS0FBS0MsSUFBSSxHQUFJSixFQUF1QkQsR0FFbkQsT0FEQXRCLE1BQUtELEVBQVNVLFFBQVFULE1BQUtELEVBQVMwQixHQUFRRyxRQUFRTixJQUM3Q3RCLElBQ1QsQ0FFQSxnQkFBQXdCLEdBQ0UsR0FBSUUsS0FBS0ksTUFBTTlCLE1BQUtELEtBQVlDLE1BQUtELEVBQ25DLE9BQU8sRUFHVCxNQUFNZ0MsRUFBY3hCLE9BQU9QLE1BQUtELEdBQzFCaUMsRUFBZUQsRUFBWUUsUUFBUSxLQUN6QyxPQUF3QixJQUFqQkQsRUFBc0IsRUFBSUQsRUFBWUcsT0FBU0YsRUFBZSxDQUN2RSxDQUVBLGtCQUFBRyxHQUNFLE9BQU9uQyxLQUFLNkIsZ0JBQWdCLEVBQzlCLENBRUEsYUFBT08sQ0FBT3JDLEVBQXlCLEVBQUdLLEdBQWUsR0FFdkQsT0FEa0IsSUFBSU4sR0FDTEksSUFBSUgsRUFBT0ssRUFDOUIsSUFDRixFQUVBakMsRUFBQWtFLFdBQVUsSUFBSyxDQUFDdEMsRUFBc0J1QyxLQUNwQyxNQUFNQyxFQUF3QixpQkFBVnhDLEVBQXFCLENBQUNBLEdBQVN1QyxFQUFNRSxTQUNuRC9ELEVBQVM2RCxFQUFNRyxNQUFNLGVBQWlCLENBQUMsRUFDdkNELEVBQVdELEVBQUtHLElBQUt6RCxHQUF3QixpQkFBUkEsR0FBb0JBLEVBQUkwRCxPQUFPVCxPQUFTLEVBQUlqRSxFQUFFZ0IsRUFBSTBELE9BQVFsRSxHQUFVUSxHQUMvR3FELEVBQU1FLFNBQVdBLENBQUEsSUFDbEIsRUFFRHJFLEVBQUF5RSxxQkFBb0IsYyJ9