valyrian.js 8.1.7 → 8.1.8
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 +5 -6
- package/dist/lib/pulses/index.d.ts.map +1 -1
- package/dist/pulses/index.js +9 -9
- 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 +9 -9
- package/dist/pulses/index.mjs.map +2 -2
- package/lib/pulses/index.ts +20 -25
- package/package.json +1 -1
|
@@ -2,20 +2,19 @@ type State = Record<string, any>;
|
|
|
2
2
|
export type PulseContext = {
|
|
3
3
|
$flush: () => Promise<void>;
|
|
4
4
|
};
|
|
5
|
-
export type Pulse<StateType, TReturn = unknown> = (
|
|
6
|
-
export type Pulses<StateType> = Record<string, Pulse<StateType, any>>;
|
|
5
|
+
export type Pulse<StateType, TReturn = unknown> = (state: StateType, ...args: any[]) => TReturn | Promise<TReturn>;
|
|
7
6
|
type ProxyState<StateType> = StateType & {
|
|
8
7
|
[key: string]: any;
|
|
9
8
|
};
|
|
10
|
-
type StorePulses<PulsesType
|
|
11
|
-
[K in keyof PulsesType]: PulsesType[K] extends (
|
|
9
|
+
type StorePulses<PulsesType> = {
|
|
10
|
+
[K in keyof PulsesType]: PulsesType[K] extends (state: any, ...args: infer Args) => infer R ? (...args: Args) => R : never;
|
|
12
11
|
};
|
|
13
|
-
export declare function createPulseStore<StateType extends State, PulsesType extends
|
|
12
|
+
export declare function createPulseStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(initialState: StateType, pulses: PulsesType & ThisType<PulsesType & PulseContext>): StorePulses<PulsesType> & {
|
|
14
13
|
state: ProxyState<StateType>;
|
|
15
14
|
on: (event: string, callback: Function) => void;
|
|
16
15
|
off: (event: string, callback: Function) => void;
|
|
17
16
|
};
|
|
18
|
-
export declare function createMutableStore<StateType extends State, PulsesType extends
|
|
17
|
+
export declare function createMutableStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(initialState: StateType, pulses: PulsesType & ThisType<PulsesType & PulseContext>): StorePulses<PulsesType> & {
|
|
19
18
|
state: ProxyState<StateType>;
|
|
20
19
|
on: (event: string, callback: Function) => void;
|
|
21
20
|
off: (event: string, callback: Function) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/pulses/index.ts"],"names":[],"mappings":"AAIA,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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/pulses/index.ts"],"names":[],"mappings":"AAIA,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;AAoOF,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;;QAhMpD,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI;SAC1C,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI;EAkMjD;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;;QAvMpD,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI;SAC1C,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI;EA4MjD;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
|
@@ -130,12 +130,13 @@ function createStore(initialState, pulses, immutable = false) {
|
|
|
130
130
|
debouncedUpdate();
|
|
131
131
|
}
|
|
132
132
|
function getPulseMethod(key) {
|
|
133
|
-
function
|
|
133
|
+
return function(...args) {
|
|
134
134
|
pulseCallCount++;
|
|
135
135
|
if (currentState === null) {
|
|
136
136
|
currentState = (0, import_utils.deepCloneUnfreeze)(localState);
|
|
137
137
|
}
|
|
138
|
-
|
|
138
|
+
const context = Object.create(pulses);
|
|
139
|
+
context.$flush = async () => {
|
|
139
140
|
if (currentState) {
|
|
140
141
|
setState(currentState, true);
|
|
141
142
|
currentState = (0, import_utils.deepCloneUnfreeze)(localState);
|
|
@@ -145,29 +146,28 @@ function createStore(initialState, pulses, immutable = false) {
|
|
|
145
146
|
const emptyFlush = async () => {
|
|
146
147
|
};
|
|
147
148
|
try {
|
|
148
|
-
const pulseResult = pulses[key].apply(
|
|
149
|
+
const pulseResult = pulses[key].apply(context, [currentState, ...args]);
|
|
149
150
|
if (pulseResult instanceof Promise) {
|
|
150
151
|
return pulseResult.then((resolvedValue) => {
|
|
151
152
|
setState(currentState);
|
|
152
|
-
|
|
153
|
+
context.$flush = emptyFlush;
|
|
153
154
|
return resolvedValue;
|
|
154
155
|
}).catch((error) => {
|
|
155
156
|
console.error(`Error in pulse '${key}':`, error);
|
|
156
|
-
|
|
157
|
+
context.$flush = emptyFlush;
|
|
157
158
|
throw error;
|
|
158
159
|
});
|
|
159
160
|
} else {
|
|
160
161
|
setState(currentState);
|
|
161
|
-
|
|
162
|
+
context.$flush = emptyFlush;
|
|
162
163
|
return pulseResult;
|
|
163
164
|
}
|
|
164
165
|
} catch (error) {
|
|
165
166
|
console.error(`Error in pulse '${key}':`, error);
|
|
166
|
-
|
|
167
|
+
context.$flush = emptyFlush;
|
|
167
168
|
throw error;
|
|
168
169
|
}
|
|
169
|
-
}
|
|
170
|
-
return pulseMethod;
|
|
170
|
+
};
|
|
171
171
|
}
|
|
172
172
|
syncState(localState);
|
|
173
173
|
const listeners = {};
|
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-console */\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> = (
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAA+D;AAC/D,mBAA0D;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-console */\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 currentState = null;\n debouncedUpdate();\n }\n\n function getPulseMethod(key: string) {\n return function (this: any, ...args: any[]) {\n pulseCallCount++;\n if (currentState === null) {\n currentState = deepCloneUnfreeze(localState);\n }\n\n // Runtime: Creamos un objeto que hereda de 'pulses' para que 'this' tenga acceso a los hermanos\n const context = Object.create(pulses);\n\n context.$flush = async () => {\n if (currentState) {\n setState(currentState, true);\n currentState = deepCloneUnfreeze(localState);\n }\n await new Promise((resolve) => setTimeout(resolve, 0));\n };\n\n const emptyFlush = async () => {};\n\n try {\n const pulseResult = pulses[key].apply(context, [currentState, ...args]);\n if (pulseResult instanceof Promise) {\n return pulseResult\n .then((resolvedValue) => {\n setState(currentState as StateType);\n context.$flush = emptyFlush;\n return resolvedValue;\n })\n .catch((error) => {\n console.error(`Error in pulse '${key}':`, error);\n context.$flush = emptyFlush;\n throw error;\n });\n } else {\n setState(currentState);\n context.$flush = emptyFlush;\n return pulseResult;\n }\n } catch (error) {\n console.error(`Error in pulse '${key}':`, error);\n context.$flush = emptyFlush;\n throw 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:()=>
|
|
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:()=>d,createPulse:()=>y,createPulseStore:()=>p});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,p=0;const d=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){p--,(0,l.hasChanged)(u,e)&&(p>0&&!t||(h(e),i=null,y&&clearTimeout(y),y=setTimeout(()=>r.forEach(e=>e()),0)))}function m(e){return function(...n){p++,null===i&&(i=(0,l.deepCloneUnfreeze)(u));const r=Object.create(t);r.$flush=async()=>{i&&(w(i,!0),i=(0,l.deepCloneUnfreeze)(u)),await new Promise(e=>setTimeout(e,0))};const o=async()=>{};try{const s=t[e].apply(r,[i,...n]);return s instanceof Promise?s.then(e=>(w(i),r.$flush=o,e)).catch(t=>{throw console.error(`Error in pulse '${e}':`,t),r.$flush=o,t}):(w(i),r.$flush=o,s)}catch(t){throw console.error(`Error in pulse '${e}':`,t),r.$flush=o,t}}}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 d;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 p(e,t){return i(e,t,!0)}function d(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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmRleF9leHBvcnRzIiwiX19leHBvcnQiLCJjcmVhdGVFZmZlY3QiLCJjcmVhdGVNdXRhYmxlU3RvcmUiLCJjcmVhdGVQdWxzZSIsImNyZWF0ZVB1bHNlU3RvcmUiLCJfX0VYUE9SVFNfXyIsImltcG9ydF92YWx5cmlhbiIsInJlcXVpcmUiLCJpbXBvcnRfdXRpbHMiLCJlZmZlY3RTdGFjayIsInJlZ2lzdGVyRG9tU3Vic2NyaXB0aW9uIiwic3Vic2NyaWJlcnMiLCJkb21XaXRoVm5vZGVzVG9VcGRhdGUiLCJjdXJyZW50Vm5vZGUiLCJjdXJyZW50Iiwidm5vZGUiLCJoYXMiLCJkb20iLCJoYXNQYXJlbnQiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50Iiwic3Vic2NyaXB0aW9uIiwidXBkYXRlVm5vZGUiLCJkZWxldGUiLCJhZGQiLCJjcmVhdGVTdG9yZSIsImluaXRpYWxTdGF0ZSIsInB1bHNlcyIsImltbXV0YWJsZSIsIlNldCIsIldlYWtTZXQiLCJib3VuZFB1bHNlcyIsImtleSIsIkVycm9yIiwiZ2V0UHVsc2VNZXRob2QiLCJsb2NhbFN0YXRlIiwiaXNNdXRhYmxlIiwiY3VycmVudFN0YXRlIiwicHVsc2VDYWxsQ291bnQiLCJwcm94eVN0YXRlIiwiUHJveHkiLCJnZXQiLCJzdGF0ZSIsInByb3AiLCJjdXJyZW50RWZmZWN0IiwibGVuZ3RoIiwic2V0IiwidmFsdWUiLCJSZWZsZWN0IiwiZGVsZXRlUHJvcGVydHkiLCJzeW5jU3RhdGUiLCJuZXdTdGF0ZSIsImRlZXBGcmVlemUiLCJkZWJvdW5jZVRpbWVvdXQiLCJzZXRTdGF0ZSIsImZsdXNoIiwiaGFzQ2hhbmdlZCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJmb3JFYWNoIiwic3Vic2NyaWJlciIsImFyZ3MiLCJkZWVwQ2xvbmVVbmZyZWV6ZSIsInRoaXMiLCIkZmx1c2giLCJhc3luYyIsIlByb21pc2UiLCJyZXNvbHZlIiwiZW1wdHlGbHVzaCIsInB1bHNlUmVzdWx0IiwiYXBwbHkiLCJ0aGVuIiwicmVzb2x2ZWRWYWx1ZSIsImNhdGNoIiwiZXJyb3IiLCJjb25zb2xlIiwibGlzdGVuZXJzIiwidHJpZ2dlciIsImV2ZW50IiwiY2FsbGJhY2siLCJwdXNoIiwiZmlsdGVyIiwiY2IiLCJwdWxzZU1ldGhvZCIsInJlc3VsdCIsInIiLCJ3YXJuIiwiZWZmZWN0IiwicnVuRWZmZWN0IiwicG9wIiwiaW5pdGlhbFZhbHVlIiwicnVuU3Vic2NyaWJlcnMiLCJuZXdWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9wdWxzZXMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgdXBkYXRlVm5vZGUsIFZub2RlV2l0aERvbSwgY3VycmVudCwgRG9tRWxlbWVudCB9IGZyb20gXCJ2YWx5cmlhbi5qc1wiO1xuaW1wb3J0IHsgZGVlcENsb25lVW5mcmVlemUsIGRlZXBGcmVlemUsIGhhc0NoYW5nZWQgfSBmcm9tIFwidmFseXJpYW4uanMvdXRpbHNcIjtcblxudHlwZSBTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbmV4cG9ydCB0eXBlIFB1bHNlQ29udGV4dCA9IHtcbiAgJGZsdXNoOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgUHVsc2U8U3RhdGVUeXBlLCBUUmV0dXJuID0gdW5rbm93bj4gPSAoXG4gIHRoaXM6IFB1bHNlQ29udGV4dCxcbiAgc3RhdGU6IFN0YXRlVHlwZSxcbiAgLi4uYXJnczogYW55W11cbikgPT4gVFJldHVybiB8IFByb21pc2U8VFJldHVybj47XG5cbmV4cG9ydCB0eXBlIFB1bHNlczxTdGF0ZVR5cGU+ID0gUmVjb3JkPHN0cmluZywgUHVsc2U8U3RhdGVUeXBlLCBhbnk+PjtcblxudHlwZSBQcm94eVN0YXRlPFN0YXRlVHlwZT4gPSBTdGF0ZVR5cGUgJiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG5jb25zdCBlZmZlY3RTdGFjazogRnVuY3Rpb25bXSA9IFtdO1xuXG50eXBlIFN0b3JlUHVsc2VzPFB1bHNlc1R5cGUgZXh0ZW5kcyBQdWxzZXM8YW55Pj4gPSB7XG4gIFtLIGluIGtleW9mIFB1bHNlc1R5cGVdOiBQdWxzZXNUeXBlW0tdIGV4dGVuZHMgKHRoaXM6IGFueSwgc3RhdGU6IGFueSwgLi4uYXJnczogaW5mZXIgQXJncykgPT4gaW5mZXIgUlxuICAgID8gKC4uLmFyZ3M6IEFyZ3MpID0+IFJcbiAgICA6IG5ldmVyO1xufTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJEb21TdWJzY3JpcHRpb24oc3Vic2NyaWJlcnM6IFNldDxGdW5jdGlvbj4sIGRvbVdpdGhWbm9kZXNUb1VwZGF0ZTogV2Vha1NldDxEb21FbGVtZW50Pik6IHZvaWQge1xuICBjb25zdCBjdXJyZW50Vm5vZGUgPSBjdXJyZW50LnZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgaWYgKCFjdXJyZW50Vm5vZGUgfHwgZG9tV2l0aFZub2Rlc1RvVXBkYXRlLmhhcyhjdXJyZW50Vm5vZGUuZG9tKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBoYXNQYXJlbnQgPSBmYWxzZTtcbiAgbGV0IHBhcmVudCA9IGN1cnJlbnRWbm9kZS5kb20ucGFyZW50RWxlbWVudCBhcyBEb21FbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKGRvbVdpdGhWbm9kZXNUb1VwZGF0ZS5oYXMocGFyZW50KSkge1xuICAgICAgaGFzUGFyZW50ID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudCBhcyBEb21FbGVtZW50O1xuICB9XG5cbiAgaWYgKCFoYXNQYXJlbnQpIHtcbiAgICBjb25zdCBkb20gPSBjdXJyZW50Vm5vZGUuZG9tO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9ICgpID0+IHtcbiAgICAgIHVwZGF0ZVZub2RlKGRvbS52bm9kZSk7XG4gICAgICBpZiAoIWRvbS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIHN1YnNjcmliZXJzLmRlbGV0ZShzdWJzY3JpcHRpb24pO1xuICAgICAgICBkb21XaXRoVm5vZGVzVG9VcGRhdGUuZGVsZXRlKGRvbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzdWJzY3JpYmVycy5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICBkb21XaXRoVm5vZGVzVG9VcGRhdGUuYWRkKGRvbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmU8U3RhdGVUeXBlIGV4dGVuZHMgU3RhdGUsIFB1bHNlc1R5cGUgZXh0ZW5kcyBQdWxzZXM8U3RhdGVUeXBlPj4oXG4gIGluaXRpYWxTdGF0ZTogU3RhdGVUeXBlIHwgKCgpID0+IFN0YXRlVHlwZSkgfCBudWxsLFxuICBwdWxzZXM6IFB1bHNlc1R5cGUsXG4gIGltbXV0YWJsZSA9IGZhbHNlXG4pOiBTdG9yZVB1bHNlczxQdWxzZXNUeXBlPiAmIHtcbiAgc3RhdGU6IFByb3h5U3RhdGU8U3RhdGVUeXBlPjtcbiAgb246IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pID0+IHZvaWQ7XG4gIG9mZjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gdm9pZDtcbn0ge1xuICBjb25zdCBzdWJzY3JpYmVycyA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG4gIGNvbnN0IGRvbVdpdGhWbm9kZXNUb1VwZGF0ZSA9IG5ldyBXZWFrU2V0PERvbUVsZW1lbnQ+KCk7XG5cbiAgY29uc3QgYm91bmRQdWxzZXM6IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBwdWxzZXMpIHtcbiAgICBpZiAodHlwZW9mIHB1bHNlc1trZXldICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHVsc2UgJyR7a2V5fScgbXVzdCBiZSBhIGZ1bmN0aW9uYCk7XG4gICAgfVxuICAgIGlmIChrZXkgPT09IFwic3RhdGVcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIHB1bHNlIGNhbm5vdCBiZSBuYW1lZCAnc3RhdGUnYCk7XG4gICAgfVxuICAgIGJvdW5kUHVsc2VzW2tleV0gPSBnZXRQdWxzZU1ldGhvZChrZXkpO1xuICB9XG5cbiAgY29uc3QgbG9jYWxTdGF0ZTogU3RhdGVUeXBlID1cbiAgICAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gaW5pdGlhbFN0YXRlKCkgOiBpbml0aWFsU3RhdGUpIHx8ICh7fSBhcyBTdGF0ZVR5cGUpO1xuXG4gIGZ1bmN0aW9uIGlzTXV0YWJsZSgpIHtcbiAgICBpZiAoaW1tdXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgbmVlZCB0byBjYWxsIGEgcHVsc2UgdG8gbW9kaWZ5IHRoZSBzdGF0ZVwiKTtcbiAgICB9XG4gIH1cblxuICBsZXQgY3VycmVudFN0YXRlOiBTdGF0ZVR5cGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IHB1bHNlQ2FsbENvdW50ID0gMDtcblxuICBjb25zdCBwcm94eVN0YXRlID0gbmV3IFByb3h5KGxvY2FsU3RhdGUsIHtcbiAgICBnZXQ6IChzdGF0ZSwgcHJvcDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFN0YXRlKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdGVbcHJvcF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRFZmZlY3QgPSBlZmZlY3RTdGFja1tlZmZlY3RTdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChjdXJyZW50RWZmZWN0ICYmICFzdWJzY3JpYmVycy5oYXMoY3VycmVudEVmZmVjdCkpIHtcbiAgICAgICAgc3Vic2NyaWJlcnMuYWRkKGN1cnJlbnRFZmZlY3QpO1xuICAgICAgfVxuXG4gICAgICByZWdpc3RlckRvbVN1YnNjcmlwdGlvbihzdWJzY3JpYmVycywgZG9tV2l0aFZub2Rlc1RvVXBkYXRlKTtcblxuICAgICAgcmV0dXJuIHN0YXRlW3Byb3BdO1xuICAgIH0sXG4gICAgc2V0OiAoc3RhdGUsIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgaXNNdXRhYmxlKCk7XG4gICAgICBSZWZsZWN0LnNldChzdGF0ZSwgcHJvcCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eTogKHN0YXRlLCBwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgIGlzTXV0YWJsZSgpO1xuICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShzdGF0ZSwgcHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHN5bmNTdGF0ZShuZXdTdGF0ZTogU3RhdGVUeXBlKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbmV3U3RhdGUpIHtcbiAgICAgIGxvY2FsU3RhdGVba2V5XSA9IGltbXV0YWJsZSA/IGRlZXBGcmVlemUobmV3U3RhdGVba2V5XSkgOiBuZXdTdGF0ZVtrZXldO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBsb2NhbFN0YXRlKSB7XG4gICAgICBpZiAoIShrZXkgaW4gbmV3U3RhdGUpKSB7XG4gICAgICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkobG9jYWxTdGF0ZSwga2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgZGVib3VuY2VUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBmdW5jdGlvbiBkZWJvdW5jZWRVcGRhdGUoKSB7XG4gICAgaWYgKGRlYm91bmNlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZW91dCk7XG4gICAgfVxuICAgIGRlYm91bmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gc3Vic2NyaWJlcnMuZm9yRWFjaCgoc3Vic2NyaWJlcikgPT4gc3Vic2NyaWJlcigpKSwgMCk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZTogU3RhdGVUeXBlLCBmbHVzaCA9IGZhbHNlKSB7XG4gICAgcHVsc2VDYWxsQ291bnQtLTtcbiAgICBpZiAoIWhhc0NoYW5nZWQobG9jYWxTdGF0ZSwgbmV3U3RhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwdWxzZUNhbGxDb3VudCA+IDAgJiYgIWZsdXNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN5bmNTdGF0ZShuZXdTdGF0ZSk7XG4gICAgY3VycmVudFN0YXRlID0gbnVsbDtcbiAgICBkZWJvdW5jZWRVcGRhdGUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFB1bHNlTWV0aG9kKGtleTogc3RyaW5nKSB7XG4gICAgZnVuY3Rpb24gcHVsc2VNZXRob2QodGhpczogUHVsc2VDb250ZXh0LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgICAgcHVsc2VDYWxsQ291bnQrKztcbiAgICAgIGlmIChjdXJyZW50U3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgY3VycmVudFN0YXRlID0gZGVlcENsb25lVW5mcmVlemUobG9jYWxTdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGZsdXNoID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgc2V0U3RhdGUoY3VycmVudFN0YXRlLCB0cnVlKTtcbiAgICAgICAgICBjdXJyZW50U3RhdGUgPSBkZWVwQ2xvbmVVbmZyZWV6ZShsb2NhbFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlbXB0eUZsdXNoID0gYXN5bmMgKCkgPT4ge307XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHB1bHNlUmVzdWx0ID0gcHVsc2VzW2tleV0uYXBwbHkodGhpcywgW2N1cnJlbnRTdGF0ZSwgLi4uYXJnc10pO1xuICAgICAgICBpZiAocHVsc2VSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcmV0dXJuIHB1bHNlUmVzdWx0XG4gICAgICAgICAgICAudGhlbigocmVzb2x2ZWRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBzZXRTdGF0ZShjdXJyZW50U3RhdGUgYXMgU3RhdGVUeXBlKTtcbiAgICAgICAgICAgICAgdGhpcy4kZmx1c2ggPSBlbXB0eUZsdXNoO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluIHB1bHNlICcke2tleX0nOmAsIGVycm9yKTtcbiAgICAgICAgICAgICAgdGhpcy4kZmx1c2ggPSBlbXB0eUZsdXNoO1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFN0YXRlKGN1cnJlbnRTdGF0ZSk7XG4gICAgICAgICAgdGhpcy4kZmx1c2ggPSBlbXB0eUZsdXNoO1xuICAgICAgICAgIHJldHVybiBwdWxzZVJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgaW4gcHVsc2UgJyR7a2V5fSc6YCwgZXJyb3IpO1xuICAgICAgICBSZWZsZWN0LnNldCh0aGlzLCBcIiRmbHVzaFwiLCBlbXB0eUZsdXNoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1bHNlTWV0aG9kO1xuICB9XG5cbiAgc3luY1N0YXRlKGxvY2FsU3RhdGUpO1xuXG4gIGNvbnN0IGxpc3RlbmVyczogUmVjb3JkPHN0cmluZywgRnVuY3Rpb25bXT4gPSB7fTtcbiAgY29uc3QgdHJpZ2dlciA9IChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIGlmIChsaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICBsaXN0ZW5lcnNbZXZlbnRdLmZvckVhY2goKGNhbGxiYWNrKSA9PiBjYWxsYmFjayguLi5hcmdzKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHB1bHNlc1Byb3h5ID0gbmV3IFByb3h5KGJvdW5kUHVsc2VzLCB7XG4gICAgZ2V0OiAocHVsc2VzLCBwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChwcm9wID09PSBcInN0YXRlXCIpIHtcbiAgICAgICAgcmV0dXJuIHByb3h5U3RhdGU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcCA9PT0gXCJvblwiKSB7XG4gICAgICAgIHJldHVybiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKCFsaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAocHJvcCA9PT0gXCJvZmZcIikge1xuICAgICAgICByZXR1cm4gKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikgPT4ge1xuICAgICAgICAgIGlmIChsaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbZXZlbnRdID0gbGlzdGVuZXJzW2V2ZW50XS5maWx0ZXIoKGNiKSA9PiBjYiAhPT0gY2FsbGJhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKHByb3AgaW4gcHVsc2VzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFB1bHNlICcke3Byb3B9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgfVxuICAgICAgY29uc3QgcHVsc2VNZXRob2QgPSBwdWxzZXNbcHJvcF07XG5cbiAgICAgIHJldHVybiAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcHVsc2VNZXRob2QuYXBwbHkocHVsc2VNZXRob2QsIGFyZ3MpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocikgPT4ge1xuICAgICAgICAgICAgdHJpZ2dlcihcInB1bHNlXCIsIHByb3AsIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlcihcInB1bHNlXCIsIHByb3AsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwdWxzZXNQcm94eSBhcyBTdG9yZVB1bHNlczxQdWxzZXNUeXBlPiAmIHtcbiAgICBzdGF0ZTogUHJveHlTdGF0ZTxTdGF0ZVR5cGU+O1xuICAgIG9uOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB2b2lkO1xuICAgIG9mZjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gdm9pZDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVB1bHNlU3RvcmU8U3RhdGVUeXBlIGV4dGVuZHMgU3RhdGUsIFB1bHNlc1R5cGUgZXh0ZW5kcyBQdWxzZXM8U3RhdGVUeXBlPj4oXG4gIGluaXRpYWxTdGF0ZTogU3RhdGVUeXBlLFxuICBwdWxzZXM6IFB1bHNlc1R5cGVcbikge1xuICByZXR1cm4gY3JlYXRlU3RvcmUoaW5pdGlhbFN0YXRlLCBwdWxzZXMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXV0YWJsZVN0b3JlPFN0YXRlVHlwZSBleHRlbmRzIFN0YXRlLCBQdWxzZXNUeXBlIGV4dGVuZHMgUHVsc2VzPFN0YXRlVHlwZT4+KFxuICBpbml0aWFsU3RhdGU6IFN0YXRlVHlwZSxcbiAgcHVsc2VzOiBQdWxzZXNUeXBlXG4pIHtcbiAgY29uc29sZS53YXJuKFxuICAgIFwiV2FybmluZzogWW91IGFyZSB3b3JraW5nIHdpdGggYSBtdXRhYmxlIHN0YXRlLiBBbGwgc3RhdGUgY2hhbmdlcyBtYWRlIG91dHNpZGUgb2YgYSBwdWxzZSB3aWxsIG5vdCB0cmlnZ2VyIGEgcmUtcmVuZGVyLlwiXG4gICk7XG4gIHJldHVybiBjcmVhdGVTdG9yZShpbml0aWFsU3RhdGUsIHB1bHNlcywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWZmZWN0KGVmZmVjdDogRnVuY3Rpb24pIHtcbiAgY29uc3QgcnVuRWZmZWN0ID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBlZmZlY3RTdGFjay5wdXNoKHJ1bkVmZmVjdCk7XG4gICAgICBlZmZlY3QoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZWZmZWN0U3RhY2sucG9wKCk7XG4gICAgfVxuICB9O1xuICBydW5FZmZlY3QoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVB1bHNlPFQ+KGluaXRpYWxWYWx1ZTogVCk6IFsoKSA9PiBULCAobmV3VmFsdWU6IFQgfCAoKGN1cnJlbnQ6IFQpID0+IFQpKSA9PiB2b2lkLCAoKSA9PiB2b2lkXSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgY29uc3Qgc3Vic2NyaWJlcnMgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuICBjb25zdCBkb21XaXRoVm5vZGVzVG9VcGRhdGUgPSBuZXcgV2Vha1NldDxEb21FbGVtZW50PigpO1xuXG4gIGNvbnN0IHJ1blN1YnNjcmliZXJzID0gKCkgPT4ge1xuICAgIHN1YnNjcmliZXJzLmZvckVhY2goKHN1YnNjcmliZXIpID0+IHN1YnNjcmliZXIoKSk7XG4gIH07XG5cbiAgY29uc3QgcmVhZCA9ICgpOiBUID0+IHtcbiAgICBjb25zdCBjdXJyZW50RWZmZWN0ID0gZWZmZWN0U3RhY2tbZWZmZWN0U3RhY2subGVuZ3RoIC0gMV07XG4gICAgaWYgKGN1cnJlbnRFZmZlY3QgJiYgIXN1YnNjcmliZXJzLmhhcyhjdXJyZW50RWZmZWN0KSkge1xuICAgICAgc3Vic2NyaWJlcnMuYWRkKGN1cnJlbnRFZmZlY3QpO1xuICAgIH1cbiAgICByZWdpc3RlckRvbVN1YnNjcmlwdGlvbihzdWJzY3JpYmVycywgZG9tV2l0aFZub2Rlc1RvVXBkYXRlKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgY29uc3Qgd3JpdGUgPSAobmV3VmFsdWU6IFQgfCAoKGN1cnJlbnQ6IFQpID0+IFQpKTogdm9pZCA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBuZXdWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gKG5ld1ZhbHVlIGFzIChjdXJyZW50OiBUKSA9PiBUKSh2YWx1ZSkgOiBuZXdWYWx1ZTtcbiAgICBpZiAoIWhhc0NoYW5nZWQodmFsdWUsIHJlc29sdmVkVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhbHVlID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICBydW5TdWJzY3JpYmVycygpO1xuICB9O1xuXG4gIHJldHVybiBbcmVhZCwgd3JpdGUsIHJ1blN1YnNjcmliZXJzXTtcbn1cbiJdLCJtYXBwaW5ncyI6ImdKQUFBQSxFQUFBLEcseURBQUFDLENBQUFELEVBQUEsQ0FBQUUsYUFBQSxJQUFBQSxFQUFBQyxtQkFBQSxJQUFBQSxFQUFBQyxZQUFBLElBQUFBLEVBQUFDLGlCQUFBLElBQUFBLElBQUEsSSxFQUFBQyxHLEVBQUFOLEUsME1BQ0FPLEVBQStEQyxRQUFBLGVBQy9EQyxFQUEwREQsUUFBQSxxQkFrQnBERSxFQUEwQixHQVFoQyxTQUFTQyxFQUF3QkMsRUFBNEJDLEdBQzNELE1BQU1DLEVBQWVQLEVBQUFRLFFBQVFDLE1BQzdCLElBQUtGLEdBQWdCRCxFQUFzQkksSUFBSUgsRUFBYUksS0FDMUQsT0FHRixJQUFJQyxHQUFZLEVBQ1pDLEVBQVNOLEVBQWFJLElBQUlHLGNBQzlCLEtBQU9ELEdBQVEsQ0FDYixHQUFJUCxFQUFzQkksSUFBSUcs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
|
|
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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
|
package/dist/pulses/index.mjs
CHANGED
|
@@ -103,12 +103,13 @@ function createStore(initialState, pulses, immutable = false) {
|
|
|
103
103
|
debouncedUpdate();
|
|
104
104
|
}
|
|
105
105
|
function getPulseMethod(key) {
|
|
106
|
-
function
|
|
106
|
+
return function(...args) {
|
|
107
107
|
pulseCallCount++;
|
|
108
108
|
if (currentState === null) {
|
|
109
109
|
currentState = deepCloneUnfreeze(localState);
|
|
110
110
|
}
|
|
111
|
-
|
|
111
|
+
const context = Object.create(pulses);
|
|
112
|
+
context.$flush = async () => {
|
|
112
113
|
if (currentState) {
|
|
113
114
|
setState(currentState, true);
|
|
114
115
|
currentState = deepCloneUnfreeze(localState);
|
|
@@ -118,29 +119,28 @@ function createStore(initialState, pulses, immutable = false) {
|
|
|
118
119
|
const emptyFlush = async () => {
|
|
119
120
|
};
|
|
120
121
|
try {
|
|
121
|
-
const pulseResult = pulses[key].apply(
|
|
122
|
+
const pulseResult = pulses[key].apply(context, [currentState, ...args]);
|
|
122
123
|
if (pulseResult instanceof Promise) {
|
|
123
124
|
return pulseResult.then((resolvedValue) => {
|
|
124
125
|
setState(currentState);
|
|
125
|
-
|
|
126
|
+
context.$flush = emptyFlush;
|
|
126
127
|
return resolvedValue;
|
|
127
128
|
}).catch((error) => {
|
|
128
129
|
console.error(`Error in pulse '${key}':`, error);
|
|
129
|
-
|
|
130
|
+
context.$flush = emptyFlush;
|
|
130
131
|
throw error;
|
|
131
132
|
});
|
|
132
133
|
} else {
|
|
133
134
|
setState(currentState);
|
|
134
|
-
|
|
135
|
+
context.$flush = emptyFlush;
|
|
135
136
|
return pulseResult;
|
|
136
137
|
}
|
|
137
138
|
} catch (error) {
|
|
138
139
|
console.error(`Error in pulse '${key}':`, error);
|
|
139
|
-
|
|
140
|
+
context.$flush = emptyFlush;
|
|
140
141
|
throw error;
|
|
141
142
|
}
|
|
142
|
-
}
|
|
143
|
-
return pulseMethod;
|
|
143
|
+
};
|
|
144
144
|
}
|
|
145
145
|
syncState(localState);
|
|
146
146
|
const listeners = {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../lib/pulses/index.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-console */\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> = (
|
|
5
|
-
"mappings": ";AACA,SAAS,aAA2B,eAA2B;AAC/D,SAAS,mBAAmB,YAAY,kBAAkB;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-console */\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 currentState = null;\n debouncedUpdate();\n }\n\n function getPulseMethod(key: string) {\n return function (this: any, ...args: any[]) {\n pulseCallCount++;\n if (currentState === null) {\n currentState = deepCloneUnfreeze(localState);\n }\n\n // Runtime: Creamos un objeto que hereda de 'pulses' para que 'this' tenga acceso a los hermanos\n const context = Object.create(pulses);\n\n context.$flush = async () => {\n if (currentState) {\n setState(currentState, true);\n currentState = deepCloneUnfreeze(localState);\n }\n await new Promise((resolve) => setTimeout(resolve, 0));\n };\n\n const emptyFlush = async () => {};\n\n try {\n const pulseResult = pulses[key].apply(context, [currentState, ...args]);\n if (pulseResult instanceof Promise) {\n return pulseResult\n .then((resolvedValue) => {\n setState(currentState as StateType);\n context.$flush = emptyFlush;\n return resolvedValue;\n })\n .catch((error) => {\n console.error(`Error in pulse '${key}':`, error);\n context.$flush = emptyFlush;\n throw error;\n });\n } else {\n setState(currentState);\n context.$flush = emptyFlush;\n return pulseResult;\n }\n } catch (error) {\n console.error(`Error in pulse '${key}':`, error);\n context.$flush = emptyFlush;\n throw 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
|
@@ -8,20 +8,14 @@ export type PulseContext = {
|
|
|
8
8
|
$flush: () => Promise<void>;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
export type Pulse<StateType, TReturn = unknown> = (
|
|
12
|
-
this: PulseContext,
|
|
13
|
-
state: StateType,
|
|
14
|
-
...args: any[]
|
|
15
|
-
) => TReturn | Promise<TReturn>;
|
|
16
|
-
|
|
17
|
-
export type Pulses<StateType> = Record<string, Pulse<StateType, any>>;
|
|
11
|
+
export type Pulse<StateType, TReturn = unknown> = (state: StateType, ...args: any[]) => TReturn | Promise<TReturn>;
|
|
18
12
|
|
|
19
13
|
type ProxyState<StateType> = StateType & { [key: string]: any };
|
|
20
14
|
|
|
21
15
|
const effectStack: Function[] = [];
|
|
22
16
|
|
|
23
|
-
type StorePulses<PulsesType
|
|
24
|
-
[K in keyof PulsesType]: PulsesType[K] extends (
|
|
17
|
+
type StorePulses<PulsesType> = {
|
|
18
|
+
[K in keyof PulsesType]: PulsesType[K] extends (state: any, ...args: infer Args) => infer R
|
|
25
19
|
? (...args: Args) => R
|
|
26
20
|
: never;
|
|
27
21
|
};
|
|
@@ -56,9 +50,9 @@ function registerDomSubscription(subscribers: Set<Function>, domWithVnodesToUpda
|
|
|
56
50
|
}
|
|
57
51
|
}
|
|
58
52
|
|
|
59
|
-
function createStore<StateType extends State, PulsesType extends
|
|
53
|
+
function createStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(
|
|
60
54
|
initialState: StateType | (() => StateType) | null,
|
|
61
|
-
pulses: PulsesType
|
|
55
|
+
pulses: PulsesType & ThisType<PulsesType & PulseContext>,
|
|
62
56
|
immutable = false
|
|
63
57
|
): StorePulses<PulsesType> & {
|
|
64
58
|
state: ProxyState<StateType>;
|
|
@@ -151,13 +145,16 @@ function createStore<StateType extends State, PulsesType extends Pulses<StateTyp
|
|
|
151
145
|
}
|
|
152
146
|
|
|
153
147
|
function getPulseMethod(key: string) {
|
|
154
|
-
function
|
|
148
|
+
return function (this: any, ...args: any[]) {
|
|
155
149
|
pulseCallCount++;
|
|
156
150
|
if (currentState === null) {
|
|
157
151
|
currentState = deepCloneUnfreeze(localState);
|
|
158
152
|
}
|
|
159
153
|
|
|
160
|
-
this
|
|
154
|
+
// Runtime: Creamos un objeto que hereda de 'pulses' para que 'this' tenga acceso a los hermanos
|
|
155
|
+
const context = Object.create(pulses);
|
|
156
|
+
|
|
157
|
+
context.$flush = async () => {
|
|
161
158
|
if (currentState) {
|
|
162
159
|
setState(currentState, true);
|
|
163
160
|
currentState = deepCloneUnfreeze(localState);
|
|
@@ -168,32 +165,30 @@ function createStore<StateType extends State, PulsesType extends Pulses<StateTyp
|
|
|
168
165
|
const emptyFlush = async () => {};
|
|
169
166
|
|
|
170
167
|
try {
|
|
171
|
-
const pulseResult = pulses[key].apply(
|
|
168
|
+
const pulseResult = pulses[key].apply(context, [currentState, ...args]);
|
|
172
169
|
if (pulseResult instanceof Promise) {
|
|
173
170
|
return pulseResult
|
|
174
171
|
.then((resolvedValue) => {
|
|
175
172
|
setState(currentState as StateType);
|
|
176
|
-
|
|
173
|
+
context.$flush = emptyFlush;
|
|
177
174
|
return resolvedValue;
|
|
178
175
|
})
|
|
179
176
|
.catch((error) => {
|
|
180
177
|
console.error(`Error in pulse '${key}':`, error);
|
|
181
|
-
|
|
178
|
+
context.$flush = emptyFlush;
|
|
182
179
|
throw error;
|
|
183
180
|
});
|
|
184
181
|
} else {
|
|
185
182
|
setState(currentState);
|
|
186
|
-
|
|
183
|
+
context.$flush = emptyFlush;
|
|
187
184
|
return pulseResult;
|
|
188
185
|
}
|
|
189
186
|
} catch (error) {
|
|
190
187
|
console.error(`Error in pulse '${key}':`, error);
|
|
191
|
-
|
|
188
|
+
context.$flush = emptyFlush;
|
|
192
189
|
throw error;
|
|
193
190
|
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return pulseMethod;
|
|
191
|
+
};
|
|
197
192
|
}
|
|
198
193
|
|
|
199
194
|
syncState(localState);
|
|
@@ -251,16 +246,16 @@ function createStore<StateType extends State, PulsesType extends Pulses<StateTyp
|
|
|
251
246
|
};
|
|
252
247
|
}
|
|
253
248
|
|
|
254
|
-
export function createPulseStore<StateType extends State, PulsesType extends
|
|
249
|
+
export function createPulseStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(
|
|
255
250
|
initialState: StateType,
|
|
256
|
-
pulses: PulsesType
|
|
251
|
+
pulses: PulsesType & ThisType<PulsesType & PulseContext>
|
|
257
252
|
) {
|
|
258
253
|
return createStore(initialState, pulses, true);
|
|
259
254
|
}
|
|
260
255
|
|
|
261
|
-
export function createMutableStore<StateType extends State, PulsesType extends
|
|
256
|
+
export function createMutableStore<StateType extends State, PulsesType extends Record<string, Pulse<StateType, any>>>(
|
|
262
257
|
initialState: StateType,
|
|
263
|
-
pulses: PulsesType
|
|
258
|
+
pulses: PulsesType & ThisType<PulsesType & PulseContext>
|
|
264
259
|
) {
|
|
265
260
|
console.warn(
|
|
266
261
|
"Warning: You are working with a mutable state. All state changes made outside of a pulse will not trigger a re-render."
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "valyrian.js",
|
|
3
|
-
"version": "8.1.
|
|
3
|
+
"version": "8.1.8",
|
|
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>",
|