valyrian.js 8.1.8 → 8.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/pulses/index.d.ts.map +1 -1
- package/dist/pulses/index.js +26 -17
- package/dist/pulses/index.js.map +2 -2
- package/dist/pulses/index.min.js +1 -1
- package/dist/pulses/index.min.js.map +1 -1
- package/dist/pulses/index.mjs +26 -17
- package/dist/pulses/index.mjs.map +2 -2
- package/lib/pulses/index.ts +33 -19
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/pulses/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/pulses/index.ts"],"names":[],"mappings":"AAKA,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEjC,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEnH,KAAK,UAAU,CAAC,SAAS,IAAI,SAAS,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAIhE,KAAK,WAAW,CAAC,UAAU,IAAI;KAC5B,CAAC,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,MAAM,CAAC,GACvF,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,GACpB,KAAK;CACV,CAAC;AAiPF,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,KAAK,EAAE,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAChH,YAAY,EAAE,SAAS,EACvB,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;;QA7MpD,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI;SAC1C,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI;EA+MjD;AAED,wBAAgB,kBAAkB,CAAC,SAAS,SAAS,KAAK,EAAE,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAClH,YAAY,EAAE,SAAS,EACvB,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;;QApNpD,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI;SAC1C,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI;EAyNjD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,QAU5C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC,CA4BlH"}
|
package/dist/pulses/index.js
CHANGED
|
@@ -126,46 +126,55 @@ function createStore(initialState, pulses, immutable = false) {
|
|
|
126
126
|
return;
|
|
127
127
|
}
|
|
128
128
|
syncState(newState);
|
|
129
|
-
|
|
129
|
+
if (!flush) {
|
|
130
|
+
currentState = null;
|
|
131
|
+
}
|
|
132
|
+
pulseCallCount = 0;
|
|
130
133
|
debouncedUpdate();
|
|
131
134
|
}
|
|
135
|
+
function unfreezeState() {
|
|
136
|
+
if (currentState === null) {
|
|
137
|
+
currentState = (0, import_utils.deepCloneUnfreeze)(localState);
|
|
138
|
+
}
|
|
139
|
+
return currentState;
|
|
140
|
+
}
|
|
132
141
|
function getPulseMethod(key) {
|
|
133
142
|
return function(...args) {
|
|
134
143
|
pulseCallCount++;
|
|
135
|
-
|
|
136
|
-
currentState = (0, import_utils.deepCloneUnfreeze)(localState);
|
|
137
|
-
}
|
|
144
|
+
const state = unfreezeState();
|
|
138
145
|
const context = Object.create(pulses);
|
|
139
146
|
context.$flush = async () => {
|
|
140
147
|
if (currentState) {
|
|
141
148
|
setState(currentState, true);
|
|
142
|
-
currentState = (0, import_utils.deepCloneUnfreeze)(localState);
|
|
143
149
|
}
|
|
144
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
145
150
|
};
|
|
146
151
|
const emptyFlush = async () => {
|
|
147
152
|
};
|
|
153
|
+
const handleError = (error) => {
|
|
154
|
+
console.error(`Error in pulse '${key}':`, error);
|
|
155
|
+
context.$flush = emptyFlush;
|
|
156
|
+
pulseCallCount--;
|
|
157
|
+
if (pulseCallCount <= 0) {
|
|
158
|
+
currentState = null;
|
|
159
|
+
pulseCallCount = 0;
|
|
160
|
+
}
|
|
161
|
+
throw error;
|
|
162
|
+
};
|
|
148
163
|
try {
|
|
149
|
-
const pulseResult = pulses[key].apply(context, [
|
|
164
|
+
const pulseResult = pulses[key].apply(context, [state, ...args]);
|
|
150
165
|
if (pulseResult instanceof Promise) {
|
|
151
166
|
return pulseResult.then((resolvedValue) => {
|
|
152
|
-
setState(
|
|
167
|
+
setState(state);
|
|
153
168
|
context.$flush = emptyFlush;
|
|
154
169
|
return resolvedValue;
|
|
155
|
-
}).catch(
|
|
156
|
-
console.error(`Error in pulse '${key}':`, error);
|
|
157
|
-
context.$flush = emptyFlush;
|
|
158
|
-
throw error;
|
|
159
|
-
});
|
|
170
|
+
}).catch(handleError);
|
|
160
171
|
} else {
|
|
161
|
-
setState(
|
|
172
|
+
setState(state);
|
|
162
173
|
context.$flush = emptyFlush;
|
|
163
174
|
return pulseResult;
|
|
164
175
|
}
|
|
165
176
|
} catch (error) {
|
|
166
|
-
|
|
167
|
-
context.$flush = emptyFlush;
|
|
168
|
-
throw error;
|
|
177
|
+
handleError(error);
|
|
169
178
|
}
|
|
170
179
|
};
|
|
171
180
|
}
|
package/dist/pulses/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../lib/pulses/index.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport { updateVnode, VnodeWithDom, current, DomElement } from \"valyrian.js\";\nimport { deepCloneUnfreeze, deepFreeze, hasChanged } from \"valyrian.js/utils\";\n\ntype State = Record<string, any>;\n\nexport type PulseContext = {\n $flush: () => Promise<void>;\n};\n\nexport type Pulse<StateType, TReturn = unknown> = (state: StateType, ...args: any[]) => TReturn | Promise<TReturn>;\n\ntype ProxyState<StateType> = StateType & { [key: string]: any };\n\nconst effectStack: Function[] = [];\n\ntype StorePulses<PulsesType> = {\n [K in keyof PulsesType]: PulsesType[K] extends (state: any, ...args: infer Args) => infer R\n ? (...args: Args) => R\n : never;\n};\n\nfunction registerDomSubscription(subscribers: Set<Function>, domWithVnodesToUpdate: WeakSet<DomElement>): void {\n const currentVnode = current.vnode as VnodeWithDom;\n if (!currentVnode || domWithVnodesToUpdate.has(currentVnode.dom)) {\n return;\n }\n\n let hasParent = false;\n let parent = currentVnode.dom.parentElement as DomElement;\n while (parent) {\n if (domWithVnodesToUpdate.has(parent)) {\n hasParent = true;\n break;\n }\n parent = parent.parentElement as DomElement;\n }\n\n if (!hasParent) {\n const dom = currentVnode.dom;\n const subscription = () => {\n updateVnode(dom.vnode);\n if (!dom.parentElement) {\n subscribers.delete(subscription);\n domWithVnodesToUpdate.delete(dom);\n }\n };\n subscribers.add(subscription);\n domWithVnodesToUpdate.add(dom);\n }\n}\n\nfunction createStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(\n initialState: StateType | (() => StateType) | null,\n pulses: PulsesType & ThisType<PulsesType & PulseContext>,\n immutable = false\n): StorePulses<PulsesType> & {\n state: ProxyState<StateType>;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback: Function) => void;\n} {\n const subscribers = new Set<Function>();\n const domWithVnodesToUpdate = new WeakSet<DomElement>();\n\n const boundPulses: Record<string, Function> = {};\n for (const key in pulses) {\n if (typeof pulses[key] !== \"function\") {\n throw new Error(`Pulse '${key}' must be a function`);\n }\n if (key === \"state\") {\n throw new Error(`A pulse cannot be named 'state'`);\n }\n boundPulses[key] = getPulseMethod(key);\n }\n\n const localState: StateType =\n (typeof initialState === \"function\" ? initialState() : initialState) || ({} as StateType);\n\n function isMutable() {\n if (immutable) {\n throw new Error(\"You need to call a pulse to modify the state\");\n }\n }\n\n let currentState: StateType | null = null;\n let pulseCallCount = 0;\n\n const proxyState = new Proxy(localState, {\n get: (state, prop: string) => {\n if (currentState) {\n return currentState[prop];\n }\n\n const currentEffect = effectStack[effectStack.length - 1];\n if (currentEffect && !subscribers.has(currentEffect)) {\n subscribers.add(currentEffect);\n }\n\n registerDomSubscription(subscribers, domWithVnodesToUpdate);\n\n return state[prop];\n },\n set: (state, prop: string, value: any) => {\n isMutable();\n Reflect.set(state, prop, value);\n return true;\n },\n deleteProperty: (state, prop: string) => {\n isMutable();\n Reflect.deleteProperty(state, prop);\n return true;\n }\n });\n\n function syncState(newState: StateType) {\n for (const key in newState) {\n localState[key] = immutable ? deepFreeze(newState[key]) : newState[key];\n }\n for (const key in localState) {\n if (!(key in newState)) {\n Reflect.deleteProperty(localState, key);\n }\n }\n }\n\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n function debouncedUpdate() {\n if (debounceTimeout) {\n clearTimeout(debounceTimeout);\n }\n debounceTimeout = setTimeout(() => subscribers.forEach((subscriber) => subscriber()), 0);\n }\n\n function setState(newState: StateType, flush = false) {\n pulseCallCount--;\n if (!hasChanged(localState, newState)) {\n return;\n }\n if (pulseCallCount > 0 && !flush) {\n return;\n }\n syncState(newState);\n if (!flush) {\n currentState = null;\n }\n pulseCallCount = 0;\n debouncedUpdate();\n }\n\n function unfreezeState() {\n if (currentState === null) {\n currentState = deepCloneUnfreeze(localState);\n }\n return currentState;\n }\n\n function getPulseMethod(key: string) {\n return function (this: any, ...args: any[]) {\n pulseCallCount++;\n\n const state = unfreezeState();\n\n const context = Object.create(pulses);\n\n context.$flush = async () => {\n if (currentState) {\n setState(currentState, true);\n }\n };\n\n const emptyFlush = async () => {};\n\n const handleError = (error: any) => {\n console.error(`Error in pulse '${key}':`, error);\n context.$flush = emptyFlush;\n\n pulseCallCount--;\n if (pulseCallCount <= 0) {\n currentState = null;\n pulseCallCount = 0;\n }\n\n throw error;\n };\n\n try {\n const pulseResult = pulses[key].apply(context, [state, ...args]);\n if (pulseResult instanceof Promise) {\n return pulseResult\n .then((resolvedValue) => {\n setState(state as StateType);\n context.$flush = emptyFlush;\n return resolvedValue;\n })\n .catch(handleError);\n } else {\n setState(state);\n context.$flush = emptyFlush;\n return pulseResult;\n }\n } catch (error) {\n handleError(error);\n }\n };\n }\n\n syncState(localState);\n\n const listeners: Record<string, Function[]> = {};\n const trigger = (event: string, ...args: any[]) => {\n if (listeners[event]) {\n listeners[event].forEach((callback) => callback(...args));\n }\n };\n\n const pulsesProxy = new Proxy(boundPulses, {\n get: (pulses, prop: string) => {\n if (prop === \"state\") {\n return proxyState;\n }\n if (prop === \"on\") {\n return (event: string, callback: Function) => {\n if (!listeners[event]) {\n listeners[event] = [];\n }\n listeners[event].push(callback);\n };\n }\n if (prop === \"off\") {\n return (event: string, callback: Function) => {\n if (listeners[event]) {\n listeners[event] = listeners[event].filter((cb) => cb !== callback);\n }\n };\n }\n if (!(prop in pulses)) {\n throw new Error(`Pulse '${prop}' does not exist`);\n }\n const pulseMethod = pulses[prop];\n\n return (...args: any[]) => {\n const result = pulseMethod.apply(pulseMethod, args);\n if (result instanceof Promise) {\n return result.then((r) => {\n trigger(\"pulse\", prop, args);\n return r;\n });\n }\n trigger(\"pulse\", prop, args);\n return result;\n };\n }\n });\n\n return pulsesProxy as StorePulses<PulsesType> & {\n state: ProxyState<StateType>;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback: Function) => void;\n };\n}\n\nexport function createPulseStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(\n initialState: StateType,\n pulses: PulsesType & ThisType<PulsesType & PulseContext>\n) {\n return createStore(initialState, pulses, true);\n}\n\nexport function createMutableStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(\n initialState: StateType,\n pulses: PulsesType & ThisType<PulsesType & PulseContext>\n) {\n console.warn(\n \"Warning: You are working with a mutable state. All state changes made outside of a pulse will not trigger a re-render.\"\n );\n return createStore(initialState, pulses, false);\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 runEffect();\n}\n\nexport function createPulse<T>(initialValue: T): [() => T, (newValue: T | ((current: T) => T)) => void, () => void] {\n let value = initialValue;\n const subscribers = new Set<Function>();\n const domWithVnodesToUpdate = new WeakSet<DomElement>();\n\n const runSubscribers = () => {\n subscribers.forEach((subscriber) => subscriber());\n };\n\n const read = (): T => {\n const currentEffect = effectStack[effectStack.length - 1];\n if (currentEffect && !subscribers.has(currentEffect)) {\n subscribers.add(currentEffect);\n }\n registerDomSubscription(subscribers, domWithVnodesToUpdate);\n return value;\n };\n\n const write = (newValue: T | ((current: T) => T)): void => {\n const resolvedValue = typeof newValue === \"function\" ? (newValue as (current: T) => T)(value) : newValue;\n if (!hasChanged(value, resolvedValue)) {\n return;\n }\n value = resolvedValue;\n runSubscribers();\n };\n\n return [read, write, runSubscribers];\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["pulses"]
|
|
7
7
|
}
|
package/dist/pulses/index.min.js
CHANGED
|
@@ -1 +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:()=>h,createMutableStore:()=>
|
|
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:()=>h,createMutableStore:()=>p,createPulse:()=>y,createPulseStore:()=>d});var s,u=(s=o,((o,s,u,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let l of n(s))r.call(o,l)||l===u||e(o,l,{get:()=>s[l],enumerable:!(a=t(s,l))||a.enumerable});return o})(e({},"__esModule",{value:!0}),s)),a=require("valyrian.js"),l=require("valyrian.js/utils"),c=[];function f(e,t){const n=a.current.vnode;if(!n||t.has(n.dom))return;let r=!1,o=n.dom.parentElement;for(;o;){if(t.has(o)){r=!0;break}o=o.parentElement}if(!r){const r=n.dom,o=()=>{(0,a.updateVnode)(r.vnode),r.parentElement||(e.delete(o),t.delete(r))};e.add(o),t.add(r)}}function i(e,t,n=!1){const r=new Set,o=new WeakSet,s={};for(const e in t){if("function"!=typeof t[e])throw new Error(`Pulse '${e}' must be a function`);if("state"===e)throw new Error("A pulse cannot be named 'state'");s[e]=m(e)}const u=("function"==typeof e?e():e)||{};function a(){if(n)throw new Error("You need to call a pulse to modify the state")}let i=null,d=0;const p=new Proxy(u,{get:(e,t)=>{if(i)return i[t];const n=c[c.length-1];return n&&!r.has(n)&&r.add(n),f(r,o),e[t]},set:(e,t,n)=>(a(),Reflect.set(e,t,n),!0),deleteProperty:(e,t)=>(a(),Reflect.deleteProperty(e,t),!0)});function h(e){for(const t in e)u[t]=n?(0,l.deepFreeze)(e[t]):e[t];for(const t in u)t in e||Reflect.deleteProperty(u,t)}let y=null;function w(e,t=!1){d--,(0,l.hasChanged)(u,e)&&(d>0&&!t||(h(e),t||(i=null),d=0,y&&clearTimeout(y),y=setTimeout(()=>r.forEach(e=>e()),0)))}function m(e){return function(...n){d++;const r=(null===i&&(i=(0,l.deepCloneUnfreeze)(u)),i),o=Object.create(t);o.$flush=async()=>{i&&w(i,!0)};const s=async()=>{},a=t=>{throw console.error(`Error in pulse '${e}':`,t),o.$flush=s,d--,d<=0&&(i=null,d=0),t};try{const u=t[e].apply(o,[r,...n]);return u instanceof Promise?u.then(e=>(w(r),o.$flush=s,e)).catch(a):(w(r),o.$flush=s,u)}catch(e){a(e)}}}h(u);const P={},g=(e,...t)=>{P[e]&&P[e].forEach(e=>e(...t))};return new Proxy(s,{get:(e,t)=>{if("state"===t)return p;if("on"===t)return(e,t)=>{P[e]||(P[e]=[]),P[e].push(t)};if("off"===t)return(e,t)=>{P[e]&&(P[e]=P[e].filter(e=>e!==t))};if(!(t in e))throw new Error(`Pulse '${t}' does not exist`);const n=e[t];return(...e)=>{const r=n.apply(n,e);return r instanceof Promise?r.then(n=>(g("pulse",t,e),n)):(g("pulse",t,e),r)}}})}function d(e,t){return i(e,t,!0)}function p(e,t){return console.warn("Warning: You are working with a mutable state. All state changes made outside of a pulse will not trigger a re-render."),i(e,t,!1)}function h(e){const t=()=>{try{c.push(t),e()}finally{c.pop()}};t()}function y(e){let t=e;const n=new Set,r=new WeakSet,o=()=>{n.forEach(e=>e())};return[()=>{const e=c[c.length-1];return e&&!n.has(e)&&n.add(e),f(n,r),t},e=>{const n="function"==typeof e?e(t):e;(0,l.hasChanged)(t,n)&&(t=n,o())},o]}"undefined"!=typeof module?module.exports=u:self.ValyrianPulses=u})();//# sourceMappingURL=index.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmRleF9leHBvcnRzIiwiX19leHBvcnQiLCJjcmVhdGVFZmZlY3QiLCJjcmVhdGVNdXRhYmxlU3RvcmUiLCJjcmVhdGVQdWxzZSIsImNyZWF0ZVB1bHNlU3RvcmUiLCJfX0VYUE9SVFNfXyIsImltcG9ydF92YWx5cmlhbiIsInJlcXVpcmUiLCJpbXBvcnRfdXRpbHMiLCJlZmZlY3RTdGFjayIsInJlZ2lzdGVyRG9tU3Vic2NyaXB0aW9uIiwic3Vic2NyaWJlcnMiLCJkb21XaXRoVm5vZGVzVG9VcGRhdGUiLCJjdXJyZW50Vm5vZGUiLCJjdXJyZW50Iiwidm5vZGUiLCJoYXMiLCJkb20iLCJoYXNQYXJlbnQiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50Iiwic3Vic2NyaXB0aW9uIiwidXBkYXRlVm5vZGUiLCJkZWxldGUiLCJhZGQiLCJjcmVhdGVTdG9yZSIsImluaXRpYWxTdGF0ZSIsInB1bHNlcyIsImltbXV0YWJsZSIsIlNldCIsIldlYWtTZXQiLCJib3VuZFB1bHNlcyIsImtleSIsIkVycm9yIiwiZ2V0UHVsc2VNZXRob2QiLCJsb2NhbFN0YXRlIiwiaXNNdXRhYmxlIiwiY3VycmVudFN0YXRlIiwicHVsc2VDYWxsQ291bnQiLCJwcm94eVN0YXRlIiwiUHJveHkiLCJnZXQiLCJzdGF0ZSIsInByb3AiLCJjdXJyZW50RWZmZWN0IiwibGVuZ3RoIiwic2V0IiwidmFsdWUiLCJSZWZsZWN0IiwiZGVsZXRlUHJvcGVydHkiLCJzeW5jU3RhdGUiLCJuZXdTdGF0ZSIsImRlZXBGcmVlemUiLCJkZWJvdW5jZVRpbWVvdXQiLCJzZXRTdGF0ZSIsImZsdXNoIiwiaGFzQ2hhbmdlZCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJmb3JFYWNoIiwic3Vic2NyaWJlciIsImFyZ3MiLCJkZWVwQ2xvbmVVbmZyZWV6ZSIsImNvbnRleHQiLCJPYmplY3QiLCJjcmVhdGUiLCIkZmx1c2giLCJhc3luYyIsIlByb21pc2UiLCJyZXNvbHZlIiwiZW1wdHlGbHVzaCIsInB1bHNlUmVzdWx0IiwiYXBwbHkiLCJ0aGVuIiwicmVzb2x2ZWRWYWx1ZSIsImNhdGNoIiwiZXJyb3IiLCJjb25zb2xlIiwibGlzdGVuZXJzIiwidHJpZ2dlciIsImV2ZW50IiwiY2FsbGJhY2siLCJwdXNoIiwiZmlsdGVyIiwiY2IiLCJwdWxzZU1ldGhvZCIsInJlc3VsdCIsInIiLCJ3YXJuIiwiZWZmZWN0IiwicnVuRWZmZWN0IiwicG9wIiwiaW5pdGlhbFZhbHVlIiwicnVuU3Vic2NyaWJlcnMiLCJuZXdWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9wdWxzZXMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgdXBkYXRlVm5vZGUsIFZub2RlV2l0aERvbSwgY3VycmVudCwgRG9tRWxlbWVudCB9IGZyb20gXCJ2YWx5cmlhbi5qc1wiO1xuaW1wb3J0IHsgZGVlcENsb25lVW5mcmVlemUsIGRlZXBGcmVlemUsIGhhc0NoYW5nZWQgfSBmcm9tIFwidmFseXJpYW4uanMvdXRpbHNcIjtcblxudHlwZSBTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbmV4cG9ydCB0eXBlIFB1bHNlQ29udGV4dCA9IHtcbiAgJGZsdXNoOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgUHVsc2U8U3RhdGVUeXBlLCBUUmV0dXJuID0gdW5rbm93bj4gPSAoc3RhdGU6IFN0YXRlVHlwZSwgLi4uYXJnczogYW55W10pID0+IFRSZXR1cm4gfCBQcm9taXNlPFRSZXR1cm4+O1xuXG50eXBlIFByb3h5U3RhdGU8U3RhdGVUeXBlPiA9IFN0YXRlVHlwZSAmIHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbmNvbnN0IGVmZmVjdFN0YWNrOiBGdW5jdGlvbltdID0gW107XG5cbnR5cGUgU3RvcmVQdWxzZXM8UHVsc2VzVHlwZT4gPSB7XG4gIFtLIGluIGtleW9mIFB1bHNlc1R5cGVdOiBQdWxzZXNUeXBlW0tdIGV4dGVuZHMgKHN0YXRlOiBhbnksIC4uLmFyZ3M6IGluZmVyIEFyZ3MpID0+IGluZmVyIFJcbiAgICA/ICguLi5hcmdzOiBBcmdzKSA9PiBSXG4gICAgOiBuZXZlcjtcbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRG9tU3Vic2NyaXB0aW9uKHN1YnNjcmliZXJzOiBTZXQ8RnVuY3Rpb24+LCBkb21XaXRoVm5vZGVzVG9VcGRhdGU6IFdlYWtTZXQ8RG9tRWxlbWVudD4pOiB2b2lkIHtcbiAgY29uc3QgY3VycmVudFZub2RlID0gY3VycmVudC52bm9kZSBhcyBWbm9kZVdpdGhEb207XG4gIGlmICghY3VycmVudFZub2RlIHx8IGRvbVdpdGhWbm9kZXNUb1VwZGF0ZS5oYXMoY3VycmVudFZub2RlLmRvbSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaGFzUGFyZW50ID0gZmFsc2U7XG4gIGxldCBwYXJlbnQgPSBjdXJyZW50Vm5vZGUuZG9tLnBhcmVudEVsZW1lbnQgYXMgRG9tRWxlbWVudDtcbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmIChkb21XaXRoVm5vZGVzVG9VcGRhdGUuaGFzKHBhcmVudCkpIHtcbiAgICAgIGhhc1BhcmVudCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQgYXMgRG9tRWxlbWVudDtcbiAgfVxuXG4gIGlmICghaGFzUGFyZW50KSB7XG4gICAgY29uc3QgZG9tID0gY3VycmVudFZub2RlLmRvbTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSAoKSA9PiB7XG4gICAgICB1cGRhdGVWbm9kZShkb20udm5vZGUpO1xuICAgICAgaWYgKCFkb20ucGFyZW50RWxlbWVudCkge1xuICAgICAgICBzdWJzY3JpYmVycy5kZWxldGUoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgZG9tV2l0aFZub2Rlc1RvVXBkYXRlLmRlbGV0ZShkb20pO1xuICAgICAgfVxuICAgIH07XG4gICAgc3Vic2NyaWJlcnMuYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgZG9tV2l0aFZub2Rlc1RvVXBkYXRlLmFkZChkb20pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFN0YXRlVHlwZSBleHRlbmRzIFN0YXRlLCBQdWxzZXNUeXBlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUHVsc2U8U3RhdGVUeXBlLCBhbnk+Pj4oXG4gIGluaXRpYWxTdGF0ZTogU3RhdGVUeXBlIHwgKCgpID0+IFN0YXRlVHlwZSkgfCBudWxsLFxuICBwdWxzZXM6IFB1bHNlc1R5cGUgJiBUaGlzVHlwZTxQdWxzZXNUeXBlICYgUHVsc2VDb250ZXh0PixcbiAgaW1tdXRhYmxlID0gZmFsc2Vcbik6IFN0b3JlUHVsc2VzPFB1bHNlc1R5cGU+ICYge1xuICBzdGF0ZTogUHJveHlTdGF0ZTxTdGF0ZVR5cGU+O1xuICBvbjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gdm9pZDtcbiAgb2ZmOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB2b2lkO1xufSB7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IFNldDxGdW5jdGlvbj4oKTtcbiAgY29uc3QgZG9tV2l0aFZub2Rlc1RvVXBkYXRlID0gbmV3IFdlYWtTZXQ8RG9tRWxlbWVudD4oKTtcblxuICBjb25zdCBib3VuZFB1bHNlczogUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIHB1bHNlcykge1xuICAgIGlmICh0eXBlb2YgcHVsc2VzW2tleV0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQdWxzZSAnJHtrZXl9JyBtdXN0IGJlIGEgZnVuY3Rpb25gKTtcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gXCJzdGF0ZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgcHVsc2UgY2Fubm90IGJlIG5hbWVkICdzdGF0ZSdgKTtcbiAgICB9XG4gICAgYm91bmRQdWxzZXNba2V5XSA9IGdldFB1bHNlTWV0aG9kKGtleSk7XG4gIH1cblxuICBjb25zdCBsb2NhbFN0YXRlOiBTdGF0ZVR5cGUgPVxuICAgICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyBpbml0aWFsU3RhdGUoKSA6IGluaXRpYWxTdGF0ZSkgfHwgKHt9IGFzIFN0YXRlVHlwZSk7XG5cbiAgZnVuY3Rpb24gaXNNdXRhYmxlKCkge1xuICAgIGlmIChpbW11dGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBuZWVkIHRvIGNhbGwgYSBwdWxzZSB0byBtb2RpZnkgdGhlIHN0YXRlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBjdXJyZW50U3RhdGU6IFN0YXRlVHlwZSB8IG51bGwgPSBudWxsO1xuICBsZXQgcHVsc2VDYWxsQ291bnQgPSAwO1xuXG4gIGNvbnN0IHByb3h5U3RhdGUgPSBuZXcgUHJveHkobG9jYWxTdGF0ZSwge1xuICAgIGdldDogKHN0YXRlLCBwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZVtwcm9wXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudEVmZmVjdCA9IGVmZmVjdFN0YWNrW2VmZmVjdFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGN1cnJlbnRFZmZlY3QgJiYgIXN1YnNjcmliZXJzLmhhcyhjdXJyZW50RWZmZWN0KSkge1xuICAgICAgICBzdWJzY3JpYmVycy5hZGQoY3VycmVudEVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIHJlZ2lzdGVyRG9tU3Vic2NyaXB0aW9uKHN1YnNjcmliZXJzLCBkb21XaXRoVm5vZGVzVG9VcGRhdGUpO1xuXG4gICAgICByZXR1cm4gc3RhdGVbcHJvcF07XG4gICAgfSxcbiAgICBzZXQ6IChzdGF0ZSwgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpc011dGFibGUoKTtcbiAgICAgIFJlZmxlY3Quc2V0KHN0YXRlLCBwcm9wLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGRlbGV0ZVByb3BlcnR5OiAoc3RhdGUsIHByb3A6IHN0cmluZykgPT4ge1xuICAgICAgaXNNdXRhYmxlKCk7XG4gICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHN0YXRlLCBwcm9wKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gc3luY1N0YXRlKG5ld1N0YXRlOiBTdGF0ZVR5cGUpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXdTdGF0ZSkge1xuICAgICAgbG9jYWxTdGF0ZVtrZXldID0gaW1tdXRhYmxlID8gZGVlcEZyZWV6ZShuZXdTdGF0ZVtrZXldKSA6IG5ld1N0YXRlW2tleV07XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGxvY2FsU3RhdGUpIHtcbiAgICAgIGlmICghKGtleSBpbiBuZXdTdGF0ZSkpIHtcbiAgICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShsb2NhbFN0YXRlLCBrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBkZWJvdW5jZVRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIGZ1bmN0aW9uIGRlYm91bmNlZFVwZGF0ZSgpIHtcbiAgICBpZiAoZGVib3VuY2VUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lb3V0KTtcbiAgICB9XG4gICAgZGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBzdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiBzdWJzY3JpYmVyKCkpLCAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlOiBTdGF0ZVR5cGUsIGZsdXNoID0gZmFsc2UpIHtcbiAgICBwdWxzZUNhbGxDb3VudC0tO1xuICAgIGlmICghaGFzQ2hhbmdlZChsb2NhbFN0YXRlLCBuZXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHB1bHNlQ2FsbENvdW50ID4gMCAmJiAhZmx1c2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3luY1N0YXRlKG5ld1N0YXRlKTtcbiAgICBjdXJyZW50U3RhdGUgPSBudWxsO1xuICAgIGRlYm91bmNlZFVwZGF0ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UHVsc2VNZXRob2Qoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pIHtcbiAgICAgIHB1bHNlQ2FsbENvdW50Kys7XG4gICAgICBpZiAoY3VycmVudFN0YXRlID09PSBudWxsKSB7XG4gICAgICAgIGN1cnJlbnRTdGF0ZSA9IGRlZXBDbG9uZVVuZnJlZXplKGxvY2FsU3RhdGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBSdW50aW1lOiBDcmVhbW9zIHVuIG9iamV0byBxdWUgaGVyZWRhIGRlICdwdWxzZXMnIHBhcmEgcXVlICd0aGlzJyB0ZW5nYSBhY2Nlc28gYSBsb3MgaGVybWFub3NcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBPYmplY3QuY3JlYXRlKHB1bHNlcyk7XG5cbiAgICAgIGNvbnRleHQuJGZsdXNoID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgc2V0U3RhdGUoY3VycmVudFN0YXRlLCB0cnVlKTtcbiAgICAgICAgICBjdXJyZW50U3RhdGUgPSBkZWVwQ2xvbmVVbmZyZWV6ZShsb2NhbFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlbXB0eUZsdXNoID0gYXN5bmMgKCkgPT4ge307XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHB1bHNlUmVzdWx0ID0gcHVsc2VzW2tleV0uYXBwbHkoY29udGV4dCwgW2N1cnJlbnRTdGF0ZSwgLi4uYXJnc10pO1xuICAgICAgICBpZiAocHVsc2VSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcmV0dXJuIHB1bHNlUmVzdWx0XG4gICAgICAgICAgICAudGhlbigocmVzb2x2ZWRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBzZXRTdGF0ZShjdXJyZW50U3RhdGUgYXMgU3RhdGVUeXBlKTtcbiAgICAgICAgICAgICAgY29udGV4dC4kZmx1c2ggPSBlbXB0eUZsdXNoO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluIHB1bHNlICcke2tleX0nOmAsIGVycm9yKTtcbiAgICAgICAgICAgICAgY29udGV4dC4kZmx1c2ggPSBlbXB0eUZsdXNoO1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFN0YXRlKGN1cnJlbnRTdGF0ZSk7XG4gICAgICAgICAgY29udGV4dC4kZmx1c2ggPSBlbXB0eUZsdXNoO1xuICAgICAgICAgIHJldHVybiBwdWxzZVJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgaW4gcHVsc2UgJyR7a2V5fSc6YCwgZXJyb3IpO1xuICAgICAgICBjb250ZXh0LiRmbHVzaCA9IGVtcHR5Rmx1c2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzeW5jU3RhdGUobG9jYWxTdGF0ZSk7XG5cbiAgY29uc3QgbGlzdGVuZXJzOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbltdPiA9IHt9O1xuICBjb25zdCB0cmlnZ2VyID0gKGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgaWYgKGxpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgIGxpc3RlbmVyc1tldmVudF0uZm9yRWFjaCgoY2FsbGJhY2spID0+IGNhbGxiYWNrKC4uLmFyZ3MpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcHVsc2VzUHJveHkgPSBuZXcgUHJveHkoYm91bmRQdWxzZXMsIHtcbiAgICBnZXQ6IChwdWxzZXMsIHByb3A6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHByb3AgPT09IFwic3RhdGVcIikge1xuICAgICAgICByZXR1cm4gcHJveHlTdGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSBcIm9uXCIpIHtcbiAgICAgICAgcmV0dXJuIChldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICBpZiAoIWxpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSBcIm9mZlwiKSB7XG4gICAgICAgIHJldHVybiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGxpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gPSBsaXN0ZW5lcnNbZXZlbnRdLmZpbHRlcigoY2IpID0+IGNiICE9PSBjYWxsYmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKCEocHJvcCBpbiBwdWxzZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHVsc2UgJyR7cHJvcH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBwdWxzZU1ldGhvZCA9IHB1bHNlc1twcm9wXTtcblxuICAgICAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwdWxzZU1ldGhvZC5hcHBseShwdWxzZU1ldGhvZCwgYXJncyk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyKSA9PiB7XG4gICAgICAgICAgICB0cmlnZ2VyKFwicHVsc2VcIiwgcHJvcCwgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyKFwicHVsc2VcIiwgcHJvcCwgYXJncyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHB1bHNlc1Byb3h5IGFzIFN0b3JlUHVsc2VzPFB1bHNlc1R5cGU+ICYge1xuICAgIHN0YXRlOiBQcm94eVN0YXRlPFN0YXRlVHlwZT47XG4gICAgb246IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pID0+IHZvaWQ7XG4gICAgb2ZmOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHVsc2VTdG9yZTxTdGF0ZVR5cGUgZXh0ZW5kcyBTdGF0ZSwgUHVsc2VzVHlwZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFB1bHNlPFN0YXRlVHlwZSwgYW55Pj4+KFxuICBpbml0aWFsU3RhdGU6IFN0YXRlVHlwZSxcbiAgcHVsc2VzOiBQdWxzZXNUeXBlICYgVGhpc1R5cGU8UHVsc2VzVHlwZSAmIFB1bHNlQ29udGV4dD5cbikge1xuICByZXR1cm4gY3JlYXRlU3RvcmUoaW5pdGlhbFN0YXRlLCBwdWxzZXMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXV0YWJsZVN0b3JlPFN0YXRlVHlwZSBleHRlbmRzIFN0YXRlLCBQdWxzZXNUeXBlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUHVsc2U8U3RhdGVUeXBlLCBhbnk+Pj4oXG4gIGluaXRpYWxTdGF0ZTogU3RhdGVUeXBlLFxuICBwdWxzZXM6IFB1bHNlc1R5cGUgJiBUaGlzVHlwZTxQdWxzZXNUeXBlICYgUHVsc2VDb250ZXh0PlxuKSB7XG4gIGNvbnNvbGUud2FybihcbiAgICBcIldhcm5pbmc6IFlvdSBhcmUgd29ya2luZyB3aXRoIGEgbXV0YWJsZSBzdGF0ZS4gQWxsIHN0YXRlIGNoYW5nZXMgbWFkZSBvdXRzaWRlIG9mIGEgcHVsc2Ugd2lsbCBub3QgdHJpZ2dlciBhIHJlLXJlbmRlci5cIlxuICApO1xuICByZXR1cm4gY3JlYXRlU3RvcmUoaW5pdGlhbFN0YXRlLCBwdWxzZXMsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVmZmVjdChlZmZlY3Q6IEZ1bmN0aW9uKSB7XG4gIGNvbnN0IHJ1bkVmZmVjdCA9ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgZWZmZWN0U3RhY2sucHVzaChydW5FZmZlY3QpO1xuICAgICAgZWZmZWN0KCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVmZmVjdFN0YWNrLnBvcCgpO1xuICAgIH1cbiAgfTtcbiAgcnVuRWZmZWN0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQdWxzZTxUPihpbml0aWFsVmFsdWU6IFQpOiBbKCkgPT4gVCwgKG5ld1ZhbHVlOiBUIHwgKChjdXJyZW50OiBUKSA9PiBUKSkgPT4gdm9pZCwgKCkgPT4gdm9pZF0ge1xuICBsZXQgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IFNldDxGdW5jdGlvbj4oKTtcbiAgY29uc3QgZG9tV2l0aFZub2Rlc1RvVXBkYXRlID0gbmV3IFdlYWtTZXQ8RG9tRWxlbWVudD4oKTtcblxuICBjb25zdCBydW5TdWJzY3JpYmVycyA9ICgpID0+IHtcbiAgICBzdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiBzdWJzY3JpYmVyKCkpO1xuICB9O1xuXG4gIGNvbnN0IHJlYWQgPSAoKTogVCA9PiB7XG4gICAgY29uc3QgY3VycmVudEVmZmVjdCA9IGVmZmVjdFN0YWNrW2VmZmVjdFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmIChjdXJyZW50RWZmZWN0ICYmICFzdWJzY3JpYmVycy5oYXMoY3VycmVudEVmZmVjdCkpIHtcbiAgICAgIHN1YnNjcmliZXJzLmFkZChjdXJyZW50RWZmZWN0KTtcbiAgICB9XG4gICAgcmVnaXN0ZXJEb21TdWJzY3JpcHRpb24oc3Vic2NyaWJlcnMsIGRvbVdpdGhWbm9kZXNUb1VwZGF0ZSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIGNvbnN0IHdyaXRlID0gKG5ld1ZhbHVlOiBUIHwgKChjdXJyZW50OiBUKSA9PiBUKSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkVmFsdWUgPSB0eXBlb2YgbmV3VmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IChuZXdWYWx1ZSBhcyAoY3VycmVudDogVCkgPT4gVCkodmFsdWUpIDogbmV3VmFsdWU7XG4gICAgaWYgKCFoYXNDaGFuZ2VkKHZhbHVlLCByZXNvbHZlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YWx1ZSA9IHJlc29sdmVkVmFsdWU7XG4gICAgcnVuU3Vic2NyaWJlcnMoKTtcbiAgfTtcblxuICByZXR1cm4gW3JlYWQsIHdyaXRlLCBydW5TdWJzY3JpYmVyc107XG59XG4iXSwibWFwcGluZ3MiOiJnSkFBQUEsRUFBQSxHLHlEQUFBQyxDQUFBRCxFQUFBLENBQUFFLGFBQUEsSUFBQUEsRUFBQUMsbUJBQUEsSUFBQUEsRUFBQUMsWUFBQSxJQUFBQSxFQUFBQyxpQkFBQSxJQUFBQSxJQUFBLEksRUFBQUMsRyxFQUFBTixFLDBNQUNBTyxFQUErREMsUUFBQSxlQUMvREMsRUFBMERELFFBQUEscUJBWXBERSxFQUEwQixHQVFoQyxTQUFT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
|
|
1
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmRleF9leHBvcnRzIiwiX19leHBvcnQiLCJjcmVhdGVFZmZlY3QiLCJjcmVhdGVNdXRhYmxlU3RvcmUiLCJjcmVhdGVQdWxzZSIsImNyZWF0ZVB1bHNlU3RvcmUiLCJfX0VYUE9SVFNfXyIsImltcG9ydF92YWx5cmlhbiIsInJlcXVpcmUiLCJpbXBvcnRfdXRpbHMiLCJlZmZlY3RTdGFjayIsInJlZ2lzdGVyRG9tU3Vic2NyaXB0aW9uIiwic3Vic2NyaWJlcnMiLCJkb21XaXRoVm5vZGVzVG9VcGRhdGUiLCJjdXJyZW50Vm5vZGUiLCJjdXJyZW50Iiwidm5vZGUiLCJoYXMiLCJkb20iLCJoYXNQYXJlbnQiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50Iiwic3Vic2NyaXB0aW9uIiwidXBkYXRlVm5vZGUiLCJkZWxldGUiLCJhZGQiLCJjcmVhdGVTdG9yZSIsImluaXRpYWxTdGF0ZSIsInB1bHNlcyIsImltbXV0YWJsZSIsIlNldCIsIldlYWtTZXQiLCJib3VuZFB1bHNlcyIsImtleSIsIkVycm9yIiwiZ2V0UHVsc2VNZXRob2QiLCJsb2NhbFN0YXRlIiwiaXNNdXRhYmxlIiwiY3VycmVudFN0YXRlIiwicHVsc2VDYWxsQ291bnQiLCJwcm94eVN0YXRlIiwiUHJveHkiLCJnZXQiLCJzdGF0ZSIsInByb3AiLCJjdXJyZW50RWZmZWN0IiwibGVuZ3RoIiwic2V0IiwidmFsdWUiLCJSZWZsZWN0IiwiZGVsZXRlUHJvcGVydHkiLCJzeW5jU3RhdGUiLCJuZXdTdGF0ZSIsImRlZXBGcmVlemUiLCJkZWJvdW5jZVRpbWVvdXQiLCJzZXRTdGF0ZSIsImZsdXNoIiwiaGFzQ2hhbmdlZCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJmb3JFYWNoIiwic3Vic2NyaWJlciIsImFyZ3MiLCJkZWVwQ2xvbmVVbmZyZWV6ZSIsImNvbnRleHQiLCJPYmplY3QiLCJjcmVhdGUiLCIkZmx1c2giLCJhc3luYyIsImVtcHR5Rmx1c2giLCJoYW5kbGVFcnJvciIsImVycm9yIiwiY29uc29sZSIsInB1bHNlUmVzdWx0IiwiYXBwbHkiLCJQcm9taXNlIiwidGhlbiIsInJlc29sdmVkVmFsdWUiLCJjYXRjaCIsImxpc3RlbmVycyIsInRyaWdnZXIiLCJldmVudCIsImNhbGxiYWNrIiwicHVzaCIsImZpbHRlciIsImNiIiwicHVsc2VNZXRob2QiLCJyZXN1bHQiLCJyIiwid2FybiIsImVmZmVjdCIsInJ1bkVmZmVjdCIsInBvcCIsImluaXRpYWxWYWx1ZSIsInJ1blN1YnNjcmliZXJzIiwibmV3VmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi9saWIvcHVsc2VzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZSAqL1xuXG5pbXBvcnQgeyB1cGRhdGVWbm9kZSwgVm5vZGVXaXRoRG9tLCBjdXJyZW50LCBEb21FbGVtZW50IH0gZnJvbSBcInZhbHlyaWFuLmpzXCI7XG5pbXBvcnQgeyBkZWVwQ2xvbmVVbmZyZWV6ZSwgZGVlcEZyZWV6ZSwgaGFzQ2hhbmdlZCB9IGZyb20gXCJ2YWx5cmlhbi5qcy91dGlsc1wiO1xuXG50eXBlIFN0YXRlID0gUmVjb3JkPHN0cmluZywgYW55PjtcblxuZXhwb3J0IHR5cGUgUHVsc2VDb250ZXh0ID0ge1xuICAkZmx1c2g6ICgpID0+IFByb21pc2U8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBQdWxzZTxTdGF0ZVR5cGUsIFRSZXR1cm4gPSB1bmtub3duPiA9IChzdGF0ZTogU3RhdGVUeXBlLCAuLi5hcmdzOiBhbnlbXSkgPT4gVFJldHVybiB8IFByb21pc2U8VFJldHVybj47XG5cbnR5cGUgUHJveHlTdGF0ZTxTdGF0ZVR5cGU+ID0gU3RhdGVUeXBlICYgeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuY29uc3QgZWZmZWN0U3RhY2s6IEZ1bmN0aW9uW10gPSBbXTtcblxudHlwZSBTdG9yZVB1bHNlczxQdWxzZXNUeXBlPiA9IHtcbiAgW0sgaW4ga2V5b2YgUHVsc2VzVHlwZV06IFB1bHNlc1R5cGVbS10gZXh0ZW5kcyAoc3RhdGU6IGFueSwgLi4uYXJnczogaW5mZXIgQXJncykgPT4gaW5mZXIgUlxuICAgID8gKC4uLmFyZ3M6IEFyZ3MpID0+IFJcbiAgICA6IG5ldmVyO1xufTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJEb21TdWJzY3JpcHRpb24oc3Vic2NyaWJlcnM6IFNldDxGdW5jdGlvbj4sIGRvbVdpdGhWbm9kZXNUb1VwZGF0ZTogV2Vha1NldDxEb21FbGVtZW50Pik6IHZvaWQge1xuICBjb25zdCBjdXJyZW50Vm5vZGUgPSBjdXJyZW50LnZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgaWYgKCFjdXJyZW50Vm5vZGUgfHwgZG9tV2l0aFZub2Rlc1RvVXBkYXRlLmhhcyhjdXJyZW50Vm5vZGUuZG9tKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBoYXNQYXJlbnQgPSBmYWxzZTtcbiAgbGV0IHBhcmVudCA9IGN1cnJlbnRWbm9kZS5kb20ucGFyZW50RWxlbWVudCBhcyBEb21FbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKGRvbVdpdGhWbm9kZXNUb1VwZGF0ZS5oYXMocGFyZW50KSkge1xuICAgICAgaGFzUGFyZW50ID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudCBhcyBEb21FbGVtZW50O1xuICB9XG5cbiAgaWYgKCFoYXNQYXJlbnQpIHtcbiAgICBjb25zdCBkb20gPSBjdXJyZW50Vm5vZGUuZG9tO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9ICgpID0+IHtcbiAgICAgIHVwZGF0ZVZub2RlKGRvbS52bm9kZSk7XG4gICAgICBpZiAoIWRvbS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIHN1YnNjcmliZXJzLmRlbGV0ZShzdWJzY3JpcHRpb24pO1xuICAgICAgICBkb21XaXRoVm5vZGVzVG9VcGRhdGUuZGVsZXRlKGRvbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzdWJzY3JpYmVycy5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICBkb21XaXRoVm5vZGVzVG9VcGRhdGUuYWRkKGRvbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmU8U3RhdGVUeXBlIGV4dGVuZHMgU3RhdGUsIFB1bHNlc1R5cGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBQdWxzZTxTdGF0ZVR5cGUsIGFueT4+PihcbiAgaW5pdGlhbFN0YXRlOiBTdGF0ZVR5cGUgfCAoKCkgPT4gU3RhdGVUeXBlKSB8IG51bGwsXG4gIHB1bHNlczogUHVsc2VzVHlwZSAmIFRoaXNUeXBlPFB1bHNlc1R5cGUgJiBQdWxzZUNvbnRleHQ+LFxuICBpbW11dGFibGUgPSBmYWxzZVxuKTogU3RvcmVQdWxzZXM8UHVsc2VzVHlwZT4gJiB7XG4gIHN0YXRlOiBQcm94eVN0YXRlPFN0YXRlVHlwZT47XG4gIG9uOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB2b2lkO1xuICBvZmY6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pID0+IHZvaWQ7XG59IHtcbiAgY29uc3Qgc3Vic2NyaWJlcnMgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuICBjb25zdCBkb21XaXRoVm5vZGVzVG9VcGRhdGUgPSBuZXcgV2Vha1NldDxEb21FbGVtZW50PigpO1xuXG4gIGNvbnN0IGJvdW5kUHVsc2VzOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gcHVsc2VzKSB7XG4gICAgaWYgKHR5cGVvZiBwdWxzZXNba2V5XSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFB1bHNlICcke2tleX0nIG11c3QgYmUgYSBmdW5jdGlvbmApO1xuICAgIH1cbiAgICBpZiAoa2V5ID09PSBcInN0YXRlXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSBwdWxzZSBjYW5ub3QgYmUgbmFtZWQgJ3N0YXRlJ2ApO1xuICAgIH1cbiAgICBib3VuZFB1bHNlc1trZXldID0gZ2V0UHVsc2VNZXRob2Qoa2V5KTtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsU3RhdGU6IFN0YXRlVHlwZSA9XG4gICAgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IGluaXRpYWxTdGF0ZSgpIDogaW5pdGlhbFN0YXRlKSB8fCAoe30gYXMgU3RhdGVUeXBlKTtcblxuICBmdW5jdGlvbiBpc011dGFibGUoKSB7XG4gICAgaWYgKGltbXV0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG5lZWQgdG8gY2FsbCBhIHB1bHNlIHRvIG1vZGlmeSB0aGUgc3RhdGVcIik7XG4gICAgfVxuICB9XG5cbiAgbGV0IGN1cnJlbnRTdGF0ZTogU3RhdGVUeXBlIHwgbnVsbCA9IG51bGw7XG4gIGxldCBwdWxzZUNhbGxDb3VudCA9IDA7XG5cbiAgY29uc3QgcHJveHlTdGF0ZSA9IG5ldyBQcm94eShsb2NhbFN0YXRlLCB7XG4gICAgZ2V0OiAoc3RhdGUsIHByb3A6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudFN0YXRlW3Byb3BdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50RWZmZWN0ID0gZWZmZWN0U3RhY2tbZWZmZWN0U3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBpZiAoY3VycmVudEVmZmVjdCAmJiAhc3Vic2NyaWJlcnMuaGFzKGN1cnJlbnRFZmZlY3QpKSB7XG4gICAgICAgIHN1YnNjcmliZXJzLmFkZChjdXJyZW50RWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgcmVnaXN0ZXJEb21TdWJzY3JpcHRpb24oc3Vic2NyaWJlcnMsIGRvbVdpdGhWbm9kZXNUb1VwZGF0ZSk7XG5cbiAgICAgIHJldHVybiBzdGF0ZVtwcm9wXTtcbiAgICB9LFxuICAgIHNldDogKHN0YXRlLCBwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlzTXV0YWJsZSgpO1xuICAgICAgUmVmbGVjdC5zZXQoc3RhdGUsIHByb3AsIHZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHk6IChzdGF0ZSwgcHJvcDogc3RyaW5nKSA9PiB7XG4gICAgICBpc011dGFibGUoKTtcbiAgICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoc3RhdGUsIHByb3ApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBzeW5jU3RhdGUobmV3U3RhdGU6IFN0YXRlVHlwZSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG5ld1N0YXRlKSB7XG4gICAgICBsb2NhbFN0YXRlW2tleV0gPSBpbW11dGFibGUgPyBkZWVwRnJlZXplKG5ld1N0YXRlW2tleV0pIDogbmV3U3RhdGVba2V5XTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbG9jYWxTdGF0ZSkge1xuICAgICAgaWYgKCEoa2V5IGluIG5ld1N0YXRlKSkge1xuICAgICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGxvY2FsU3RhdGUsIGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGRlYm91bmNlVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgZnVuY3Rpb24gZGVib3VuY2VkVXBkYXRlKCkge1xuICAgIGlmIChkZWJvdW5jZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVvdXQpO1xuICAgIH1cbiAgICBkZWJvdW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHN1YnNjcmliZXJzLmZvckVhY2goKHN1YnNjcmliZXIpID0+IHN1YnNjcmliZXIoKSksIDApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGU6IFN0YXRlVHlwZSwgZmx1c2ggPSBmYWxzZSkge1xuICAgIHB1bHNlQ2FsbENvdW50LS07XG4gICAgaWYgKCFoYXNDaGFuZ2VkKGxvY2FsU3RhdGUsIG5ld1N0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHVsc2VDYWxsQ291bnQgPiAwICYmICFmbHVzaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzeW5jU3RhdGUobmV3U3RhdGUpO1xuICAgIGlmICghZmx1c2gpIHtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IG51bGw7XG4gICAgfVxuICAgIHB1bHNlQ2FsbENvdW50ID0gMDtcbiAgICBkZWJvdW5jZWRVcGRhdGUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuZnJlZXplU3RhdGUoKSB7XG4gICAgaWYgKGN1cnJlbnRTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgY3VycmVudFN0YXRlID0gZGVlcENsb25lVW5mcmVlemUobG9jYWxTdGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQdWxzZU1ldGhvZChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGhpczogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgICAgcHVsc2VDYWxsQ291bnQrKztcblxuICAgICAgY29uc3Qgc3RhdGUgPSB1bmZyZWV6ZVN0YXRlKCk7XG5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBPYmplY3QuY3JlYXRlKHB1bHNlcyk7XG5cbiAgICAgIGNvbnRleHQuJGZsdXNoID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgc2V0U3RhdGUoY3VycmVudFN0YXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgZW1wdHlGbHVzaCA9IGFzeW5jICgpID0+IHt9O1xuXG4gICAgICBjb25zdCBoYW5kbGVFcnJvciA9IChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluIHB1bHNlICcke2tleX0nOmAsIGVycm9yKTtcbiAgICAgICAgY29udGV4dC4kZmx1c2ggPSBlbXB0eUZsdXNoO1xuXG4gICAgICAgIHB1bHNlQ2FsbENvdW50LS07XG4gICAgICAgIGlmIChwdWxzZUNhbGxDb3VudCA8PSAwKSB7XG4gICAgICAgICAgY3VycmVudFN0YXRlID0gbnVsbDtcbiAgICAgICAgICBwdWxzZUNhbGxDb3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHB1bHNlUmVzdWx0ID0gcHVsc2VzW2tleV0uYXBwbHkoY29udGV4dCwgW3N0YXRlLCAuLi5hcmdzXSk7XG4gICAgICAgIGlmIChwdWxzZVJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICByZXR1cm4gcHVsc2VSZXN1bHRcbiAgICAgICAgICAgIC50aGVuKChyZXNvbHZlZFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlIGFzIFN0YXRlVHlwZSk7XG4gICAgICAgICAgICAgIGNvbnRleHQuJGZsdXNoID0gZW1wdHlGbHVzaDtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGhhbmRsZUVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSk7XG4gICAgICAgICAgY29udGV4dC4kZmx1c2ggPSBlbXB0eUZsdXNoO1xuICAgICAgICAgIHJldHVybiBwdWxzZVJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzeW5jU3RhdGUobG9jYWxTdGF0ZSk7XG5cbiAgY29uc3QgbGlzdGVuZXJzOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbltdPiA9IHt9O1xuICBjb25zdCB0cmlnZ2VyID0gKGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgaWYgKGxpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgIGxpc3RlbmVyc1tldmVudF0uZm9yRWFjaCgoY2FsbGJhY2spID0+IGNhbGxiYWNrKC4uLmFyZ3MpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcHVsc2VzUHJveHkgPSBuZXcgUHJveHkoYm91bmRQdWxzZXMsIHtcbiAgICBnZXQ6IChwdWxzZXMsIHByb3A6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHByb3AgPT09IFwic3RhdGVcIikge1xuICAgICAgICByZXR1cm4gcHJveHlTdGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSBcIm9uXCIpIHtcbiAgICAgICAgcmV0dXJuIChldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICBpZiAoIWxpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSBcIm9mZlwiKSB7XG4gICAgICAgIHJldHVybiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGxpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gPSBsaXN0ZW5lcnNbZXZlbnRdLmZpbHRlcigoY2IpID0+IGNiICE9PSBjYWxsYmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKCEocHJvcCBpbiBwdWxzZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHVsc2UgJyR7cHJvcH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBwdWxzZU1ldGhvZCA9IHB1bHNlc1twcm9wXTtcblxuICAgICAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwdWxzZU1ldGhvZC5hcHBseShwdWxzZU1ldGhvZCwgYXJncyk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyKSA9PiB7XG4gICAgICAgICAgICB0cmlnZ2VyKFwicHVsc2VcIiwgcHJvcCwgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyKFwicHVsc2VcIiwgcHJvcCwgYXJncyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHB1bHNlc1Byb3h5IGFzIFN0b3JlUHVsc2VzPFB1bHNlc1R5cGU+ICYge1xuICAgIHN0YXRlOiBQcm94eVN0YXRlPFN0YXRlVHlwZT47XG4gICAgb246IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pID0+IHZvaWQ7XG4gICAgb2ZmOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHVsc2VTdG9yZTxTdGF0ZVR5cGUgZXh0ZW5kcyBTdGF0ZSwgUHVsc2VzVHlwZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFB1bHNlPFN0YXRlVHlwZSwgYW55Pj4+KFxuICBpbml0aWFsU3RhdGU6IFN0YXRlVHlwZSxcbiAgcHVsc2VzOiBQdWxzZXNUeXBlICYgVGhpc1R5cGU8UHVsc2VzVHlwZSAmIFB1bHNlQ29udGV4dD5cbikge1xuICByZXR1cm4gY3JlYXRlU3RvcmUoaW5pdGlhbFN0YXRlLCBwdWxzZXMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXV0YWJsZVN0b3JlPFN0YXRlVHlwZSBleHRlbmRzIFN0YXRlLCBQdWxzZXNUeXBlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUHVsc2U8U3RhdGVUeXBlLCBhbnk+Pj4oXG4gIGluaXRpYWxTdGF0ZTogU3RhdGVUeXBlLFxuICBwdWxzZXM6IFB1bHNlc1R5cGUgJiBUaGlzVHlwZTxQdWxzZXNUeXBlICYgUHVsc2VDb250ZXh0PlxuKSB7XG4gIGNvbnNvbGUud2FybihcbiAgICBcIldhcm5pbmc6IFlvdSBhcmUgd29ya2luZyB3aXRoIGEgbXV0YWJsZSBzdGF0ZS4gQWxsIHN0YXRlIGNoYW5nZXMgbWFkZSBvdXRzaWRlIG9mIGEgcHVsc2Ugd2lsbCBub3QgdHJpZ2dlciBhIHJlLXJlbmRlci5cIlxuICApO1xuICByZXR1cm4gY3JlYXRlU3RvcmUoaW5pdGlhbFN0YXRlLCBwdWxzZXMsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVmZmVjdChlZmZlY3Q6IEZ1bmN0aW9uKSB7XG4gIGNvbnN0IHJ1bkVmZmVjdCA9ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgZWZmZWN0U3RhY2sucHVzaChydW5FZmZlY3QpO1xuICAgICAgZWZmZWN0KCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVmZmVjdFN0YWNrLnBvcCgpO1xuICAgIH1cbiAgfTtcbiAgcnVuRWZmZWN0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQdWxzZTxUPihpbml0aWFsVmFsdWU6IFQpOiBbKCkgPT4gVCwgKG5ld1ZhbHVlOiBUIHwgKChjdXJyZW50OiBUKSA9PiBUKSkgPT4gdm9pZCwgKCkgPT4gdm9pZF0ge1xuICBsZXQgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IFNldDxGdW5jdGlvbj4oKTtcbiAgY29uc3QgZG9tV2l0aFZub2Rlc1RvVXBkYXRlID0gbmV3IFdlYWtTZXQ8RG9tRWxlbWVudD4oKTtcblxuICBjb25zdCBydW5TdWJzY3JpYmVycyA9ICgpID0+IHtcbiAgICBzdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiBzdWJzY3JpYmVyKCkpO1xuICB9O1xuXG4gIGNvbnN0IHJlYWQgPSAoKTogVCA9PiB7XG4gICAgY29uc3QgY3VycmVudEVmZmVjdCA9IGVmZmVjdFN0YWNrW2VmZmVjdFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmIChjdXJyZW50RWZmZWN0ICYmICFzdWJzY3JpYmVycy5oYXMoY3VycmVudEVmZmVjdCkpIHtcbiAgICAgIHN1YnNjcmliZXJzLmFkZChjdXJyZW50RWZmZWN0KTtcbiAgICB9XG4gICAgcmVnaXN0ZXJEb21TdWJzY3JpcHRpb24oc3Vic2NyaWJlcnMsIGRvbVdpdGhWbm9kZXNUb1VwZGF0ZSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIGNvbnN0IHdyaXRlID0gKG5ld1ZhbHVlOiBUIHwgKChjdXJyZW50OiBUKSA9PiBUKSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkVmFsdWUgPSB0eXBlb2YgbmV3VmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IChuZXdWYWx1ZSBhcyAoY3VycmVudDogVCkgPT4gVCkodmFsdWUpIDogbmV3VmFsdWU7XG4gICAgaWYgKCFoYXNDaGFuZ2VkKHZhbHVlLCByZXNvbHZlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YWx1ZSA9IHJlc29sdmVkVmFsdWU7XG4gICAgcnVuU3Vic2NyaWJlcnMoKTtcbiAgfTtcblxuICByZXR1cm4gW3JlYWQsIHdyaXRlLCBydW5TdWJzY3JpYmVyc107XG59XG4iXSwibWFwcGluZ3MiOiJnSkFBQUEsRUFBQSxHLHlEQUFBQyxDQUFBRCxFQUFBLENBQUFFLGFBQUEsSUFBQUEsRUFBQUMsbUJBQUEsSUFBQUEsRUFBQUMsWUFBQSxJQUFBQSxFQUFBQyxpQkFBQSxJQUFBQSxJQUFBLEksRUFBQUMsRyxFQUFBTixFLDBNQUVBTyxFQUErREMsUUFBQSxlQUMvREMsRUFBMERELFFBQUEscUJBWXBERSxF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
|
package/dist/pulses/index.mjs
CHANGED
|
@@ -99,46 +99,55 @@ function createStore(initialState, pulses, immutable = false) {
|
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
101
101
|
syncState(newState);
|
|
102
|
-
|
|
102
|
+
if (!flush) {
|
|
103
|
+
currentState = null;
|
|
104
|
+
}
|
|
105
|
+
pulseCallCount = 0;
|
|
103
106
|
debouncedUpdate();
|
|
104
107
|
}
|
|
108
|
+
function unfreezeState() {
|
|
109
|
+
if (currentState === null) {
|
|
110
|
+
currentState = deepCloneUnfreeze(localState);
|
|
111
|
+
}
|
|
112
|
+
return currentState;
|
|
113
|
+
}
|
|
105
114
|
function getPulseMethod(key) {
|
|
106
115
|
return function(...args) {
|
|
107
116
|
pulseCallCount++;
|
|
108
|
-
|
|
109
|
-
currentState = deepCloneUnfreeze(localState);
|
|
110
|
-
}
|
|
117
|
+
const state = unfreezeState();
|
|
111
118
|
const context = Object.create(pulses);
|
|
112
119
|
context.$flush = async () => {
|
|
113
120
|
if (currentState) {
|
|
114
121
|
setState(currentState, true);
|
|
115
|
-
currentState = deepCloneUnfreeze(localState);
|
|
116
122
|
}
|
|
117
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
118
123
|
};
|
|
119
124
|
const emptyFlush = async () => {
|
|
120
125
|
};
|
|
126
|
+
const handleError = (error) => {
|
|
127
|
+
console.error(`Error in pulse '${key}':`, error);
|
|
128
|
+
context.$flush = emptyFlush;
|
|
129
|
+
pulseCallCount--;
|
|
130
|
+
if (pulseCallCount <= 0) {
|
|
131
|
+
currentState = null;
|
|
132
|
+
pulseCallCount = 0;
|
|
133
|
+
}
|
|
134
|
+
throw error;
|
|
135
|
+
};
|
|
121
136
|
try {
|
|
122
|
-
const pulseResult = pulses[key].apply(context, [
|
|
137
|
+
const pulseResult = pulses[key].apply(context, [state, ...args]);
|
|
123
138
|
if (pulseResult instanceof Promise) {
|
|
124
139
|
return pulseResult.then((resolvedValue) => {
|
|
125
|
-
setState(
|
|
140
|
+
setState(state);
|
|
126
141
|
context.$flush = emptyFlush;
|
|
127
142
|
return resolvedValue;
|
|
128
|
-
}).catch(
|
|
129
|
-
console.error(`Error in pulse '${key}':`, error);
|
|
130
|
-
context.$flush = emptyFlush;
|
|
131
|
-
throw error;
|
|
132
|
-
});
|
|
143
|
+
}).catch(handleError);
|
|
133
144
|
} else {
|
|
134
|
-
setState(
|
|
145
|
+
setState(state);
|
|
135
146
|
context.$flush = emptyFlush;
|
|
136
147
|
return pulseResult;
|
|
137
148
|
}
|
|
138
149
|
} catch (error) {
|
|
139
|
-
|
|
140
|
-
context.$flush = emptyFlush;
|
|
141
|
-
throw error;
|
|
150
|
+
handleError(error);
|
|
142
151
|
}
|
|
143
152
|
};
|
|
144
153
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../lib/pulses/index.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport { updateVnode, VnodeWithDom, current, DomElement } from \"valyrian.js\";\nimport { deepCloneUnfreeze, deepFreeze, hasChanged } from \"valyrian.js/utils\";\n\ntype State = Record<string, any>;\n\nexport type PulseContext = {\n $flush: () => Promise<void>;\n};\n\nexport type Pulse<StateType, TReturn = unknown> = (state: StateType, ...args: any[]) => TReturn | Promise<TReturn>;\n\ntype ProxyState<StateType> = StateType & { [key: string]: any };\n\nconst effectStack: Function[] = [];\n\ntype StorePulses<PulsesType> = {\n [K in keyof PulsesType]: PulsesType[K] extends (state: any, ...args: infer Args) => infer R\n ? (...args: Args) => R\n : never;\n};\n\nfunction registerDomSubscription(subscribers: Set<Function>, domWithVnodesToUpdate: WeakSet<DomElement>): void {\n const currentVnode = current.vnode as VnodeWithDom;\n if (!currentVnode || domWithVnodesToUpdate.has(currentVnode.dom)) {\n return;\n }\n\n let hasParent = false;\n let parent = currentVnode.dom.parentElement as DomElement;\n while (parent) {\n if (domWithVnodesToUpdate.has(parent)) {\n hasParent = true;\n break;\n }\n parent = parent.parentElement as DomElement;\n }\n\n if (!hasParent) {\n const dom = currentVnode.dom;\n const subscription = () => {\n updateVnode(dom.vnode);\n if (!dom.parentElement) {\n subscribers.delete(subscription);\n domWithVnodesToUpdate.delete(dom);\n }\n };\n subscribers.add(subscription);\n domWithVnodesToUpdate.add(dom);\n }\n}\n\nfunction createStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(\n initialState: StateType | (() => StateType) | null,\n pulses: PulsesType & ThisType<PulsesType & PulseContext>,\n immutable = false\n): StorePulses<PulsesType> & {\n state: ProxyState<StateType>;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback: Function) => void;\n} {\n const subscribers = new Set<Function>();\n const domWithVnodesToUpdate = new WeakSet<DomElement>();\n\n const boundPulses: Record<string, Function> = {};\n for (const key in pulses) {\n if (typeof pulses[key] !== \"function\") {\n throw new Error(`Pulse '${key}' must be a function`);\n }\n if (key === \"state\") {\n throw new Error(`A pulse cannot be named 'state'`);\n }\n boundPulses[key] = getPulseMethod(key);\n }\n\n const localState: StateType =\n (typeof initialState === \"function\" ? initialState() : initialState) || ({} as StateType);\n\n function isMutable() {\n if (immutable) {\n throw new Error(\"You need to call a pulse to modify the state\");\n }\n }\n\n let currentState: StateType | null = null;\n let pulseCallCount = 0;\n\n const proxyState = new Proxy(localState, {\n get: (state, prop: string) => {\n if (currentState) {\n return currentState[prop];\n }\n\n const currentEffect = effectStack[effectStack.length - 1];\n if (currentEffect && !subscribers.has(currentEffect)) {\n subscribers.add(currentEffect);\n }\n\n registerDomSubscription(subscribers, domWithVnodesToUpdate);\n\n return state[prop];\n },\n set: (state, prop: string, value: any) => {\n isMutable();\n Reflect.set(state, prop, value);\n return true;\n },\n deleteProperty: (state, prop: string) => {\n isMutable();\n Reflect.deleteProperty(state, prop);\n return true;\n }\n });\n\n function syncState(newState: StateType) {\n for (const key in newState) {\n localState[key] = immutable ? deepFreeze(newState[key]) : newState[key];\n }\n for (const key in localState) {\n if (!(key in newState)) {\n Reflect.deleteProperty(localState, key);\n }\n }\n }\n\n let debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n function debouncedUpdate() {\n if (debounceTimeout) {\n clearTimeout(debounceTimeout);\n }\n debounceTimeout = setTimeout(() => subscribers.forEach((subscriber) => subscriber()), 0);\n }\n\n function setState(newState: StateType, flush = false) {\n pulseCallCount--;\n if (!hasChanged(localState, newState)) {\n return;\n }\n if (pulseCallCount > 0 && !flush) {\n return;\n }\n syncState(newState);\n if (!flush) {\n currentState = null;\n }\n pulseCallCount = 0;\n debouncedUpdate();\n }\n\n function unfreezeState() {\n if (currentState === null) {\n currentState = deepCloneUnfreeze(localState);\n }\n return currentState;\n }\n\n function getPulseMethod(key: string) {\n return function (this: any, ...args: any[]) {\n pulseCallCount++;\n\n const state = unfreezeState();\n\n const context = Object.create(pulses);\n\n context.$flush = async () => {\n if (currentState) {\n setState(currentState, true);\n }\n };\n\n const emptyFlush = async () => {};\n\n const handleError = (error: any) => {\n console.error(`Error in pulse '${key}':`, error);\n context.$flush = emptyFlush;\n\n pulseCallCount--;\n if (pulseCallCount <= 0) {\n currentState = null;\n pulseCallCount = 0;\n }\n\n throw error;\n };\n\n try {\n const pulseResult = pulses[key].apply(context, [state, ...args]);\n if (pulseResult instanceof Promise) {\n return pulseResult\n .then((resolvedValue) => {\n setState(state as StateType);\n context.$flush = emptyFlush;\n return resolvedValue;\n })\n .catch(handleError);\n } else {\n setState(state);\n context.$flush = emptyFlush;\n return pulseResult;\n }\n } catch (error) {\n handleError(error);\n }\n };\n }\n\n syncState(localState);\n\n const listeners: Record<string, Function[]> = {};\n const trigger = (event: string, ...args: any[]) => {\n if (listeners[event]) {\n listeners[event].forEach((callback) => callback(...args));\n }\n };\n\n const pulsesProxy = new Proxy(boundPulses, {\n get: (pulses, prop: string) => {\n if (prop === \"state\") {\n return proxyState;\n }\n if (prop === \"on\") {\n return (event: string, callback: Function) => {\n if (!listeners[event]) {\n listeners[event] = [];\n }\n listeners[event].push(callback);\n };\n }\n if (prop === \"off\") {\n return (event: string, callback: Function) => {\n if (listeners[event]) {\n listeners[event] = listeners[event].filter((cb) => cb !== callback);\n }\n };\n }\n if (!(prop in pulses)) {\n throw new Error(`Pulse '${prop}' does not exist`);\n }\n const pulseMethod = pulses[prop];\n\n return (...args: any[]) => {\n const result = pulseMethod.apply(pulseMethod, args);\n if (result instanceof Promise) {\n return result.then((r) => {\n trigger(\"pulse\", prop, args);\n return r;\n });\n }\n trigger(\"pulse\", prop, args);\n return result;\n };\n }\n });\n\n return pulsesProxy as StorePulses<PulsesType> & {\n state: ProxyState<StateType>;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback: Function) => void;\n };\n}\n\nexport function createPulseStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(\n initialState: StateType,\n pulses: PulsesType & ThisType<PulsesType & PulseContext>\n) {\n return createStore(initialState, pulses, true);\n}\n\nexport function createMutableStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(\n initialState: StateType,\n pulses: PulsesType & ThisType<PulsesType & PulseContext>\n) {\n console.warn(\n \"Warning: You are working with a mutable state. All state changes made outside of a pulse will not trigger a re-render.\"\n );\n return createStore(initialState, pulses, false);\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 runEffect();\n}\n\nexport function createPulse<T>(initialValue: T): [() => T, (newValue: T | ((current: T) => T)) => void, () => void] {\n let value = initialValue;\n const subscribers = new Set<Function>();\n const domWithVnodesToUpdate = new WeakSet<DomElement>();\n\n const runSubscribers = () => {\n subscribers.forEach((subscriber) => subscriber());\n };\n\n const read = (): T => {\n const currentEffect = effectStack[effectStack.length - 1];\n if (currentEffect && !subscribers.has(currentEffect)) {\n subscribers.add(currentEffect);\n }\n registerDomSubscription(subscribers, domWithVnodesToUpdate);\n return value;\n };\n\n const write = (newValue: T | ((current: T) => T)): void => {\n const resolvedValue = typeof newValue === \"function\" ? (newValue as (current: T) => T)(value) : newValue;\n if (!hasChanged(value, resolvedValue)) {\n return;\n }\n value = resolvedValue;\n runSubscribers();\n };\n\n return [read, write, runSubscribers];\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["pulses"]
|
|
7
7
|
}
|
package/lib/pulses/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
/* eslint-disable no-
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-function-type */
|
|
2
|
+
|
|
2
3
|
import { updateVnode, VnodeWithDom, current, DomElement } from "valyrian.js";
|
|
3
4
|
import { deepCloneUnfreeze, deepFreeze, hasChanged } from "valyrian.js/utils";
|
|
4
5
|
|
|
@@ -140,53 +141,66 @@ function createStore<StateType extends State, PulsesType extends Record<string,
|
|
|
140
141
|
return;
|
|
141
142
|
}
|
|
142
143
|
syncState(newState);
|
|
143
|
-
|
|
144
|
+
if (!flush) {
|
|
145
|
+
currentState = null;
|
|
146
|
+
}
|
|
147
|
+
pulseCallCount = 0;
|
|
144
148
|
debouncedUpdate();
|
|
145
149
|
}
|
|
146
150
|
|
|
151
|
+
function unfreezeState() {
|
|
152
|
+
if (currentState === null) {
|
|
153
|
+
currentState = deepCloneUnfreeze(localState);
|
|
154
|
+
}
|
|
155
|
+
return currentState;
|
|
156
|
+
}
|
|
157
|
+
|
|
147
158
|
function getPulseMethod(key: string) {
|
|
148
159
|
return function (this: any, ...args: any[]) {
|
|
149
160
|
pulseCallCount++;
|
|
150
|
-
if (currentState === null) {
|
|
151
|
-
currentState = deepCloneUnfreeze(localState);
|
|
152
|
-
}
|
|
153
161
|
|
|
154
|
-
|
|
162
|
+
const state = unfreezeState();
|
|
163
|
+
|
|
155
164
|
const context = Object.create(pulses);
|
|
156
165
|
|
|
157
166
|
context.$flush = async () => {
|
|
158
167
|
if (currentState) {
|
|
159
168
|
setState(currentState, true);
|
|
160
|
-
currentState = deepCloneUnfreeze(localState);
|
|
161
169
|
}
|
|
162
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
163
170
|
};
|
|
164
171
|
|
|
165
172
|
const emptyFlush = async () => {};
|
|
166
173
|
|
|
174
|
+
const handleError = (error: any) => {
|
|
175
|
+
console.error(`Error in pulse '${key}':`, error);
|
|
176
|
+
context.$flush = emptyFlush;
|
|
177
|
+
|
|
178
|
+
pulseCallCount--;
|
|
179
|
+
if (pulseCallCount <= 0) {
|
|
180
|
+
currentState = null;
|
|
181
|
+
pulseCallCount = 0;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
throw error;
|
|
185
|
+
};
|
|
186
|
+
|
|
167
187
|
try {
|
|
168
|
-
const pulseResult = pulses[key].apply(context, [
|
|
188
|
+
const pulseResult = pulses[key].apply(context, [state, ...args]);
|
|
169
189
|
if (pulseResult instanceof Promise) {
|
|
170
190
|
return pulseResult
|
|
171
191
|
.then((resolvedValue) => {
|
|
172
|
-
setState(
|
|
192
|
+
setState(state as StateType);
|
|
173
193
|
context.$flush = emptyFlush;
|
|
174
194
|
return resolvedValue;
|
|
175
195
|
})
|
|
176
|
-
.catch(
|
|
177
|
-
console.error(`Error in pulse '${key}':`, error);
|
|
178
|
-
context.$flush = emptyFlush;
|
|
179
|
-
throw error;
|
|
180
|
-
});
|
|
196
|
+
.catch(handleError);
|
|
181
197
|
} else {
|
|
182
|
-
setState(
|
|
198
|
+
setState(state);
|
|
183
199
|
context.$flush = emptyFlush;
|
|
184
200
|
return pulseResult;
|
|
185
201
|
}
|
|
186
202
|
} catch (error) {
|
|
187
|
-
|
|
188
|
-
context.$flush = emptyFlush;
|
|
189
|
-
throw error;
|
|
203
|
+
handleError(error);
|
|
190
204
|
}
|
|
191
205
|
};
|
|
192
206
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "valyrian.js",
|
|
3
|
-
"version": "8.1.
|
|
3
|
+
"version": "8.1.9",
|
|
4
4
|
"description": "Lightweight steel to forge PWAs. (Minimal Frontend Framework with server side rendering and other capabilities)",
|
|
5
5
|
"repository": "git@github.com:Masquerade-Circus/valyrian.js.git",
|
|
6
6
|
"author": "Masquerade <christian@masquerade-circus.net>",
|