@data-client/core 0.13.5 → 0.14.1
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/README.md +2 -1
- package/dist/index.js +164 -191
- package/dist/index.umd.min.js +1 -1
- package/legacy/actions.js +1 -1
- package/legacy/controller/Controller.js +8 -17
- package/legacy/controller/actions/createExpireAll.js +8 -0
- package/legacy/controller/actions/createFetch.js +27 -0
- package/legacy/controller/actions/createInvalidate.js +10 -0
- package/legacy/controller/actions/createInvalidateAll.js +8 -0
- package/legacy/controller/actions/createMeta.js +9 -0
- package/legacy/controller/actions/createOptimistic.js +17 -0
- package/legacy/controller/actions/createReset.js +8 -0
- package/legacy/controller/actions/createSet.js +17 -0
- package/legacy/controller/actions/createSetResponse.js +26 -0
- package/legacy/controller/actions/createSubscription.js +22 -0
- package/legacy/controller/actions/index.js +11 -0
- package/legacy/index.js +3 -4
- package/legacy/manager/LogoutManager.js +2 -2
- package/legacy/manager/NetworkManager.js +27 -29
- package/legacy/manager/PollingSubscription.js +3 -3
- package/legacy/manager/SubscriptionManager.js +3 -3
- package/legacy/state/reducer/fetchReducer.js +6 -10
- package/legacy/state/reducer/invalidateReducer.js +2 -2
- package/legacy/state/reducer/setReducer.js +3 -3
- package/legacy/state/reducer/setResponseReducer.js +17 -17
- package/legacy/types.js +1 -1
- package/lib/actions.d.ts +34 -40
- package/lib/actions.d.ts.map +1 -1
- package/lib/actions.js +1 -1
- package/lib/controller/Controller.d.ts +1 -1
- package/lib/controller/Controller.d.ts.map +1 -1
- package/lib/controller/Controller.js +8 -17
- package/lib/controller/actions/createExpireAll.d.ts +3 -0
- package/lib/controller/actions/createExpireAll.d.ts.map +1 -0
- package/lib/controller/actions/createExpireAll.js +8 -0
- package/lib/controller/{createFetch.d.ts → actions/createFetch.d.ts} +3 -3
- package/lib/controller/actions/createFetch.d.ts.map +1 -0
- package/lib/controller/actions/createFetch.js +27 -0
- package/lib/controller/actions/createInvalidate.d.ts +6 -0
- package/lib/controller/actions/createInvalidate.d.ts.map +1 -0
- package/lib/controller/actions/createInvalidate.js +10 -0
- package/lib/controller/actions/createInvalidateAll.d.ts +3 -0
- package/lib/controller/actions/createInvalidateAll.d.ts.map +1 -0
- package/lib/controller/actions/createInvalidateAll.js +8 -0
- package/lib/controller/actions/createMeta.d.ts +3 -0
- package/lib/controller/actions/createMeta.d.ts.map +1 -0
- package/lib/controller/actions/createMeta.js +9 -0
- package/lib/controller/actions/createOptimistic.d.ts +7 -0
- package/lib/controller/actions/createOptimistic.d.ts.map +1 -0
- package/lib/controller/actions/createOptimistic.js +17 -0
- package/lib/controller/actions/createReset.d.ts +3 -0
- package/lib/controller/actions/createReset.d.ts.map +1 -0
- package/lib/controller/actions/createReset.js +8 -0
- package/lib/controller/{createSet.d.ts → actions/createSet.d.ts} +2 -2
- package/lib/controller/actions/createSet.d.ts.map +1 -0
- package/lib/controller/actions/createSet.js +17 -0
- package/lib/controller/{createSetResponse.d.ts → actions/createSetResponse.d.ts} +4 -4
- package/lib/controller/actions/createSetResponse.d.ts.map +1 -0
- package/lib/controller/actions/createSetResponse.js +26 -0
- package/lib/controller/{createSubscription.d.ts → actions/createSubscription.d.ts} +1 -1
- package/lib/controller/actions/createSubscription.d.ts.map +1 -0
- package/lib/controller/actions/createSubscription.js +22 -0
- package/lib/controller/actions/index.d.ts +11 -0
- package/lib/controller/actions/index.d.ts.map +1 -0
- package/lib/controller/actions/index.js +11 -0
- package/lib/index.d.ts +1 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -4
- package/lib/manager/LogoutManager.js +2 -2
- package/lib/manager/NetworkManager.d.ts +2 -2
- package/lib/manager/NetworkManager.d.ts.map +1 -1
- package/lib/manager/NetworkManager.js +27 -29
- package/lib/manager/PollingSubscription.js +3 -3
- package/lib/manager/SubscriptionManager.js +3 -3
- package/lib/state/reducer/expireReducer.d.ts +2 -2
- package/lib/state/reducer/fetchReducer.d.ts.map +1 -1
- package/lib/state/reducer/fetchReducer.js +8 -12
- package/lib/state/reducer/invalidateReducer.d.ts +2 -2
- package/lib/state/reducer/invalidateReducer.js +2 -2
- package/lib/state/reducer/setReducer.d.ts +26 -1
- package/lib/state/reducer/setReducer.d.ts.map +1 -1
- package/lib/state/reducer/setReducer.js +3 -3
- package/lib/state/reducer/setResponseReducer.d.ts +28 -1
- package/lib/state/reducer/setResponseReducer.d.ts.map +1 -1
- package/lib/state/reducer/setResponseReducer.js +17 -17
- package/lib/types.d.ts +3 -3
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +1 -1
- package/package.json +2 -2
- package/src/actions.ts +36 -42
- package/src/controller/Controller.ts +15 -22
- package/src/controller/__tests__/Controller.ts +2 -2
- package/src/controller/actions/createExpireAll.ts +11 -0
- package/src/controller/{createFetch.ts → actions/createFetch.ts} +9 -13
- package/src/controller/actions/createInvalidate.ts +14 -0
- package/src/controller/actions/createInvalidateAll.ts +11 -0
- package/src/controller/actions/createMeta.ts +13 -0
- package/src/controller/actions/createOptimistic.ts +32 -0
- package/src/controller/actions/createReset.ts +9 -0
- package/src/controller/actions/createSet.ts +31 -0
- package/src/controller/{createSetResponse.ts → actions/createSetResponse.ts} +17 -23
- package/src/controller/{createSubscription.ts → actions/createSubscription.ts} +6 -10
- package/src/controller/actions/index.ts +13 -0
- package/src/index.ts +1 -3
- package/src/manager/LogoutManager.ts +1 -1
- package/src/manager/NetworkManager.ts +26 -27
- package/src/manager/PollingSubscription.ts +2 -2
- package/src/manager/SubscriptionManager.ts +2 -2
- package/src/manager/__tests__/__snapshots__/pollingSubscription.ts.snap +4 -10
- package/src/manager/__tests__/logoutManager.ts +1 -1
- package/src/manager/__tests__/networkManager.ts +37 -25
- package/src/manager/__tests__/pollingSubscription.ts +3 -3
- package/src/manager/__tests__/subscriptionManager.ts +22 -27
- package/src/state/__tests__/reducer.ts +42 -45
- package/src/state/reducer/fetchReducer.ts +12 -18
- package/src/state/reducer/invalidateReducer.ts +1 -1
- package/src/state/reducer/setReducer.ts +4 -10
- package/src/state/reducer/setResponseReducer.ts +18 -20
- package/src/types.ts +4 -4
- package/ts3.4/actions.d.ts +35 -41
- package/ts3.4/controller/Controller.d.ts +1 -1
- package/ts3.4/controller/actions/createExpireAll.d.ts +3 -0
- package/ts3.4/controller/{createFetch.d.ts → actions/createFetch.d.ts} +3 -3
- package/ts3.4/controller/{createInvalidate.d.ts → actions/createInvalidate.d.ts} +2 -2
- package/ts3.4/controller/actions/createInvalidateAll.d.ts +3 -0
- package/ts3.4/controller/actions/createMeta.d.ts +3 -0
- package/ts3.4/controller/actions/createOptimistic.d.ts +9 -0
- package/ts3.4/controller/actions/createReset.d.ts +3 -0
- package/ts3.4/controller/{createSet.d.ts → actions/createSet.d.ts} +2 -2
- package/ts3.4/controller/{createSetResponse.d.ts → actions/createSetResponse.d.ts} +4 -4
- package/ts3.4/controller/{createSubscription.d.ts → actions/createSubscription.d.ts} +1 -1
- package/ts3.4/controller/actions/index.d.ts +11 -0
- package/ts3.4/index.d.ts +2 -3
- package/ts3.4/manager/NetworkManager.d.ts +2 -2
- package/ts3.4/state/reducer/expireReducer.d.ts +2 -2
- package/ts3.4/state/reducer/invalidateReducer.d.ts +2 -2
- package/ts3.4/state/reducer/setReducer.d.ts +26 -1
- package/ts3.4/state/reducer/setResponseReducer.d.ts +28 -1
- package/ts3.4/types.d.ts +3 -3
- package/legacy/controller/createExpireAll.js +0 -8
- package/legacy/controller/createFetch.js +0 -31
- package/legacy/controller/createInvalidate.js +0 -12
- package/legacy/controller/createInvalidateAll.js +0 -8
- package/legacy/controller/createOptimistic.js +0 -27
- package/legacy/controller/createReset.js +0 -8
- package/legacy/controller/createSet.js +0 -28
- package/legacy/controller/createSetResponse.js +0 -32
- package/legacy/controller/createSubscription.js +0 -26
- package/lib/controller/createExpireAll.d.ts +0 -3
- package/lib/controller/createExpireAll.d.ts.map +0 -1
- package/lib/controller/createExpireAll.js +0 -8
- package/lib/controller/createFetch.d.ts.map +0 -1
- package/lib/controller/createFetch.js +0 -31
- package/lib/controller/createInvalidate.d.ts +0 -6
- package/lib/controller/createInvalidate.d.ts.map +0 -1
- package/lib/controller/createInvalidate.js +0 -12
- package/lib/controller/createInvalidateAll.d.ts +0 -3
- package/lib/controller/createInvalidateAll.d.ts.map +0 -1
- package/lib/controller/createInvalidateAll.js +0 -8
- package/lib/controller/createOptimistic.d.ts +0 -10
- package/lib/controller/createOptimistic.d.ts.map +0 -1
- package/lib/controller/createOptimistic.js +0 -27
- package/lib/controller/createReset.d.ts +0 -3
- package/lib/controller/createReset.d.ts.map +0 -1
- package/lib/controller/createReset.js +0 -8
- package/lib/controller/createSet.d.ts.map +0 -1
- package/lib/controller/createSet.js +0 -28
- package/lib/controller/createSetResponse.d.ts.map +0 -1
- package/lib/controller/createSetResponse.js +0 -32
- package/lib/controller/createSubscription.d.ts.map +0 -1
- package/lib/controller/createSubscription.js +0 -26
- package/src/controller/createExpireAll.ts +0 -11
- package/src/controller/createInvalidate.ts +0 -16
- package/src/controller/createInvalidateAll.ts +0 -11
- package/src/controller/createOptimistic.ts +0 -41
- package/src/controller/createReset.ts +0 -9
- package/src/controller/createSet.ts +0 -43
- package/ts3.4/controller/createExpireAll.d.ts +0 -3
- package/ts3.4/controller/createInvalidateAll.d.ts +0 -3
- package/ts3.4/controller/createOptimistic.d.ts +0 -12
- package/ts3.4/controller/createReset.d.ts +0 -3
package/dist/index.umd.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@data-client/normalizr")):"function"==typeof define&&define.amd?define(["exports","@data-client/normalizr"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).RDC=e.RDC||{},e.RDC.Core={}),e.normalizr)}(this,(function(e,t){"use strict";const s="rdc/fetch",i="rdc/set",n="rdc/setresponse",r="rdc/optimistic",a="rdc/reset",o="rdc/subscribe",c="rdc/unsubscribe",l="rdc/invalidate",h="rdc/invalidateall",d="rdc/expireall",u="rdc/gc";var p=Object.freeze({__proto__:null,FETCH_TYPE:s,SET_TYPE:i,SET_RESPONSE_TYPE:n,OPTIMISTIC_TYPE:r,RESET_TYPE:a,SUBSCRIBE_TYPE:o,UNSUBSCRIBE_TYPE:c,INVALIDATE_TYPE:l,INVALIDATEALL_TYPE:h,EXPIREALL_TYPE:d,GC_TYPE:u});function f(e,t){let s;return t.endpoint.getOptimisticResponse&&t.endpoint.sideEffect?(s=function(e,{args:t,fetchedAt:s}){var i;const n=null!=(i=e.dataExpiryLength)?i:6e4,a=Date.now(),o={args:t,fetchedAt:s,date:a,expiresAt:a+n,key:e.key(...t)};return{type:r,endpoint:e,meta:o}}(t.endpoint,{args:t.meta.args,fetchedAt:t.meta.createdAt}),Object.assign({},e,{optimistic:[...e.optimistic,s]})):e}class m extends Error{}function y(e,t,s){return"AbortError"===s.name?Object.assign({},e,{optimistic:g(e,t)}):Object.assign({},e,{meta:Object.assign({},e.meta,{[t.meta.key]:{date:t.meta.date,error:s,expiresAt:t.meta.expiresAt,errorPolicy:null==t.endpoint.errorPolicy?void 0:t.endpoint.errorPolicy(s)}}),optimistic:g(e,t)})}function g(e,t){return e.optimistic.filter((e=>e.meta.key!==t.meta.key||(e.type===r?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}function v(e){return function(o,c){switch(o||(o=E),c.type){case u:return c.entities.forEach((([e,t])=>{var s,i;null==(s=o.entities[e])||delete s[t],null==(i=o.entityMeta[e])||delete i[t]})),c.endpoints.forEach((e=>{delete o.endpoints[e],delete o.meta[e]})),o;case s:return f(o,c);case r:case n:return function(e,s,i){if(s.error)return y(e,s,s.payload);try{var n;let a;if(s.type===r){if(!s.endpoint.getOptimisticResponse)return e;try{a=s.endpoint.getOptimisticResponse.call(s.endpoint,i.snapshot(e,s.meta.fetchedAt),...s.meta.args)}catch(t){if(t.constructor===m)return e;throw t}}else a=s.payload;const{result:o,entities:c,indexes:l,entityMeta:h}=t.normalize(a,s.endpoint.schema,s.meta.args,e.entities,e.indexes,e.entityMeta,s.meta),d=Object.assign({},e.endpoints,{[s.meta.key]:o});try{if(s.endpoint.update){const e=s.endpoint.update(o,...s.meta.args);Object.keys(e).forEach((t=>{d[t]=e[t](d[t])}))}}catch(e){console.error(`The following error occured during Endpoint.update() for ${s.meta.key}`),console.error(e)}return{entities:c,indexes:l,endpoints:d,entityMeta:h,meta:Object.assign({},e.meta,{[s.meta.key]:{date:s.meta.date,expiresAt:s.meta.expiresAt,prevExpiresAt:null==(n=e.meta[s.meta.key])?void 0:n.expiresAt}}),optimistic:g(e,s),lastReset:e.lastReset}}catch(t){return"object"==typeof t&&(t.message=`Error processing ${s.meta.key}\n\nFull Schema: ${JSON.stringify(s.endpoint.schema,void 0,2)}\n\nError:\n${t.message}`,"payload"in s&&(t.payload=s.payload),t.status=400),y(e,s,t)}}(o,c,e);case i:return function(e,s,i){let n;if("function"==typeof s.value){const t=i.get(s.schema,...s.meta.args,e);if(void 0===t)return e;n=s.value(t)}else n=s.value;try{const{entities:i,indexes:r,entityMeta:a}=t.normalize(n,s.schema,s.meta.args,e.entities,e.indexes,e.entityMeta,s.meta);return{entities:i,indexes:r,endpoints:e.endpoints,entityMeta:a,meta:e.meta,optimistic:e.optimistic,lastReset:e.lastReset}}catch(t){return e}}(o,c,e);case h:case l:return function(e,t){const s=Object.assign({},e.endpoints),i=Object.assign({},e.meta),n=e=>{delete s[e];const t=Object.assign({},i[e],{expiresAt:0,invalidated:!0});delete t.error,i[e]=t};return t.type===l?n(t.meta.key):Object.keys(s).forEach((e=>{t.testKey(e)&&n(e)})),Object.assign({},e,{endpoints:s,meta:i})}(o,c);case d:return function(e,t){const s=Object.assign({},e.meta);return Object.keys(s).forEach((e=>{t.testKey(e)&&(s[e]=Object.assign({},s[e],{expiresAt:1}))})),Object.assign({},e,{meta:s})}(o,c);case a:return Object.assign({},E,{lastReset:c.date});default:return o}}}const E={entities:{},indexes:{},endpoints:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var b=Object.freeze({__proto__:null,MemoCache:t.MemoCache,INVALID:t.INVALID,initialState:E});function L(e,{args:t}){const i=e.key(...t);let n=0,r=0;const a=new Promise(((e,t)=>{[n,r]=[e,t]})),o={args:t,key:i,throttle:!e.sideEffect,resolve:n,reject:r,promise:a,createdAt:Date.now(),nm:!1};return{type:s,payload:()=>e(...t),meta:o,endpoint:e}}var S="undefined"!=typeof FormData?e=>e instanceof FormData?Object.fromEntries(e.entries()):e:e=>e;function O(e,{args:t,fetchedAt:s,value:n}){const r=Date.now(),a={args:t.map(S),fetchedAt:null!=s?s:r,date:r,expiresAt:r+6e4};return{type:i,value:n,schema:e,meta:a}}function x(e,{args:t,fetchedAt:s,response:i,error:r=!1}){var a,o;const c=r?null!=(a=e.errorExpiryLength)?a:1e3:null!=(o=e.dataExpiryLength)?o:6e4,l=Date.now(),h={args:t.map(S),fetchedAt:null!=s?s:l,date:l,expiresAt:l+c,key:e.key(...t)},d={type:n,payload:i,endpoint:e,meta:h};return r&&(d.error=!0),d}function A(e,t){return e.meta[t]}const w=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},I=()=>E;class k{constructor({dispatch:e=w,getState:s=I,memo:i=new t.MemoCache}={}){this.fetch=(e,...s)=>{const i=L(e,{args:s});return this.dispatch(i),e.schema?i.meta.promise.then((i=>t.denormalize(i,e.schema,{},s))):i.meta.promise},this.fetchIfStale=(e,...s)=>{const{data:i,expiresAt:n,expiryStatus:r}=this.getResponse(e,...s,this.getState());return r!==t.ExpiryStatus.Invalid&&Date.now()<=n?i:this.fetch(e,...s)},this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:l,meta:{key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch({type:h,testKey:t=>e.testKey(t)}),this.expireAll=e=>this.dispatch({type:d,testKey:t=>e.testKey(t)}),this.resetEntireStore=()=>this.dispatch({type:a,date:Date.now()}),this.setResponse=(e,...t)=>{const s=t[t.length-1],i=x(e,{args:t.slice(0,t.length-1),response:s});return this.dispatch(i)},this.setError=(e,...t)=>{const s=t[t.length-1],i=x(e,{args:t.slice(0,t.length-1),response:s,error:!0});return this.dispatch(i)},this.resolve=(e,t)=>this.dispatch(x(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:o,endpoint:e,meta:{args:t,key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:c,endpoint:e,meta:{args:t,key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new T(this,e,t),this.dispatch=e,this.getState=s,this.memo=i}set(e,...t){const s=t[t.length-1],i=O(e,{args:t.slice(0,t.length-1),value:s});return this.dispatch(i)}getError(e,...t){if(null===t[0])return;const s=t[t.length-1],i=t.slice(0,t.length-1),n=e.key(...i),r=A(s,n);return void 0===s.endpoints[n]||"soft"!==(null==r?void 0:r.errorPolicy)?null==r?void 0:r.error:void 0}getResponse(e,...s){const i=s[s.length-1],n=s.slice(0,s.length-1).map(S),r=1!==n.length||null!==n[0],a=r?e.key(...n):"",o=r?i.endpoints[a]:void 0,c=e.schema,l=A(i,a);let h=null==l?void 0:l.expiresAt;const d=void 0===o&&void 0!==c,u=d?this.memo.buildQueryKey(a,c,n,i.entities,i.indexes):o;if(!r)return{data:u,expiryStatus:t.ExpiryStatus.Valid,expiresAt:1/0};let p=!1;if(d)p=!t.validateQueryKey(u);else if(!c||!j(c))return{data:o,expiryStatus:null!=l&&l.invalidated?t.ExpiryStatus.Invalid:o&&!e.invalidIfStale?t.ExpiryStatus.Valid:t.ExpiryStatus.InvalidIfStale,expiresAt:h||0};const{data:f,paths:m}=this.memo.denormalize(u,c,i.entities,n);return!h&&p&&(h=1),this.getSchemaResponse(f,m,i.entityMeta,h,e.invalidIfStale||p,l)}get(e,...t){const s=t[t.length-1],i=t.slice(0,t.length-1).map(S),n=JSON.stringify(i);return this.memo.query(n,e,i,s.entities,s.indexes)}getSchemaResponse(e,s,i,n,r,a={}){const o="symbol"==typeof e;n||(n=function(e,t){let s=1/0;for(const{pk:n,key:r}of e){var i;const e=null==(i=t[r])||null==(i=i[n])?void 0:i.expiresAt;e<s&&(s=e)}return s}(s,i));return{data:e,expiryStatus:null!=a&&a.invalidated||o&&(null==a||!a.error)?t.ExpiryStatus.Invalid:o||r?t.ExpiryStatus.InvalidIfStale:t.ExpiryStatus.Valid,expiresAt:n}}}function j(e){if(t.isEntity(e))return!0;if(Array.isArray(e))return 0!==e.length&&j(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?j(t):Object.values(t).some((e=>j(e)))}return!1}class T{constructor(e,t,s=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.abort=T.abort,this.state=t,this.controller=e,this.fetchedAt=s}getResponse(e,...t){return this.controller.getResponse(e,...t,this.state)}getError(e,...t){return this.controller.getError(e,...t,this.state)}get(e,...t){return this.controller.get(e,...t,this.state)}}T.abort=new m;class R extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class _{isOnline(){return void 0===navigator.onLine||navigator.onLine}addOnlineListener(e){addEventListener("online",e)}removeOnlineListener(e){removeEventListener("online",e)}addOfflineListener(e){addEventListener("offline",e)}removeOfflineListener(e){removeEventListener("offline",e)}}class P{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let q;q="undefined"!=typeof navigator&&"function"==typeof addEventListener?_:P;var D=q;let M={};Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},Object.defineProperty(e,"ExpiryStatus",{enumerable:!0,get:function(){return t.ExpiryStatus}}),e.Controller=k,e.DefaultConnectionListener=D,e.DevToolsManager=class{constructor(e,t){this.started=!1,this.actions=[],this.maxBufferLength=100,this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(Object.assign({},M,e)),null!=e&&e.maxAge&&(this.maxBufferLength=2*e.maxAge),this.devTools?this.middleware=e=>{this.controller=e;const s=v(e);let i=e.getState();return n=>r=>{const a=n(r);return i=this.started?s(i,r):e.getState(),a.then((()=>{null!=t&&t(r)||this.handleAction(r,i.optimistic.reduce(s,i))})),a}}:this.middleware=()=>e=>t=>e(t)}handleAction(e,t){this.started?this.devTools.send(e,t):(this.actions.length>this.maxBufferLength&&(this.actions=this.actions.slice(this.maxBufferLength/2)),this.actions.push([e,t]))}init(e){this.devTools&&this.devTools.init(e)}cleanup(){}getMiddleware(){return this.middleware}},e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){e&&(this.handleLogout=e),t&&(this.shouldLogout=t),this.middleware=e=>t=>async s=>{await t(s),s.type===n&&s.error&&this.shouldLogout(s.payload)&&this.handleLogout(e)}}cleanup(){}getMiddleware(){return this.middleware}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor(e=6e4,t=1e3){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.controller=new k,this.dataExpiryLength=e,this.errorExpiryLength=t,this.middleware=e=>(this.controller=e,t=>i=>{switch(i.type){case s:return this.handleFetch(i),void 0!==i.endpoint.getOptimisticResponse&&i.endpoint.sideEffect?t(i):Promise.resolve();case n:return t(i).then((()=>{if(i.meta.key in this.fetched){var t;const s=null==(t=e.getState().meta[i.meta.key])?void 0:t.error;s?this.handleSet(x(i.endpoint,{args:i.meta.args,response:s,fetchedAt:i.meta.fetchedAt,error:!0})):this.handleSet(i)}}));case a:{const e=Object.assign({},this.rejectors);return this.clearAll(),t(i).then((()=>{for(const t in e)e[t](new R)}))}default:return t(i)}})}skipLogging(e){return e.type===s&&e.meta.key in this.fetched}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}allSettled(){const e=Object.values(this.fetched);if(e.length)return Promise.allSettled(e)}clearAll(){for(const e in this.rejectors)this.clear(e)}clear(e){this.fetched[e].catch((()=>{})),delete this.resolvers[e],delete this.rejectors[e],delete this.fetched[e],delete this.fetchedAt[e]}getLastReset(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(e){const t=e.payload,{key:s,throttle:i,resolve:n,reject:r,createdAt:a}=e.meta,o=()=>{let s=t();return i||(s=(e=>e.then((e=>(n(e),e))).catch((e=>{throw r(e),e})))(s)),s=s.then((t=>{let s=this.getLastReset();return a>=s&&this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:a}),t})).catch((t=>{const s=this.getLastReset();throw a>=s&&this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:a,error:!0}),t})),s};return i?this.throttle(s,o,a).then((e=>n(e))).catch((e=>r(e))):o().catch((()=>{}))}handleSet(e){if(e.meta.key in this.fetched){let t;t=e.error?this.rejectors[e.meta.key]:this.resolvers[e.meta.key],t(e.payload),this.clear(e.meta.key)}}getMiddleware(){return this.middleware}throttle(e,t,s){const i=this.getLastReset();return e in this.fetched&&this.fetchedAt[e]>i||(this.fetched[e]=new Promise(((t,s)=>{this.resolvers[e]=t,this.rejectors[e]=s})),this.fetchedAt[e]=s,this.idleCallback((()=>{t().catch((()=>null))}),{timeout:500})),this.fetched[e]}idleCallback(e,t){e()}},e.PollingSubscription=class{constructor(e,t,s){if(this.frequencyHistogram=new Map,this.offlineListener=()=>{this.cleanup(),this.connectionListener.addOnlineListener(this.onlineListener)},this.onlineListener=()=>{this.connectionListener.removeOnlineListener(this.onlineListener);const e=Date.now();this.startId=setTimeout((()=>{this.startId&&(delete this.startId,this.update(),this.run())}),Math.max(0,this.lastFetchTime()-e+this.frequency)),this.connectionListener.addOfflineListener(this.offlineListener)},void 0===e.endpoint.pollFrequency)throw new Error("frequency needed for polling subscription");this.endpoint=e.endpoint,this.frequency=e.endpoint.pollFrequency,this.args=e.meta.args,this.key=e.meta.key,this.frequencyHistogram.set(this.frequency,1),this.controller=t,this.connectionListener=s||new D,this.connectionListener.isOnline()?this.onlineListener():this.offlineListener()}add(e){void 0!==e&&(this.frequencyHistogram.has(e)?this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)+1):(this.frequencyHistogram.set(e,1),e<this.frequency&&(this.frequency=e,this.run())))}remove(e){if(void 0===e)return!1;if(this.frequencyHistogram.has(e)&&(this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)-1),this.frequencyHistogram.get(e)<1)){if(this.frequencyHistogram.delete(e),0===this.frequencyHistogram.size)return this.cleanup(),!0;e<=this.frequency&&(this.frequency=Math.min(...this.frequencyHistogram.keys()),this.run())}return!1}cleanup(){this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId),this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.startId&&(clearTimeout(this.startId),delete this.startId),this.connectionListener.removeOnlineListener(this.onlineListener),this.connectionListener.removeOfflineListener(this.offlineListener)}update(){const e=this.endpoint,t=function(...t){return e.call(this,...t)};Object.assign(t,this.endpoint),t.dataExpiryLength=this.frequency/2,t.errorExpiryLength=this.frequency/10,t.errorPolicy=()=>"soft",t.key=()=>this.key,this.controller.fetch(t,...this.args).catch((()=>null))}run(){this.startId||(this.intervalId&&(this.lastIntervalId=this.intervalId),this.intervalId=setInterval((()=>{this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.intervalId&&this.update()}),this.frequency))}lastFetchTime(){var e,t;return null!=(e=null==(t=this.controller.getState().meta[this.key])?void 0:t.date)?e:0}},e.ResetError=R,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.controller=new k,this.Subscription=e,this.middleware=e=>(this.controller=e,e=>t=>{switch(t.type){case o:try{this.handleSubscribe(t)}catch(e){console.error(e)}return Promise.resolve();case c:return this.handleUnsubscribe(t),Promise.resolve();default:return e(t)}})}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e){const t=e.meta.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].add(s)}else this.subscriptions[t]=new this.Subscription(e,this.controller)}handleUnsubscribe(e){const t=e.meta.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].remove(s)&&delete this.subscriptions[t]}}getMiddleware(){return this.middleware}},e.__INTERNAL__=b,e.actionTypes=p,e.applyManager=function(e,t){return e.map((e=>{const s=e.getMiddleware();return({dispatch:e,getState:i})=>(t.dispatch=e,t.getState=i,s(t))}))},e.createFetch=L,e.createReducer=v,e.createSet=O,e.createSetResponse=x,e.initialState=E,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@data-client/normalizr")):"function"==typeof define&&define.amd?define(["exports","@data-client/normalizr"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).RDC=e.RDC||{},e.RDC.Core={}),e.normalizr)}(this,(function(e,t){"use strict";function s(e,t){const s=Date.now();return{fetchedAt:null!=t?t:s,date:s,expiresAt:s+e}}const i="rdc/fetch",n="rdc/set",r="rdc/setresponse",o="rdc/optimistic",a="rdc/reset",c="rdc/subscribe",l="rdc/unsubscribe",h="rdc/invalidate",d="rdc/invalidateall",u="rdc/expireall",p="rdc/gc";var f=Object.freeze({__proto__:null,FETCH_TYPE:i,SET_TYPE:n,SET_RESPONSE_TYPE:r,OPTIMISTIC_TYPE:o,RESET_TYPE:a,SUBSCRIBE_TYPE:c,UNSUBSCRIBE_TYPE:l,INVALIDATE_TYPE:h,INVALIDATEALL_TYPE:d,EXPIREALL_TYPE:u,GC_TYPE:p});function g(e,t,i){var n;return{type:o,endpoint:e,args:t,key:e.key(...t),meta:s(null!=(n=e.dataExpiryLength)?n:6e4,i)}}class y extends Error{}function m(e,t,s){return"AbortError"===s.name?Object.assign({},e,{optimistic:v(e,t)}):Object.assign({},e,{meta:Object.assign({},e.meta,{[t.key]:{date:t.meta.date,error:s,expiresAt:t.meta.expiresAt,errorPolicy:null==t.endpoint.errorPolicy?void 0:t.endpoint.errorPolicy(s)}}),optimistic:v(e,t)})}function v(e,t){return e.optimistic.filter((e=>e.key!==t.key||(e.type===o?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}function E(e){return function(s,c){switch(s||(s=b),c.type){case p:return c.entities.forEach((([e,t])=>{var i,n;null==(i=s.entities[e])||delete i[t],null==(n=s.entityMeta[e])||delete n[t]})),c.endpoints.forEach((e=>{delete s.endpoints[e],delete s.meta[e]})),s;case i:return function(e,t){if(t.endpoint.getOptimisticResponse&&t.endpoint.sideEffect){const s=g(t.endpoint,t.args,t.meta.fetchedAt);return Object.assign({},e,{optimistic:[...e.optimistic,s]})}return e}(s,c);case o:case r:return function(e,s,i){if(s.error)return m(e,s,s.response);try{var n;let r;if(s.type===o){if(!s.endpoint.getOptimisticResponse)return e;try{r=s.endpoint.getOptimisticResponse.call(s.endpoint,i.snapshot(e,s.meta.fetchedAt),...s.args)}catch(t){if(t.constructor===y)return e;throw t}}else r=s.response;const{result:a,entities:c,indexes:l,entityMeta:h}=t.normalize(s.endpoint.schema,r,s.args,e,s.meta),d=Object.assign({},e.endpoints,{[s.key]:a});try{if(s.endpoint.update){const e=s.endpoint.update(a,...s.args);Object.keys(e).forEach((t=>{d[t]=e[t](d[t])}))}}catch(e){console.error(`The following error occured during Endpoint.update() for ${s.key}`),console.error(e)}return{entities:c,indexes:l,endpoints:d,entityMeta:h,meta:Object.assign({},e.meta,{[s.key]:{date:s.meta.date,expiresAt:s.meta.expiresAt,prevExpiresAt:null==(n=e.meta[s.key])?void 0:n.expiresAt}}),optimistic:v(e,s),lastReset:e.lastReset}}catch(t){return"object"==typeof t&&(t.message=`Error processing ${s.key}\n\nFull Schema: ${JSON.stringify(s.endpoint.schema,void 0,2)}\n\nError:\n${t.message}`,"response"in s&&(t.response=s.response),t.status=400),m(e,s,t)}}(s,c,e);case n:return function(e,s,i){let n;if("function"==typeof s.value){const t=i.get(s.schema,...s.args,e);if(void 0===t)return e;n=s.value(t)}else n=s.value;try{const{entities:i,indexes:r,entityMeta:o}=t.normalize(s.schema,n,s.args,e,s.meta);return{entities:i,indexes:r,endpoints:e.endpoints,entityMeta:o,meta:e.meta,optimistic:e.optimistic,lastReset:e.lastReset}}catch(t){return e}}(s,c,e);case d:case h:return function(e,t){const s=Object.assign({},e.endpoints),i=Object.assign({},e.meta),n=e=>{delete s[e];const t=Object.assign({},i[e],{expiresAt:0,invalidated:!0});delete t.error,i[e]=t};return t.type===h?n(t.key):Object.keys(s).forEach((e=>{t.testKey(e)&&n(e)})),Object.assign({},e,{endpoints:s,meta:i})}(s,c);case u:return function(e,t){const s=Object.assign({},e.meta);return Object.keys(s).forEach((e=>{t.testKey(e)&&(s[e]=Object.assign({},s[e],{expiresAt:1}))})),Object.assign({},e,{meta:s})}(s,c);case a:return Object.assign({},b,{lastReset:c.date});default:return s}}}const b={entities:{},indexes:{},endpoints:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var L=Object.freeze({__proto__:null,MemoCache:t.MemoCache,INVALID:t.INVALID,initialState:b});function O(e,{args:t}){return{type:c,endpoint:e,args:t,key:e.key(...t)}}function S(e,{args:t}){return{type:l,endpoint:e,args:t,key:e.key(...t)}}var I="undefined"!=typeof FormData?e=>e instanceof FormData?Object.fromEntries(e.entries()):e:e=>e;function w(e,{args:t,fetchedAt:i,response:n,error:o=!1}){var a,c;const l=o?null!=(a=e.errorExpiryLength)?a:1e3:null!=(c=e.dataExpiryLength)?c:6e4;return{type:r,endpoint:e,response:n,args:t.map(I),key:e.key(...t),meta:s(l,i),error:o}}function x(e,{args:t,fetchedAt:i,value:r}){return{type:n,schema:e,value:r,args:t.map(I),meta:s(6e4,i)}}function A(){return{type:a,date:Date.now()}}function k(e){return{type:d,testKey:e}}function j(e,{args:t}){return{type:h,key:e.key(...t)}}function _(e,{args:t}){let s=0,n=0;const r=new Promise(((e,t)=>{[s,n]=[e,t]})),o={fetchedAt:Date.now(),resolve:s,reject:n,promise:r};return{type:i,endpoint:e,args:t,key:e.key(...t),meta:o}}function R(e){return{type:u,testKey:e}}var T=Object.freeze({__proto__:null,createSubscription:O,createUnsubscription:S,createSetResponse:w,createSet:x,createReset:A,createOptimistic:g,createMeta:s,createInvalidateAll:k,createInvalidate:j,createFetch:_,createExpireAll:R});function P(e,t){return e.meta[t]}const q=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},D=()=>b;class M{constructor({dispatch:e=q,getState:s=D,memo:i=new t.MemoCache}={}){this.fetch=(e,...s)=>{const i=_(e,{args:s});return this.dispatch(i),e.schema?i.meta.promise.then((i=>t.denormalize(e.schema,i,{},s))):i.meta.promise},this.fetchIfStale=(e,...s)=>{const{data:i,expiresAt:n,expiryStatus:r}=this.getResponse(e,...s,this.getState());return r!==t.ExpiryStatus.Invalid&&Date.now()<=n?i:this.fetch(e,...s)},this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(j(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch(k((t=>e.testKey(t)))),this.expireAll=e=>this.dispatch(R((t=>e.testKey(t)))),this.resetEntireStore=()=>this.dispatch(A()),this.setResponse=(e,...t)=>{const s=t[t.length-1],i=w(e,{args:t.slice(0,t.length-1),response:s});return this.dispatch(i)},this.setError=(e,...t)=>{const s=t[t.length-1],i=w(e,{args:t.slice(0,t.length-1),response:s,error:!0});return this.dispatch(i)},this.resolve=(e,t)=>this.dispatch(w(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(O(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(S(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new H(this,e,t),this.dispatch=e,this.getState=s,this.memo=i}set(e,...t){const s=t[t.length-1],i=x(e,{args:t.slice(0,t.length-1),value:s});return this.dispatch(i)}getError(e,...t){if(null===t[0])return;const s=t[t.length-1],i=t.slice(0,t.length-1),n=e.key(...i),r=P(s,n);return void 0===s.endpoints[n]||"soft"!==(null==r?void 0:r.errorPolicy)?null==r?void 0:r.error:void 0}getResponse(e,...s){const i=s[s.length-1],n=s.slice(0,s.length-1).map(I),r=1!==n.length||null!==n[0],o=r?e.key(...n):"",a=r?i.endpoints[o]:void 0,c=e.schema,l=P(i,o);let h=null==l?void 0:l.expiresAt;const d=void 0===a&&void 0!==c,u=d?this.memo.buildQueryKey(c,n,i.entities,i.indexes,o):a;if(!r)return{data:u,expiryStatus:t.ExpiryStatus.Valid,expiresAt:1/0};let p=!1;if(d)p=!t.validateQueryKey(u);else if(!c||!C(c))return{data:a,expiryStatus:null!=l&&l.invalidated?t.ExpiryStatus.Invalid:a&&!e.invalidIfStale?t.ExpiryStatus.Valid:t.ExpiryStatus.InvalidIfStale,expiresAt:h||0};const{data:f,paths:g}=this.memo.denormalize(c,u,i.entities,n);return!h&&p&&(h=1),this.getSchemaResponse(f,g,i.entityMeta,h,e.invalidIfStale||p,l)}get(e,...t){const s=t[t.length-1],i=t.slice(0,t.length-1).map(I);return this.memo.query(e,i,s.entities,s.indexes)}getSchemaResponse(e,s,i,n,r,o={}){const a="symbol"==typeof e;n||(n=function(e,t){let s=1/0;for(const{pk:n,key:r}of e){var i;const e=null==(i=t[r])||null==(i=i[n])?void 0:i.expiresAt;e<s&&(s=e)}return s}(s,i));return{data:e,expiryStatus:null!=o&&o.invalidated||a&&(null==o||!o.error)?t.ExpiryStatus.Invalid:a||r?t.ExpiryStatus.InvalidIfStale:t.ExpiryStatus.Valid,expiresAt:n}}}function C(e){if(t.isEntity(e))return!0;if(Array.isArray(e))return 0!==e.length&&C(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?C(t):Object.values(t).some((e=>C(e)))}return!1}class H{constructor(e,t,s=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.abort=H.abort,this.state=t,this.controller=e,this.fetchedAt=s}getResponse(e,...t){return this.controller.getResponse(e,...t,this.state)}getError(e,...t){return this.controller.getError(e,...t,this.state)}get(e,...t){return this.controller.get(e,...t,this.state)}}H.abort=new y;class N extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class F{isOnline(){return void 0===navigator.onLine||navigator.onLine}addOnlineListener(e){addEventListener("online",e)}removeOnlineListener(e){removeEventListener("online",e)}addOfflineListener(e){addEventListener("offline",e)}removeOfflineListener(e){removeEventListener("offline",e)}}class z{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let Y;Y="undefined"!=typeof navigator&&"function"==typeof addEventListener?F:z;var V=Y;let B={};Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},Object.defineProperty(e,"ExpiryStatus",{enumerable:!0,get:function(){return t.ExpiryStatus}}),e.Controller=M,e.DefaultConnectionListener=V,e.DevToolsManager=class{constructor(e,t){this.started=!1,this.actions=[],this.maxBufferLength=100,this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(Object.assign({},B,e)),null!=e&&e.maxAge&&(this.maxBufferLength=2*e.maxAge),this.devTools?this.middleware=e=>{this.controller=e;const s=E(e);let i=e.getState();return n=>r=>{const o=n(r);return i=this.started?s(i,r):e.getState(),o.then((()=>{null!=t&&t(r)||this.handleAction(r,i.optimistic.reduce(s,i))})),o}}:this.middleware=()=>e=>t=>e(t)}handleAction(e,t){this.started?this.devTools.send(e,t):(this.actions.length>this.maxBufferLength&&(this.actions=this.actions.slice(this.maxBufferLength/2)),this.actions.push([e,t]))}init(e){this.devTools&&this.devTools.init(e)}cleanup(){}getMiddleware(){return this.middleware}},e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){e&&(this.handleLogout=e),t&&(this.shouldLogout=t),this.middleware=e=>t=>async s=>{await t(s),s.type===r&&s.error&&this.shouldLogout(s.response)&&this.handleLogout(e)}}cleanup(){}getMiddleware(){return this.middleware}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor(e=6e4,t=1e3){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.controller=new M,this.dataExpiryLength=e,this.errorExpiryLength=t,this.middleware=e=>(this.controller=e,t=>s=>{switch(s.type){case i:return this.handleFetch(s),void 0!==s.endpoint.getOptimisticResponse&&s.endpoint.sideEffect?t(s):Promise.resolve();case r:return t(s).then((()=>{if(s.key in this.fetched){var t;const i=null==(t=e.getState().meta[s.key])?void 0:t.error;i?this.handleSet(w(s.endpoint,{args:s.args,response:i,fetchedAt:s.meta.fetchedAt,error:!0})):this.handleSet(s)}}));case a:{const e=Object.assign({},this.rejectors);return this.clearAll(),t(s).then((()=>{for(const t in e)e[t](new N)}))}default:return t(s)}})}skipLogging(e){return e.type===i&&e.key in this.fetched}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}allSettled(){const e=Object.values(this.fetched);if(e.length)return Promise.allSettled(e)}clearAll(){for(const e in this.rejectors)this.clear(e)}clear(e){this.fetched[e].catch((()=>{})),delete this.resolvers[e],delete this.rejectors[e],delete this.fetched[e],delete this.fetchedAt[e]}getLastReset(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(e){const{resolve:t,reject:s,fetchedAt:i}=e.meta,n=!e.endpoint.sideEffect,r=()=>{let r=e.endpoint(...e.args);return n||(r=(e=>e.then((e=>(t(e),e))).catch((e=>{throw s(e),e})))(r)),r=r.then((t=>{let s=this.getLastReset();return i>=s&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i}),t})).catch((t=>{const s=this.getLastReset();throw i>=s&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i,error:!0}),t})),r};return n?this.throttle(e.key,r,i).then((e=>t(e))).catch((e=>s(e))):r().catch((()=>{}))}handleSet(e){if(e.key in this.fetched){let t;t=e.error?this.rejectors[e.key]:this.resolvers[e.key],t(e.response),this.clear(e.key)}}getMiddleware(){return this.middleware}throttle(e,t,s){const i=this.getLastReset();return e in this.fetched&&this.fetchedAt[e]>i||(this.fetched[e]=new Promise(((t,s)=>{this.resolvers[e]=t,this.rejectors[e]=s})),this.fetchedAt[e]=s,this.idleCallback((()=>{t().catch((()=>null))}),{timeout:500})),this.fetched[e]}idleCallback(e,t){e()}},e.PollingSubscription=class{constructor(e,t,s){if(this.frequencyHistogram=new Map,this.offlineListener=()=>{this.cleanup(),this.connectionListener.addOnlineListener(this.onlineListener)},this.onlineListener=()=>{this.connectionListener.removeOnlineListener(this.onlineListener);const e=Date.now();this.startId=setTimeout((()=>{this.startId&&(delete this.startId,this.update(),this.run())}),Math.max(0,this.lastFetchTime()-e+this.frequency)),this.connectionListener.addOfflineListener(this.offlineListener)},void 0===e.endpoint.pollFrequency)throw new Error("frequency needed for polling subscription");this.endpoint=e.endpoint,this.frequency=e.endpoint.pollFrequency,this.args=e.args,this.key=e.key,this.frequencyHistogram.set(this.frequency,1),this.controller=t,this.connectionListener=s||new V,this.connectionListener.isOnline()?this.onlineListener():this.offlineListener()}add(e){void 0!==e&&(this.frequencyHistogram.has(e)?this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)+1):(this.frequencyHistogram.set(e,1),e<this.frequency&&(this.frequency=e,this.run())))}remove(e){if(void 0===e)return!1;if(this.frequencyHistogram.has(e)&&(this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)-1),this.frequencyHistogram.get(e)<1)){if(this.frequencyHistogram.delete(e),0===this.frequencyHistogram.size)return this.cleanup(),!0;e<=this.frequency&&(this.frequency=Math.min(...this.frequencyHistogram.keys()),this.run())}return!1}cleanup(){this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId),this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.startId&&(clearTimeout(this.startId),delete this.startId),this.connectionListener.removeOnlineListener(this.onlineListener),this.connectionListener.removeOfflineListener(this.offlineListener)}update(){const e=this.endpoint,t=function(...t){return e.call(this,...t)};Object.assign(t,this.endpoint),t.dataExpiryLength=this.frequency/2,t.errorExpiryLength=this.frequency/10,t.errorPolicy=()=>"soft",t.key=()=>this.key,this.controller.fetch(t,...this.args).catch((()=>null))}run(){this.startId||(this.intervalId&&(this.lastIntervalId=this.intervalId),this.intervalId=setInterval((()=>{this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.intervalId&&this.update()}),this.frequency))}lastFetchTime(){var e,t;return null!=(e=null==(t=this.controller.getState().meta[this.key])?void 0:t.date)?e:0}},e.ResetError=N,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.controller=new M,this.Subscription=e,this.middleware=e=>(this.controller=e,e=>t=>{switch(t.type){case c:try{this.handleSubscribe(t)}catch(e){console.error(e)}return Promise.resolve();case l:return this.handleUnsubscribe(t),Promise.resolve();default:return e(t)}})}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e){const t=e.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].add(s)}else this.subscriptions[t]=new this.Subscription(e,this.controller)}handleUnsubscribe(e){const t=e.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].remove(s)&&delete this.subscriptions[t]}}getMiddleware(){return this.middleware}},e.__INTERNAL__=L,e.actionTypes=f,e.actions=T,e.applyManager=function(e,t){return e.map((e=>{const s=e.getMiddleware();return({dispatch:e,getState:i})=>(t.dispatch=e,t.getState=i,s(t))}))},e.createReducer=E,e.initialState=b,Object.defineProperty(e,"__esModule",{value:!0})}));
|
package/legacy/actions.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBEZW5vcm1hbGl6ZSxcbiAgRW5kcG9pbnRJbnRlcmZhY2UsXG4gIFF1ZXJ5YWJsZSxcbiAgUmVzb2x2ZVR5cGUsXG4gIFVua25vd25FcnJvcixcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB0eXBlIHtcbiAgU0VUX1RZUEUsXG4gIFJFU0VUX1RZUEUsXG4gIEZFVENIX1RZUEUsXG4gIFNVQlNDUklCRV9UWVBFLFxuICBVTlNVQlNDUklCRV9UWVBFLFxuICBJTlZBTElEQVRFX1RZUEUsXG4gIEdDX1RZUEUsXG4gIE9QVElNSVNUSUNfVFlQRSxcbiAgSU5WQUxJREFURUFMTF9UWVBFLFxuICBFWFBJUkVBTExfVFlQRSxcbiAgU0VUX1JFU1BPTlNFX1RZUEUsXG59IGZyb20gJy4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi9jb250cm9sbGVyL3R5cGVzLmpzJztcblxudHlwZSBFbmRwb2ludEFuZFVwZGF0ZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBEZW5vcm1hbGl6ZSxcbiAgRW5kcG9pbnRJbnRlcmZhY2UsXG4gIFF1ZXJ5YWJsZSxcbiAgUmVzb2x2ZVR5cGUsXG4gIFVua25vd25FcnJvcixcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB0eXBlIHtcbiAgU0VUX1RZUEUsXG4gIFJFU0VUX1RZUEUsXG4gIEZFVENIX1RZUEUsXG4gIFNVQlNDUklCRV9UWVBFLFxuICBVTlNVQlNDUklCRV9UWVBFLFxuICBJTlZBTElEQVRFX1RZUEUsXG4gIEdDX1RZUEUsXG4gIE9QVElNSVNUSUNfVFlQRSxcbiAgSU5WQUxJREFURUFMTF9UWVBFLFxuICBFWFBJUkVBTExfVFlQRSxcbiAgU0VUX1JFU1BPTlNFX1RZUEUsXG59IGZyb20gJy4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi9jb250cm9sbGVyL3R5cGVzLmpzJztcblxudHlwZSBFbmRwb2ludEFuZFVwZGF0ZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+ID0gRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG59O1xudHlwZSBFbmRwb2ludERlZmF1bHQgPSBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFbmRwb2ludEludGVyZmFjZT47XG59O1xuXG4vKiogR2VuZXJhbCBtZXRhLWRhdGEgZm9yIG9wZXJhdG9ycyAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25NZXRhIHtcbiAgcmVhZG9ubHkgZmV0Y2hlZEF0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGRhdGU6IG51bWJlcjtcbiAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG59XG5cbi8qKiBBY3Rpb24gZm9yIENvbnRyb2xsZXIuc2V0KCkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0QWN0aW9uPFMgZXh0ZW5kcyBRdWVyeWFibGUgPSBhbnk+IHtcbiAgdHlwZTogdHlwZW9mIFNFVF9UWVBFO1xuICBzY2hlbWE6IFM7XG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdO1xuICBtZXRhOiBBY3Rpb25NZXRhO1xuICB2YWx1ZToge30gfCAoKHByZXZpb3VzVmFsdWU6IERlbm9ybWFsaXplPFM+KSA9PiB7fSk7XG59XG5cbi8qIHNldFJlc3BvbnNlICovXG5leHBvcnQgaW50ZXJmYWNlIFNldFJlc3BvbnNlQWN0aW9uQmFzZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0LFxuPiB7XG4gIHR5cGU6IHR5cGVvZiBTRVRfUkVTUE9OU0VfVFlQRTtcbiAgZW5kcG9pbnQ6IEU7XG4gIGFyZ3M6IHJlYWRvbmx5IGFueVtdO1xuICBrZXk6IHN0cmluZztcbiAgbWV0YTogQWN0aW9uTWV0YTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2V0UmVzcG9uc2VBY3Rpb25TdWNjZXNzPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRBbmRVcGRhdGU8RT4gPSBFbmRwb2ludERlZmF1bHQsXG4+IGV4dGVuZHMgU2V0UmVzcG9uc2VBY3Rpb25CYXNlPEU+IHtcbiAgcmVzcG9uc2U6IFJlc29sdmVUeXBlPEU+O1xuICBlcnJvcj86IGZhbHNlO1xufVxuZXhwb3J0IGludGVyZmFjZSBTZXRSZXNwb25zZUFjdGlvbkVycm9yPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRBbmRVcGRhdGU8RT4gPSBFbmRwb2ludERlZmF1bHQsXG4+IGV4dGVuZHMgU2V0UmVzcG9uc2VBY3Rpb25CYXNlPEU+IHtcbiAgcmVzcG9uc2U6IFVua25vd25FcnJvcjtcbiAgZXJyb3I6IHRydWU7XG59XG4vKiogQWN0aW9uIGZvciBDb250cm9sbGVyLnNldFJlc3BvbnNlKCkgKi9cbmV4cG9ydCB0eXBlIFNldFJlc3BvbnNlQWN0aW9uPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRBbmRVcGRhdGU8RT4gPSBFbmRwb2ludERlZmF1bHQsXG4+ID0gU2V0UmVzcG9uc2VBY3Rpb25TdWNjZXNzPEU+IHwgU2V0UmVzcG9uc2VBY3Rpb25FcnJvcjxFPjtcblxuLyogRkVUQ0ggKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hNZXRhIHtcbiAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gIHJlc29sdmU6ICh2YWx1ZT86IGFueSB8IFByb21pc2VMaWtlPGFueT4pID0+IHZvaWQ7XG4gIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcbiAgcHJvbWlzZTogUHJvbWlzZUxpa2U8YW55Pjtcbn1cblxuLyoqIEFjdGlvbiBmb3IgQ29udHJvbGxlci5mZXRjaCgpICovXG5leHBvcnQgaW50ZXJmYWNlIEZldGNoQWN0aW9uPEUgZXh0ZW5kcyBFbmRwb2ludEFuZFVwZGF0ZTxFPiA9IEVuZHBvaW50RGVmYXVsdD4ge1xuICB0eXBlOiB0eXBlb2YgRkVUQ0hfVFlQRTtcbiAgZW5kcG9pbnQ6IEU7XG4gIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAga2V5OiBzdHJpbmc7XG4gIG1ldGE6IEZldGNoTWV0YTtcbn1cblxuLyogT1BUSU1JU1RJQyAqL1xuLyoqIEFjdGlvbiBmb3IgRW5kcG9pbnQuZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlKCkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW1pc3RpY0FjdGlvbjxcbiAgRSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0LFxuPiB7XG4gIHR5cGU6IHR5cGVvZiBPUFRJTUlTVElDX1RZUEU7XG4gIGVuZHBvaW50OiBFO1xuICBhcmdzOiByZWFkb25seSBhbnlbXTtcbiAga2V5OiBzdHJpbmc7XG4gIG1ldGE6IEFjdGlvbk1ldGE7XG4gIGVycm9yPzogZmFsc2U7XG59XG5cbi8qIFNVQlNDUklCRSAqL1xuLyoqIEFjdGlvbiBmb3IgQ29udHJvbGxlci5zdWJzY3JpYmUoKSAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpYmVBY3Rpb248XG4gIEUgZXh0ZW5kcyBFbmRwb2ludEFuZFVwZGF0ZTxFPiA9IEVuZHBvaW50RGVmYXVsdCxcbj4ge1xuICB0eXBlOiB0eXBlb2YgU1VCU0NSSUJFX1RZUEU7XG4gIGVuZHBvaW50OiBFO1xuICBhcmdzOiByZWFkb25seSBhbnlbXTtcbiAga2V5OiBzdHJpbmc7XG59XG5cbi8qKiBBY3Rpb24gZm9yIENvbnRyb2xsZXIudW5zdWJzY3JpYmUoKSAqL1xuZXhwb3J0IGludGVyZmFjZSBVbnN1YnNjcmliZUFjdGlvbjxcbiAgRSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0LFxuPiB7XG4gIHR5cGU6IHR5cGVvZiBVTlNVQlNDUklCRV9UWVBFO1xuICBlbmRwb2ludDogRTtcbiAgYXJnczogcmVhZG9ubHkgYW55W107XG4gIGtleTogc3RyaW5nO1xufVxuXG4vKiBFWFBJUlkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwaXJlQWxsQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIEVYUElSRUFMTF9UWVBFO1xuICB0ZXN0S2V5OiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbi8qIElOVkFMSURBVEUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW52YWxpZGF0ZUFsbEFjdGlvbiB7XG4gIHR5cGU6IHR5cGVvZiBJTlZBTElEQVRFQUxMX1RZUEU7XG4gIHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnZhbGlkYXRlQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIElOVkFMSURBVEVfVFlQRTtcbiAga2V5OiBzdHJpbmc7XG59XG5cbi8qIFJFU0VUICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc2V0QWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIFJFU0VUX1RZUEU7XG4gIGRhdGU6IG51bWJlcjtcbn1cblxuLyogR0MgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR0NBY3Rpb24ge1xuICB0eXBlOiB0eXBlb2YgR0NfVFlQRTtcbiAgZW50aXRpZXM6IFtzdHJpbmcsIHN0cmluZ11bXTtcbiAgZW5kcG9pbnRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uVHlwZXMgPVxuICB8IEZldGNoQWN0aW9uXG4gIHwgT3B0aW1pc3RpY0FjdGlvblxuICB8IFNldEFjdGlvblxuICB8IFNldFJlc3BvbnNlQWN0aW9uXG4gIHwgU3Vic2NyaWJlQWN0aW9uXG4gIHwgVW5zdWJzY3JpYmVBY3Rpb25cbiAgfCBJbnZhbGlkYXRlQWN0aW9uXG4gIHwgSW52YWxpZGF0ZUFsbEFjdGlvblxuICB8IEV4cGlyZUFsbEFjdGlvblxuICB8IFJlc2V0QWN0aW9uXG4gIHwgR0NBY3Rpb247XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { ExpiryStatus, MemoCache, isEntity, denormalize, validateQueryKey } from '@data-client/normalizr';
|
|
2
2
|
import AbortOptimistic from './AbortOptimistic.js';
|
|
3
|
-
import
|
|
4
|
-
import createFetch from './
|
|
5
|
-
import createInvalidate from './createInvalidate.js';
|
|
6
|
-
import createInvalidateAll from './createInvalidateAll.js';
|
|
7
|
-
import createReset from './createReset.js';
|
|
8
|
-
import createSet from './createSet.js';
|
|
9
|
-
import createSetResponse from './createSetResponse.js';
|
|
10
|
-
import { createUnsubscription, createSubscription } from './createSubscription.js';
|
|
3
|
+
import { createUnsubscription, createSubscription } from './actions/createSubscription.js';
|
|
4
|
+
import { createExpireAll, createFetch, createInvalidate, createInvalidateAll, createReset, createSet, createSetResponse } from './actions/index.js';
|
|
11
5
|
import ensurePojo from './ensurePojo.js';
|
|
12
6
|
import { initialState } from '../state/reducer/createReducer.js';
|
|
13
7
|
import selectMeta from '../state/selectMeta.js';
|
|
@@ -59,7 +53,7 @@ export default class Controller {
|
|
|
59
53
|
});
|
|
60
54
|
this.dispatch(action);
|
|
61
55
|
if (endpoint.schema) {
|
|
62
|
-
return action.meta.promise.then(input => denormalize(
|
|
56
|
+
return action.meta.promise.then(input => denormalize(endpoint.schema, input, {}, args));
|
|
63
57
|
}
|
|
64
58
|
return action.meta.promise;
|
|
65
59
|
};
|
|
@@ -126,7 +120,7 @@ export default class Controller {
|
|
|
126
120
|
return this.dispatch(action);
|
|
127
121
|
};
|
|
128
122
|
/**
|
|
129
|
-
* Resolves an inflight fetch.
|
|
123
|
+
* Resolves an inflight fetch.
|
|
130
124
|
* @see https://dataclient.io/docs/api/Controller#resolve
|
|
131
125
|
*/
|
|
132
126
|
this.resolve = (endpoint, meta) => {
|
|
@@ -214,7 +208,7 @@ export default class Controller {
|
|
|
214
208
|
const shouldQuery = cacheEndpoints === undefined && schema !== undefined;
|
|
215
209
|
const input = shouldQuery ?
|
|
216
210
|
// nothing in endpoints cache, so try querying if we have a schema to do so
|
|
217
|
-
this.memo.buildQueryKey(
|
|
211
|
+
this.memo.buildQueryKey(schema, args, state.entities, state.indexes, key) : cacheEndpoints;
|
|
218
212
|
if (!isActive) {
|
|
219
213
|
// when not active simply return the query input without denormalizing
|
|
220
214
|
return {
|
|
@@ -239,7 +233,7 @@ export default class Controller {
|
|
|
239
233
|
const {
|
|
240
234
|
data,
|
|
241
235
|
paths
|
|
242
|
-
} = this.memo.denormalize(
|
|
236
|
+
} = this.memo.denormalize(schema, input, state.entities, args);
|
|
243
237
|
|
|
244
238
|
// note: isInvalid can only be true if shouldQuery is true
|
|
245
239
|
if (!expiresAt && isInvalid) expiresAt = 1;
|
|
@@ -254,10 +248,7 @@ export default class Controller {
|
|
|
254
248
|
const state = rest[rest.length - 1];
|
|
255
249
|
// this is typescript generics breaking
|
|
256
250
|
const args = rest.slice(0, rest.length - 1).map(ensurePojo);
|
|
257
|
-
|
|
258
|
-
// NOTE: different orders can result in cache busting here; but since it's just a perf penalty we will allow for now
|
|
259
|
-
const key = JSON.stringify(args);
|
|
260
|
-
return this.memo.query(key, schema, args, state.entities, state.indexes);
|
|
251
|
+
return this.memo.query(schema, args, state.entities, state.indexes);
|
|
261
252
|
}
|
|
262
253
|
getSchemaResponse(data, paths, entityMeta, expiresAt, invalidIfStale, meta = {}) {
|
|
263
254
|
const invalidDenormalize = typeof data === 'symbol';
|
|
@@ -344,4 +335,4 @@ class Snapshot {
|
|
|
344
335
|
}
|
|
345
336
|
}
|
|
346
337
|
Snapshot.abort = new AbortOptimistic();
|
|
347
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHBpcnlTdGF0dXMiLCJNZW1vQ2FjaGUiLCJpc0VudGl0eSIsImRlbm9ybWFsaXplIiwidmFsaWRhdGVRdWVyeUtleSIsIkFib3J0T3B0aW1pc3RpYyIsImNyZWF0ZUV4cGlyZUFsbCIsImNyZWF0ZUZldGNoIiwiY3JlYXRlSW52YWxpZGF0ZSIsImNyZWF0ZUludmFsaWRhdGVBbGwiLCJjcmVhdGVSZXNldCIsImNyZWF0ZVNldCIsImNyZWF0ZVNldFJlc3BvbnNlIiwiY3JlYXRlVW5zdWJzY3JpcHRpb24iLCJjcmVhdGVTdWJzY3JpcHRpb24iLCJlbnN1cmVQb2pvIiwiaW5pdGlhbFN0YXRlIiwic2VsZWN0TWV0YSIsInVuc2V0RGlzcGF0Y2giLCJhY3Rpb24iLCJFcnJvciIsInVuc2V0U3RhdGUiLCJDb250cm9sbGVyIiwiY29uc3RydWN0b3IiLCJkaXNwYXRjaCIsImdldFN0YXRlIiwibWVtbyIsImZldGNoIiwiZW5kcG9pbnQiLCJhcmdzIiwic2NoZW1hIiwibWV0YSIsInByb21pc2UiLCJ0aGVuIiwiaW5wdXQiLCJmZXRjaElmU3RhbGUiLCJkYXRhIiwiZXhwaXJlc0F0IiwiZXhwaXJ5U3RhdHVzIiwiZ2V0UmVzcG9uc2UiLCJJbnZhbGlkIiwiRGF0ZSIsIm5vdyIsImludmFsaWRhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImludmFsaWRhdGVBbGwiLCJvcHRpb25zIiwia2V5IiwidGVzdEtleSIsImV4cGlyZUFsbCIsInJlc2V0RW50aXJlU3RvcmUiLCJzZXRSZXNwb25zZSIsInJlc3QiLCJyZXNwb25zZSIsImxlbmd0aCIsInNsaWNlIiwic2V0RXJyb3IiLCJlcnJvciIsInN1YnNjcmliZSIsInVuc3Vic2NyaWJlIiwic25hcHNob3QiLCJzdGF0ZSIsImZldGNoZWRBdCIsIlNuYXBzaG90Iiwic2V0IiwidmFsdWUiLCJnZXRFcnJvciIsImVuZHBvaW50cyIsInVuZGVmaW5lZCIsImVycm9yUG9saWN5IiwibWFwIiwiaXNBY3RpdmUiLCJjYWNoZUVuZHBvaW50cyIsInNob3VsZFF1ZXJ5IiwiYnVpbGRRdWVyeUtleSIsImVudGl0aWVzIiwiaW5kZXhlcyIsIlZhbGlkIiwiSW5maW5pdHkiLCJpc0ludmFsaWQiLCJzY2hlbWFIYXNFbnRpdHkiLCJpbnZhbGlkYXRlZCIsImludmFsaWRJZlN0YWxlIiwiSW52YWxpZElmU3RhbGUiLCJwYXRocyIsImdldFNjaGVtYVJlc3BvbnNlIiwiZW50aXR5TWV0YSIsImdldCIsIkpTT04iLCJzdHJpbmdpZnkiLCJxdWVyeSIsImludmFsaWREZW5vcm1hbGl6ZSIsImVudGl0eUV4cGlyZXNBdCIsInBrIiwiX2VudGl0eU1ldGEka2V5IiwiZW50aXR5RXhwaXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwibmVzdGVkU2NoZW1hIiwiT2JqZWN0IiwidmFsdWVzIiwic29tZSIsIngiLCJjb250cm9sbGVyIiwiYWJvcnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9Db250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRXJyb3JUeXBlcyxcbiAgU25hcHNob3RJbnRlcmZhY2UsXG4gIFNjaGVtYSxcbiAgRGVub3JtYWxpemUsXG4gIFF1ZXJ5YWJsZSxcbiAgU2NoZW1hQXJncyxcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5pbXBvcnQge1xuICBFeHBpcnlTdGF0dXMsXG4gIEVuZHBvaW50SW50ZXJmYWNlLFxuICBGZXRjaEZ1bmN0aW9uLFxuICBSZXNvbHZlVHlwZSxcbiAgRGVub3JtYWxpemVOdWxsYWJsZSxcbiAgRW50aXR5UGF0aCxcbiAgTWVtb0NhY2hlLFxuICBpc0VudGl0eSxcbiAgZGVub3JtYWxpemUsXG4gIHZhbGlkYXRlUXVlcnlLZXksXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuXG5pbXBvcnQgQWJvcnRPcHRpbWlzdGljIGZyb20gJy4vQWJvcnRPcHRpbWlzdGljLmpzJztcbmltcG9ydCBjcmVhdGVFeHBpcmVBbGwgZnJvbSAnLi9jcmVhdGVFeHBpcmVBbGwuanMnO1xuaW1wb3J0IGNyZWF0ZUZldGNoIGZyb20gJy4vY3JlYXRlRmV0Y2guanMnO1xuaW1wb3J0IGNyZWF0ZUludmFsaWRhdGUgZnJvbSAnLi9jcmVhdGVJbnZhbGlkYXRlLmpzJztcbmltcG9ydCBjcmVhdGVJbnZhbGlkYXRlQWxsIGZyb20gJy4vY3JlYXRlSW52YWxpZGF0ZUFsbC5qcyc7XG5pbXBvcnQgY3JlYXRlUmVzZXQgZnJvbSAnLi9jcmVhdGVSZXNldC5qcyc7XG5pbXBvcnQgY3JlYXRlU2V0IGZyb20gJy4vY3JlYXRlU2V0LmpzJztcbmltcG9ydCBjcmVhdGVTZXRSZXNwb25zZSBmcm9tICcuL2NyZWF0ZVNldFJlc3BvbnNlLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVVuc3Vic2NyaXB0aW9uLFxuICBjcmVhdGVTdWJzY3JpcHRpb24sXG59IGZyb20gJy4vY3JlYXRlU3Vic2NyaXB0aW9uLmpzJztcbmltcG9ydCBlbnN1cmVQb2pvIGZyb20gJy4vZW5zdXJlUG9qby5qcyc7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGluaXRpYWxTdGF0ZSB9IGZyb20gJy4uL3N0YXRlL3JlZHVjZXIvY3JlYXRlUmVkdWNlci5qcyc7XG5pbXBvcnQgc2VsZWN0TWV0YSBmcm9tICcuLi9zdGF0ZS9zZWxlY3RNZXRhLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aW9uVHlwZXMsIFN0YXRlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBHZW5lcmljRGlzcGF0Y2ggPSAodmFsdWU6IGFueSkgPT4gUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCB0eXBlIERhdGFDbGllbnREaXNwYXRjaCA9ICh2YWx1ZTogQWN0aW9uVHlwZXMpID0+IFByb21pc2U8dm9pZD47XG5cbmludGVyZmFjZSBDb25zdHJ1Y3RvclByb3BzPEQgZXh0ZW5kcyBHZW5lcmljRGlzcGF0Y2ggPSBEYXRhQ2xpZW50RGlzcGF0Y2g+IHtcbiAgZGlzcGF0Y2g/OiBEO1xuICBnZXRTdGF0ZT86ICgpID0+IFN0YXRlPHVua25vd24+O1xuICBtZW1vPzogUGljazxNZW1vQ2FjaGUsICdkZW5vcm1hbGl6ZScgfCAncXVlcnknIHwgJ2J1aWxkUXVlcnlLZXknPjtcbn1cblxuY29uc3QgdW5zZXREaXNwYXRjaCA9IChhY3Rpb246IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBEaXNwYXRjaGluZyB3aGlsZSBjb25zdHJ1Y3RpbmcgeW91ciBtaWRkbGV3YXJlIGlzIG5vdCBhbGxvd2VkLiBgICtcbiAgICAgIGBPdGhlciBtaWRkbGV3YXJlIHdvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoaXMgZGlzcGF0Y2guYCxcbiAgKTtcbn07XG5jb25zdCB1bnNldFN0YXRlID0gKCk6IFN0YXRlPHVua25vd24+ID0+IHtcbiAgLy8gVGhpcyBpcyBvbmx5IHRoZSB2YWx1ZSB1bnRpbCBpdCBpcyBzZXQgYnkgdGhlIERhdGFQcm92aWRlclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gaW5pdGlhbFN0YXRlO1xufTtcblxuLyoqXG4gKiBJbXBlcmF0aXZlIGNvbnRyb2wgb2YgUmVhY3RpdmUgRGF0YSBDbGllbnQgc3RvcmVcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udHJvbGxlcjxcbiAgRCBleHRlbmRzIEdlbmVyaWNEaXNwYXRjaCA9IERhdGFDbGllbnREaXNwYXRjaCxcbj4ge1xuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbiBhY3Rpb24gdG8gUmVhY3RpdmUgRGF0YSBDbGllbnQgcmVkdWNlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNkaXNwYXRjaFxuICAgKi9cbiAgZGVjbGFyZSByZWFkb25seSBkaXNwYXRjaDogRDtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhdGVzdCBzdGF0ZSBzbmFwc2hvdCB0aGF0IGlzIGZ1bGx5IGNvbW1pdHRlZC5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBpbXBlcmF0aXZlIHVzZS1jYXNlcyBsaWtlIGV2ZW50IGhhbmRsZXJzLlxuICAgKiBUaGlzIHNob3VsZCAqbm90KiBiZSB1c2VkIHRvIHJlbmRlcjsgaW5zdGVhZCB1c2VTdXNwZW5zZSgpIG9yIHVzZUNhY2hlKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNnZXRTdGF0ZVxuICAgKi9cbiAgZGVjbGFyZSByZWFkb25seSBnZXRTdGF0ZTogKCkgPT4gU3RhdGU8dW5rbm93bj47XG4gIC8qKlxuICAgKiBTaW5nbGV0b24gdG8gbWFpbnRhaW4gcmVmZXJlbnRpYWwgZXF1YWxpdHkgYmV0d2VlbiBjYWxsc1xuICAgKi9cbiAgZGVjbGFyZSByZWFkb25seSBtZW1vOiBQaWNrPFxuICAgIE1lbW9DYWNoZSxcbiAgICAnZGVub3JtYWxpemUnIHwgJ3F1ZXJ5JyB8ICdidWlsZFF1ZXJ5S2V5J1xuICA+O1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBkaXNwYXRjaCA9IHVuc2V0RGlzcGF0Y2ggYXMgYW55LFxuICAgIGdldFN0YXRlID0gdW5zZXRTdGF0ZSxcbiAgICBtZW1vID0gbmV3IE1lbW9DYWNoZSgpLFxuICB9OiBDb25zdHJ1Y3RvclByb3BzPEQ+ID0ge30pIHtcbiAgICB0aGlzLmRpc3BhdGNoID0gZGlzcGF0Y2g7XG4gICAgdGhpcy5nZXRTdGF0ZSA9IGdldFN0YXRlO1xuICAgIHRoaXMubWVtbyA9IG1lbW87XG4gIH1cblxuICAvKioqKioqKioqKioqKioqIEFjdGlvbiBEaXNwYXRjaGVycyAqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGVuZHBvaW50IHdpdGggZ2l2ZW4gYXJncywgdXBkYXRpbmcgdGhlIFJlYWN0aXZlIERhdGEgQ2xpZW50IGNhY2hlIHdpdGggdGhlIHJlc3BvbnNlIG9yIGVycm9yIHVwb24gY29tcGxldGlvbi5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNmZXRjaFxuICAgKi9cbiAgZmV0Y2ggPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IEVbJ3NjaGVtYSddIGV4dGVuZHMgdW5kZWZpbmVkIHwgbnVsbCA/IFJldHVyblR5cGU8RT5cbiAgOiBQcm9taXNlPERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPj4gPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZUZldGNoKGVuZHBvaW50LCB7XG4gICAgICBhcmdzLFxuICAgIH0pO1xuICAgIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcblxuICAgIGlmIChlbmRwb2ludC5zY2hlbWEpIHtcbiAgICAgIHJldHVybiBhY3Rpb24ubWV0YS5wcm9taXNlLnRoZW4oaW5wdXQgPT5cbiAgICAgICAgZGVub3JtYWxpemUoaW5wdXQsIGVuZHBvaW50LnNjaGVtYSwge30sIGFyZ3MpLFxuICAgICAgKSBhcyBhbnk7XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb24ubWV0YS5wcm9taXNlIGFzIGFueTtcbiAgfTtcblxuICAvKipcbiAgICogRmV0Y2hlcyBvbmx5IGlmIGVuZHBvaW50IGlzIGNvbnNpZGVyZWQgJ3N0YWxlJzsgb3RoZXJ3aXNlIHJldHVybnMgdW5kZWZpbmVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZmV0Y2hJZlN0YWxlXG4gICAqL1xuICBmZXRjaElmU3RhbGUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IEVbJ3NjaGVtYSddIGV4dGVuZHMgdW5kZWZpbmVkIHwgbnVsbCA/IFJldHVyblR5cGU8RT4gfCBSZXNvbHZlVHlwZTxFPlxuICA6IFByb21pc2U8RGVub3JtYWxpemU8RVsnc2NoZW1hJ10+PiB8IERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPiA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBleHBpcmVzQXQsIGV4cGlyeVN0YXR1cyB9ID0gdGhpcy5nZXRSZXNwb25zZShcbiAgICAgIGVuZHBvaW50LFxuICAgICAgLi4uYXJncyxcbiAgICAgIHRoaXMuZ2V0U3RhdGUoKSxcbiAgICApO1xuICAgIGlmIChleHBpcnlTdGF0dXMgIT09IEV4cGlyeVN0YXR1cy5JbnZhbGlkICYmIERhdGUubm93KCkgPD0gZXhwaXJlc0F0KVxuICAgICAgcmV0dXJuIGRhdGEgYXMgYW55O1xuICAgIHJldHVybiB0aGlzLmZldGNoKGVuZHBvaW50LCAuLi5hcmdzKTtcbiAgfTtcblxuICAvKipcbiAgICogRm9yY2VzIHJlZmV0Y2hpbmcgYW5kIHN1c3BlbnNlIG9uIHVzZVN1c3BlbnNlIHdpdGggdGhlIHNhbWUgRW5kcG9pbnQgYW5kIHBhcmFtZXRlcnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZVxuICAgKi9cbiAgaW52YWxpZGF0ZSA9IDxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbCA/XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICBjcmVhdGVJbnZhbGlkYXRlKGVuZHBvaW50LCB7XG4gICAgICAgICAgYXJnczogYXJncyBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBGb3JjZXMgcmVmZXRjaGluZyBhbmQgc3VzcGVuc2Ugb24gdXNlU3VzcGVuc2Ugb24gYWxsIG1hdGNoaW5nIGVuZHBvaW50IHJlc3VsdCBrZXlzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2ludmFsaWRhdGVBbGxcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaW52YWxpZGF0aW9uIGlzIGNvbW1pdGVkLlxuICAgKi9cbiAgaW52YWxpZGF0ZUFsbCA9IChvcHRpb25zOiB7IHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB9KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2goY3JlYXRlSW52YWxpZGF0ZUFsbCgoa2V5OiBzdHJpbmcpID0+IG9wdGlvbnMudGVzdEtleShrZXkpKSk7XG5cbiAgLyoqXG4gICAqIFNldHMgYWxsIG1hdGNoaW5nIGVuZHBvaW50IHJlc3VsdCBrZXlzIHRvIGJlIFNUQUxFLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2V4cGlyZUFsbFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBleHBpcnkgaXMgY29tbWl0ZWQuICpOT1QqIGZldGNoIHByb21pc2VcbiAgICovXG4gIGV4cGlyZUFsbCA9IChvcHRpb25zOiB7IHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB9KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2goY3JlYXRlRXhwaXJlQWxsKChrZXk6IHN0cmluZykgPT4gb3B0aW9ucy50ZXN0S2V5KGtleSkpKTtcblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBlbnRpcmUgUmVhY3RpdmUgRGF0YSBDbGllbnQgY2FjaGUuIEFsbCBpbmZsaWdodCByZXF1ZXN0cyB3aWxsIG5vdCByZXNvbHZlLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc2V0RW50aXJlU3RvcmVcbiAgICovXG4gIHJlc2V0RW50aXJlU3RvcmUgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmRpc3BhdGNoKGNyZWF0ZVJlc2V0KCkpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHZhbHVlIGZvciB0aGUgUXVlcnlhYmxlIGFuZCBhcmdzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldFxuICAgKi9cbiAgc2V0PFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uU2NoZW1hQXJnczxTPiwgKHByZXZpb3VzVmFsdWU6IERlbm9ybWFsaXplPFM+KSA9PiB7fV1cbiAgKTogUHJvbWlzZTx2b2lkPjtcblxuICBzZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5TY2hlbWFBcmdzPFM+LCB7fV1cbiAgKTogUHJvbWlzZTx2b2lkPjtcblxuICBzZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5TY2hlbWFBcmdzPFM+LCBhbnldXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbHVlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZVNldChzY2hlbWEsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBTY2hlbWFBcmdzPFM+LFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gICAgLy8gVE9ETzogcmVqZWN0IHdpdGggZXJyb3IgaWYgdGhpcyBmYWlscyBpbiByZWR1Y2VyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHJlc3BvbnNlIGZvciB0aGUgRW5kcG9pbnQgYW5kIGFyZ3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0UmVzcG9uc2VcbiAgICovXG4gIHNldFJlc3BvbnNlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgYW55XVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXNwb25zZTogUmVzb2x2ZVR5cGU8RT4gPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0UmVzcG9uc2UoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0cyBhbiBlcnJvciByZXNwb25zZSBmb3IgdGhlIEVuZHBvaW50IGFuZCBhcmdzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldEVycm9yXG4gICAqL1xuICBzZXRFcnJvciA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIEVycm9yXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXNwb25zZTogRXJyb3IgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0UmVzcG9uc2UoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBpbmZsaWdodCBmZXRjaC4gYGZldGNoZWRBdGAgc2hvdWxkIGBmZXRjaGAncyBgY3JlYXRlZEF0YFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc29sdmVcbiAgICovXG4gIHJlc29sdmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIG1ldGE6XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IEVycm9yO1xuICAgICAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgICAgICAgIGVycm9yOiB0cnVlO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IGFueTtcbiAgICAgICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgICAgICBlcnJvcj86IGZhbHNlIHwgdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwgbWV0YSBhcyBhbnkpKTtcbiAgfTtcblxuICAvKipcbiAgICogTWFya3MgYSBuZXcgc3Vic2NyaXB0aW9uIHRvIGEgZ2l2ZW4gRW5kcG9pbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc3Vic2NyaWJlXG4gICAqL1xuICBzdWJzY3JpYmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPFxuICAgICAgRmV0Y2hGdW5jdGlvbixcbiAgICAgIFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCB8IGZhbHNlXG4gICAgPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIGFyZ3NbMF0gIT09IG51bGwgP1xuICAgICAgdGhpcy5kaXNwYXRjaChcbiAgICAgICAgY3JlYXRlU3Vic2NyaXB0aW9uKGVuZHBvaW50LCB7XG4gICAgICAgICAgYXJnczogYXJncyBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBNYXJrcyBjb21wbGV0aW9uIG9mIHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Vuc3Vic2NyaWJlXG4gICAqL1xuICB1bnN1YnNjcmliZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U8XG4gICAgICBGZXRjaEZ1bmN0aW9uLFxuICAgICAgU2NoZW1hIHwgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkIHwgZmFsc2VcbiAgICA+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbCA/XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICBjcmVhdGVVbnN1YnNjcmlwdGlvbihlbmRwb2ludCwge1xuICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgUGFyYW1ldGVyczxFPixcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgOiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAvKioqKioqKioqKioqKioqIE1vcmUgKioqKioqKioqKioqKioqL1xuXG4gIC8qIFRPRE86XG4gIGFib3J0ID0gPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IFByb21pc2U8dm9pZD5cbiAgKi9cblxuICAvKipcbiAgICogR2V0cyBhIHNuYXBzaG90IChodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc25hcHNob3RcbiAgICovXG4gIHNuYXBzaG90ID0gKHN0YXRlOiBTdGF0ZTx1bmtub3duPiwgZmV0Y2hlZEF0PzogbnVtYmVyKTogU25hcHNob3RJbnRlcmZhY2UgPT4ge1xuICAgIHJldHVybiBuZXcgU25hcHNob3QodGhpcywgc3RhdGUsIGZldGNoZWRBdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVycm9yLCBpZiBhbnksIGZvciBhIGdpdmVuIGVuZHBvaW50LiBSZXR1cm5zIHVuZGVmaW5lZCBmb3Igbm8gZXJyb3JzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldEVycm9yXG4gICAqL1xuICBnZXRFcnJvcjxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIFN0YXRlPHVua25vd24+XVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkO1xuXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+LCBTdGF0ZTx1bmtub3duPl1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcihcbiAgICBlbmRwb2ludDogRW5kcG9pbnRJbnRlcmZhY2UsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLnVua25vd25bXSwgU3RhdGU8dW5rbm93bj5dXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQge1xuICAgIGlmIChyZXN0WzBdID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8dW5rbm93bj47XG4gICAgLy8gdGhpcyBpcyB0eXBlc2NyaXB0IGdlbmVyaWNzIGJyZWFraW5nXG4gICAgY29uc3QgYXJnczogYW55ID0gcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGtleSA9IGVuZHBvaW50LmtleSguLi5hcmdzKTtcblxuICAgIGNvbnN0IG1ldGEgPSBzZWxlY3RNZXRhKHN0YXRlLCBrZXkpO1xuICAgIGNvbnN0IGVycm9yID0gc3RhdGUuZW5kcG9pbnRzW2tleV07XG5cbiAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBtZXRhPy5lcnJvclBvbGljeSA9PT0gJ3NvZnQnKSByZXR1cm47XG5cbiAgICByZXR1cm4gbWV0YT8uZXJyb3IgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIChnbG9iYWxseSByZWZlcmVudGlhbGx5IHN0YWJsZSkgcmVzcG9uc2UgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQvYXJncyBwYWlyIGZyb20gc3RhdGUgZ2l2ZW4uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0UmVzcG9uc2VcbiAgICovXG4gIGdldFJlc3BvbnNlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDpcbiAgICAgIHwgcmVhZG9ubHkgW251bGwsIFN0YXRlPHVua25vd24+XVxuICAgICAgfCByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgU3RhdGU8dW5rbm93bj5dXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFtcbiAgICAgIC4uLihyZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdKSxcbiAgICAgIFN0YXRlPHVua25vd24+LFxuICAgIF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlKFxuICAgIGVuZHBvaW50OiBFbmRwb2ludEludGVyZmFjZSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4udW5rbm93bltdLCBTdGF0ZTx1bmtub3duPl1cbiAgKToge1xuICAgIGRhdGE6IHVua25vd247XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH0ge1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3RcbiAgICAgIC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpXG4gICAgICAvLyBoYW5kbGUgRm9ybURhdGFcbiAgICAgIC5tYXAoZW5zdXJlUG9qbyk7XG4gICAgY29uc3QgaXNBY3RpdmUgPSBhcmdzLmxlbmd0aCAhPT0gMSB8fCBhcmdzWzBdICE9PSBudWxsO1xuICAgIGNvbnN0IGtleSA9IGlzQWN0aXZlID8gZW5kcG9pbnQua2V5KC4uLmFyZ3MpIDogJyc7XG4gICAgY29uc3QgY2FjaGVFbmRwb2ludHMgPSBpc0FjdGl2ZSA/IHN0YXRlLmVuZHBvaW50c1trZXldIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNjaGVtYSA9IGVuZHBvaW50LnNjaGVtYTtcbiAgICBjb25zdCBtZXRhID0gc2VsZWN0TWV0YShzdGF0ZSwga2V5KTtcbiAgICBsZXQgZXhwaXJlc0F0ID0gbWV0YT8uZXhwaXJlc0F0O1xuICAgIC8vIGlmIHdlIGhhdmUgbm8gZW5kcG9pbnQgZW50cnksIGFuZCBvdXIgZW5kcG9pbnQgaGFzIGEgc2NoZW1hIC0gdHJ5IHF1ZXJ5aW5nIHRoZSBzdG9yZVxuICAgIGNvbnN0IHNob3VsZFF1ZXJ5ID0gY2FjaGVFbmRwb2ludHMgPT09IHVuZGVmaW5lZCAmJiBzY2hlbWEgIT09IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGlucHV0ID1cbiAgICAgIHNob3VsZFF1ZXJ5ID9cbiAgICAgICAgLy8gbm90aGluZyBpbiBlbmRwb2ludHMgY2FjaGUsIHNvIHRyeSBxdWVyeWluZyBpZiB3ZSBoYXZlIGEgc2NoZW1hIHRvIGRvIHNvXG4gICAgICAgIHRoaXMubWVtby5idWlsZFF1ZXJ5S2V5KFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgICBzdGF0ZS5lbnRpdGllcyBhcyBhbnksXG4gICAgICAgICAgc3RhdGUuaW5kZXhlcyxcbiAgICAgICAgKVxuICAgICAgOiBjYWNoZUVuZHBvaW50cztcblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIC8vIHdoZW4gbm90IGFjdGl2ZSBzaW1wbHkgcmV0dXJuIHRoZSBxdWVyeSBpbnB1dCB3aXRob3V0IGRlbm9ybWFsaXppbmdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGlucHV0IGFzIGFueSxcbiAgICAgICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXMuVmFsaWQsXG4gICAgICAgIGV4cGlyZXNBdDogSW5maW5pdHksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBpc0ludmFsaWQgPSBmYWxzZTtcbiAgICBpZiAoc2hvdWxkUXVlcnkpIHtcbiAgICAgIGlzSW52YWxpZCA9ICF2YWxpZGF0ZVF1ZXJ5S2V5KGlucHV0KTtcbiAgICB9IGVsc2UgaWYgKCFzY2hlbWEgfHwgIXNjaGVtYUhhc0VudGl0eShzY2hlbWEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBjYWNoZUVuZHBvaW50cyxcbiAgICAgICAgZXhwaXJ5U3RhdHVzOlxuICAgICAgICAgIG1ldGE/LmludmFsaWRhdGVkID8gRXhwaXJ5U3RhdHVzLkludmFsaWRcbiAgICAgICAgICA6IGNhY2hlRW5kcG9pbnRzICYmICFlbmRwb2ludC5pbnZhbGlkSWZTdGFsZSA/IEV4cGlyeVN0YXR1cy5WYWxpZFxuICAgICAgICAgIDogRXhwaXJ5U3RhdHVzLkludmFsaWRJZlN0YWxlLFxuICAgICAgICBleHBpcmVzQXQ6IGV4cGlyZXNBdCB8fCAwLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBzZWNvbmQgYXJndW1lbnQgaXMgZmFsc2UgaWYgYW55IGVudGl0aWVzIGFyZSBtaXNzaW5nXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGNvbnN0IHsgZGF0YSwgcGF0aHMgfSA9IHRoaXMubWVtby5kZW5vcm1hbGl6ZShcbiAgICAgIGlucHV0LFxuICAgICAgc2NoZW1hLFxuICAgICAgc3RhdGUuZW50aXRpZXMsXG4gICAgICBhcmdzLFxuICAgICkgYXMgeyBkYXRhOiBhbnk7IHBhdGhzOiBFbnRpdHlQYXRoW10gfTtcblxuICAgIC8vIG5vdGU6IGlzSW52YWxpZCBjYW4gb25seSBiZSB0cnVlIGlmIHNob3VsZFF1ZXJ5IGlzIHRydWVcbiAgICBpZiAoIWV4cGlyZXNBdCAmJiBpc0ludmFsaWQpIGV4cGlyZXNBdCA9IDE7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFSZXNwb25zZShcbiAgICAgIGRhdGEsXG4gICAgICBwYXRocyxcbiAgICAgIHN0YXRlLmVudGl0eU1ldGEsXG4gICAgICBleHBpcmVzQXQsXG4gICAgICBlbmRwb2ludC5pbnZhbGlkSWZTdGFsZSB8fCBpc0ludmFsaWQsXG4gICAgICBtZXRhLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUXVlcmllcyB0aGUgc3RvcmUgZm9yIGEgUXVlcmFibGUgc2NoZW1hXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0XG4gICAqL1xuICBnZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFtcbiAgICAgIC4uLlNjaGVtYUFyZ3M8Uz4sXG4gICAgICBQaWNrPFN0YXRlPHVua25vd24+LCAnZW50aXRpZXMnIHwgJ2VudGl0eU1ldGEnPixcbiAgICBdXG4gICk6IERlbm9ybWFsaXplTnVsbGFibGU8Uz4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPGFueT47XG4gICAgLy8gdGhpcyBpcyB0eXBlc2NyaXB0IGdlbmVyaWNzIGJyZWFraW5nXG4gICAgY29uc3QgYXJnczogYW55ID0gcmVzdFxuICAgICAgLnNsaWNlKDAsIHJlc3QubGVuZ3RoIC0gMSlcbiAgICAgIC5tYXAoZW5zdXJlUG9qbykgYXMgU2NoZW1hQXJnczxTPjtcblxuICAgIC8vIE5PVEU6IGRpZmZlcmVudCBvcmRlcnMgY2FuIHJlc3VsdCBpbiBjYWNoZSBidXN0aW5nIGhlcmU7IGJ1dCBzaW5jZSBpdCdzIGp1c3QgYSBwZXJmIHBlbmFsdHkgd2Ugd2lsbCBhbGxvdyBmb3Igbm93XG4gICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoYXJncyk7XG5cbiAgICByZXR1cm4gdGhpcy5tZW1vLnF1ZXJ5KFxuICAgICAga2V5LFxuICAgICAgc2NoZW1hLFxuICAgICAgYXJncyxcbiAgICAgIHN0YXRlLmVudGl0aWVzIGFzIGFueSxcbiAgICAgIHN0YXRlLmluZGV4ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NoZW1hUmVzcG9uc2U8VD4oXG4gICAgZGF0YTogVCxcbiAgICBwYXRoczogRW50aXR5UGF0aFtdLFxuICAgIGVudGl0eU1ldGE6IFN0YXRlPHVua25vd24+WydlbnRpdHlNZXRhJ10sXG4gICAgZXhwaXJlc0F0OiBudW1iZXIsXG4gICAgaW52YWxpZElmU3RhbGU6IGJvb2xlYW4sXG4gICAgbWV0YTogeyBlcnJvcj86IHVua25vd247IGludmFsaWRhdGVkPzogdW5rbm93biB9ID0ge30sXG4gICk6IHtcbiAgICBkYXRhOiBUO1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9IHtcbiAgICBjb25zdCBpbnZhbGlkRGVub3JtYWxpemUgPSB0eXBlb2YgZGF0YSA9PT0gJ3N5bWJvbCc7XG5cbiAgICAvLyBmYWxsYmFjayB0byBlbnRpdHkgZXhwaXJ5IHRpbWVcbiAgICBpZiAoIWV4cGlyZXNBdCkge1xuICAgICAgZXhwaXJlc0F0ID0gZW50aXR5RXhwaXJlc0F0KHBhdGhzLCBlbnRpdHlNZXRhKTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9jb25jZXB0cy9leHBpcnktcG9saWN5I2V4cGlyeS1zdGF0dXNcbiAgICAvLyB3ZSBkb24ndCB0cmFjayB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YWxlIG9yIGZyZXNoIGJlY2F1c2UgdGhhdCBpcyB0aWVkIHRvIHRyaWdnZXJpbmdcbiAgICAvLyBjb25kaXRpb25zXG4gICAgY29uc3QgZXhwaXJ5U3RhdHVzID1cbiAgICAgIG1ldGE/LmludmFsaWRhdGVkIHx8IChpbnZhbGlkRGVub3JtYWxpemUgJiYgIW1ldGE/LmVycm9yKSA/XG4gICAgICAgIEV4cGlyeVN0YXR1cy5JbnZhbGlkXG4gICAgICA6IGludmFsaWREZW5vcm1hbGl6ZSB8fCBpbnZhbGlkSWZTdGFsZSA/IEV4cGlyeVN0YXR1cy5JbnZhbGlkSWZTdGFsZVxuICAgICAgOiBFeHBpcnlTdGF0dXMuVmFsaWQ7XG5cbiAgICByZXR1cm4geyBkYXRhLCBleHBpcnlTdGF0dXMsIGV4cGlyZXNBdCB9O1xuICB9XG59XG5cbi8vIGJlbmNobWFyazogaHR0cHM6Ly93d3cubWVhc3VyZXRoYXQubmV0L0JlbmNobWFya3MvU2hvdy8yNDY5MS8wL21pbi1yZWR1Y2VyLXZzLWltcGVyYXRpdmUtd2l0aC1wYXRoc1xuLy8gZWFybGllc3QgZXhwaXJ5IGRpY3RhdGVzIGFnZVxuZnVuY3Rpb24gZW50aXR5RXhwaXJlc0F0KFxuICBwYXRoczogRW50aXR5UGF0aFtdLFxuICBlbnRpdHlNZXRhOiB7XG4gICAgcmVhZG9ubHkgW2VudGl0eUtleTogc3RyaW5nXToge1xuICAgICAgcmVhZG9ubHkgW3BrOiBzdHJpbmddOiB7XG4gICAgICAgIHJlYWRvbmx5IGRhdGU6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGZldGNoZWRBdDogbnVtYmVyOyAvLyBUaGlzIGlzIG9ubHkgdGhlIHZhbHVlIHVudGlsIGl0IGlzIHNldCBieSB0aGUgRGF0YVByb3ZpZGVyXG4gICAgICB9O1xuICAgIH07XG4gIH0sXG4pIHtcbiAgbGV0IGV4cGlyZXNBdCA9IEluZmluaXR5O1xuICBmb3IgKGNvbnN0IHsgcGssIGtleSB9IG9mIHBhdGhzKSB7XG4gICAgY29uc3QgZW50aXR5RXhwaXJ5ID0gZW50aXR5TWV0YVtrZXldPy5bcGtdPy5leHBpcmVzQXQ7XG4gICAgLy8gZXhwaXJlc0F0IHdpbGwgYWx3YXlzIHJlc29sdmUgdG8gZmFsc2Ugd2l0aCBhbnkgY29tcGFyaXNvblxuICAgIGlmIChlbnRpdHlFeHBpcnkgPCBleHBpcmVzQXQpIGV4cGlyZXNBdCA9IGVudGl0eUV4cGlyeTtcbiAgfVxuICByZXR1cm4gZXhwaXJlc0F0O1xufVxuXG4vKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNjaGVtYSBoYXMgYW55IGVudGl0aWVzLlxuICpcbiAqIFdpdGhvdXQgZW50aXRpZXMsIGRlbm9ybWFsaXphdGlvbiBpcyBub3QgbmVlZGVkLCBhbmQgcmVzdWx0cyBzaG91bGQgbm90IGJlIHF1ZXJpZWQuXG4gKi9cbmZ1bmN0aW9uIHNjaGVtYUhhc0VudGl0eShzY2hlbWE6IFNjaGVtYSk6IGJvb2xlYW4ge1xuICBpZiAoaXNFbnRpdHkoc2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgcmV0dXJuIHNjaGVtYS5sZW5ndGggIT09IDAgJiYgc2NoZW1hSGFzRW50aXR5KHNjaGVtYVswXSk7XG4gIGlmIChzY2hlbWEgJiYgKHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBzY2hlbWEgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY29uc3QgbmVzdGVkU2NoZW1hID1cbiAgICAgICdzY2hlbWEnIGluIHNjaGVtYSA/IChzY2hlbWEuc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIFNjaGVtYT4pIDogc2NoZW1hO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkU2NoZW1hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2NoZW1hSGFzRW50aXR5KG5lc3RlZFNjaGVtYSk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG5lc3RlZFNjaGVtYSkuc29tZSh4ID0+IHNjaGVtYUhhc0VudGl0eSh4KSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgdHlwZSB7IEVycm9yVHlwZXMgfTtcblxuY2xhc3MgU25hcHNob3Q8VCA9IHVua25vd24+IGltcGxlbWVudHMgU25hcHNob3RJbnRlcmZhY2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgYWJvcnQgPSBuZXcgQWJvcnRPcHRpbWlzdGljKCk7XG5cbiAgcHJpdmF0ZSBzdGF0ZTogU3RhdGU8VD47XG4gIHByaXZhdGUgY29udHJvbGxlcjogQ29udHJvbGxlcjtcbiAgcmVhZG9ubHkgZmV0Y2hlZEF0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFib3J0ID0gU25hcHNob3QuYWJvcnQ7XG5cbiAgY29uc3RydWN0b3IoY29udHJvbGxlcjogQ29udHJvbGxlciwgc3RhdGU6IFN0YXRlPFQ+LCBmZXRjaGVkQXQgPSAwKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgdGhpcy5mZXRjaGVkQXQgPSBmZXRjaGVkQXQ7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqIERhdGEgQWNjZXNzICoqKioqKioqKioqKioqKi9cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldFJlc3BvbnNlICovXG4gIGdldFJlc3BvbnNlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFJlc3BvbnNlKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRFcnJvciAqL1xuICBnZXRFcnJvcjxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkO1xuXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcjxFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleSc+PihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0RXJyb3IoZW5kcG9pbnQsIC4uLmFyZ3MsIHRoaXMuc3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlZCBtZW1vaXplZCB2YWx1ZSBmb3IgYW55IFF1ZXJhYmxlIHNjaGVtYVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRcbiAgICovXG4gIGdldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4uYXJnczogU2NoZW1hQXJnczxTPlxuICApOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldChzY2hlbWEsIC4uLmFyZ3MsIHRoaXMuc3RhdGUpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQVFBLFNBQ0VBLFlBQVksRUFNWkMsU0FBUyxFQUNUQyxRQUFRLEVBQ1JDLFdBQVcsRUFDWEMsZ0JBQWdCLFFBQ1gsd0JBQXdCO0FBRS9CLE9BQU9DLGVBQWUsTUFBTSxzQkFBc0I7QUFDbEQsT0FBT0MsZUFBZSxNQUFNLHNCQUFzQjtBQUNsRCxPQUFPQyxXQUFXLE1BQU0sa0JBQWtCO0FBQzFDLE9BQU9DLGdCQUFnQixNQUFNLHVCQUF1QjtBQUNwRCxPQUFPQyxtQkFBbUIsTUFBTSwwQkFBMEI7QUFDMUQsT0FBT0MsV0FBVyxNQUFNLGtCQUFrQjtBQUMxQyxPQUFPQyxTQUFTLE1BQU0sZ0JBQWdCO0FBQ3RDLE9BQU9DLGlCQUFpQixNQUFNLHdCQUF3QjtBQUN0RCxTQUNFQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixRQUNiLHlCQUF5QjtBQUNoQyxPQUFPQyxVQUFVLE1BQU0saUJBQWlCO0FBRXhDLFNBQVNDLFlBQVksUUFBUSxtQ0FBbUM7QUFDaEUsT0FBT0MsVUFBVSxNQUFNLHdCQUF3QjtBQVkvQyxNQUFNQyxhQUFhLEdBQUlDLE1BQWUsSUFBb0I7RUFDeEQsTUFBTSxJQUFJQyxLQUFLLENBQ2IsaUVB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
|
|
338
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHBpcnlTdGF0dXMiLCJNZW1vQ2FjaGUiLCJpc0VudGl0eSIsImRlbm9ybWFsaXplIiwidmFsaWRhdGVRdWVyeUtleSIsIkFib3J0T3B0aW1pc3RpYyIsImNyZWF0ZVVuc3Vic2NyaXB0aW9uIiwiY3JlYXRlU3Vic2NyaXB0aW9uIiwiY3JlYXRlRXhwaXJlQWxsIiwiY3JlYXRlRmV0Y2giLCJjcmVhdGVJbnZhbGlkYXRlIiwiY3JlYXRlSW52YWxpZGF0ZUFsbCIsImNyZWF0ZVJlc2V0IiwiY3JlYXRlU2V0IiwiY3JlYXRlU2V0UmVzcG9uc2UiLCJlbnN1cmVQb2pvIiwiaW5pdGlhbFN0YXRlIiwic2VsZWN0TWV0YSIsInVuc2V0RGlzcGF0Y2giLCJhY3Rpb24iLCJFcnJvciIsInVuc2V0U3RhdGUiLCJDb250cm9sbGVyIiwiY29uc3RydWN0b3IiLCJkaXNwYXRjaCIsImdldFN0YXRlIiwibWVtbyIsImZldGNoIiwiZW5kcG9pbnQiLCJhcmdzIiwic2NoZW1hIiwibWV0YSIsInByb21pc2UiLCJ0aGVuIiwiaW5wdXQiLCJmZXRjaElmU3RhbGUiLCJkYXRhIiwiZXhwaXJlc0F0IiwiZXhwaXJ5U3RhdHVzIiwiZ2V0UmVzcG9uc2UiLCJJbnZhbGlkIiwiRGF0ZSIsIm5vdyIsImludmFsaWRhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImludmFsaWRhdGVBbGwiLCJvcHRpb25zIiwia2V5IiwidGVzdEtleSIsImV4cGlyZUFsbCIsInJlc2V0RW50aXJlU3RvcmUiLCJzZXRSZXNwb25zZSIsInJlc3QiLCJyZXNwb25zZSIsImxlbmd0aCIsInNsaWNlIiwic2V0RXJyb3IiLCJlcnJvciIsInN1YnNjcmliZSIsInVuc3Vic2NyaWJlIiwic25hcHNob3QiLCJzdGF0ZSIsImZldGNoZWRBdCIsIlNuYXBzaG90Iiwic2V0IiwidmFsdWUiLCJnZXRFcnJvciIsImVuZHBvaW50cyIsInVuZGVmaW5lZCIsImVycm9yUG9saWN5IiwibWFwIiwiaXNBY3RpdmUiLCJjYWNoZUVuZHBvaW50cyIsInNob3VsZFF1ZXJ5IiwiYnVpbGRRdWVyeUtleSIsImVudGl0aWVzIiwiaW5kZXhlcyIsIlZhbGlkIiwiSW5maW5pdHkiLCJpc0ludmFsaWQiLCJzY2hlbWFIYXNFbnRpdHkiLCJpbnZhbGlkYXRlZCIsImludmFsaWRJZlN0YWxlIiwiSW52YWxpZElmU3RhbGUiLCJwYXRocyIsImdldFNjaGVtYVJlc3BvbnNlIiwiZW50aXR5TWV0YSIsImdldCIsInF1ZXJ5IiwiaW52YWxpZERlbm9ybWFsaXplIiwiZW50aXR5RXhwaXJlc0F0IiwicGsiLCJfZW50aXR5TWV0YSRrZXkiLCJlbnRpdHlFeHBpcnkiLCJBcnJheSIsImlzQXJyYXkiLCJuZXN0ZWRTY2hlbWEiLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb21lIiwieCIsImNvbnRyb2xsZXIiLCJhYm9ydCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBFcnJvclR5cGVzLFxuICBTbmFwc2hvdEludGVyZmFjZSxcbiAgU2NoZW1hLFxuICBEZW5vcm1hbGl6ZSxcbiAgUXVlcnlhYmxlLFxuICBTY2hlbWFBcmdzLFxufSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcbmltcG9ydCB7XG4gIEV4cGlyeVN0YXR1cyxcbiAgRW5kcG9pbnRJbnRlcmZhY2UsXG4gIEZldGNoRnVuY3Rpb24sXG4gIFJlc29sdmVUeXBlLFxuICBEZW5vcm1hbGl6ZU51bGxhYmxlLFxuICBFbnRpdHlQYXRoLFxuICBNZW1vQ2FjaGUsXG4gIGlzRW50aXR5LFxuICBkZW5vcm1hbGl6ZSxcbiAgdmFsaWRhdGVRdWVyeUtleSxcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCBBYm9ydE9wdGltaXN0aWMgZnJvbSAnLi9BYm9ydE9wdGltaXN0aWMuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVW5zdWJzY3JpcHRpb24sXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbixcbn0gZnJvbSAnLi9hY3Rpb25zL2NyZWF0ZVN1YnNjcmlwdGlvbi5qcyc7XG5pbXBvcnQge1xuICBjcmVhdGVFeHBpcmVBbGwsXG4gIGNyZWF0ZUZldGNoLFxuICBjcmVhdGVJbnZhbGlkYXRlLFxuICBjcmVhdGVJbnZhbGlkYXRlQWxsLFxuICBjcmVhdGVSZXNldCxcbiAgY3JlYXRlU2V0LFxuICBjcmVhdGVTZXRSZXNwb25zZSxcbn0gZnJvbSAnLi9hY3Rpb25zL2luZGV4LmpzJztcbmltcG9ydCBlbnN1cmVQb2pvIGZyb20gJy4vZW5zdXJlUG9qby5qcyc7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGluaXRpYWxTdGF0ZSB9IGZyb20gJy4uL3N0YXRlL3JlZHVjZXIvY3JlYXRlUmVkdWNlci5qcyc7XG5pbXBvcnQgc2VsZWN0TWV0YSBmcm9tICcuLi9zdGF0ZS9zZWxlY3RNZXRhLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aW9uVHlwZXMsIFN0YXRlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBHZW5lcmljRGlzcGF0Y2ggPSAodmFsdWU6IGFueSkgPT4gUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCB0eXBlIERhdGFDbGllbnREaXNwYXRjaCA9ICh2YWx1ZTogQWN0aW9uVHlwZXMpID0+IFByb21pc2U8dm9pZD47XG5cbmludGVyZmFjZSBDb25zdHJ1Y3RvclByb3BzPEQgZXh0ZW5kcyBHZW5lcmljRGlzcGF0Y2ggPSBEYXRhQ2xpZW50RGlzcGF0Y2g+IHtcbiAgZGlzcGF0Y2g/OiBEO1xuICBnZXRTdGF0ZT86ICgpID0+IFN0YXRlPHVua25vd24+O1xuICBtZW1vPzogUGljazxNZW1vQ2FjaGUsICdkZW5vcm1hbGl6ZScgfCAncXVlcnknIHwgJ2J1aWxkUXVlcnlLZXknPjtcbn1cblxuY29uc3QgdW5zZXREaXNwYXRjaCA9IChhY3Rpb246IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBEaXNwYXRjaGluZyB3aGlsZSBjb25zdHJ1Y3RpbmcgeW91ciBtaWRkbGV3YXJlIGlzIG5vdCBhbGxvd2VkLiBgICtcbiAgICAgIGBPdGhlciBtaWRkbGV3YXJlIHdvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoaXMgZGlzcGF0Y2guYCxcbiAgKTtcbn07XG5jb25zdCB1bnNldFN0YXRlID0gKCk6IFN0YXRlPHVua25vd24+ID0+IHtcbiAgLy8gVGhpcyBpcyBvbmx5IHRoZSB2YWx1ZSB1bnRpbCBpdCBpcyBzZXQgYnkgdGhlIERhdGFQcm92aWRlclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gaW5pdGlhbFN0YXRlO1xufTtcblxuLyoqXG4gKiBJbXBlcmF0aXZlIGNvbnRyb2wgb2YgUmVhY3RpdmUgRGF0YSBDbGllbnQgc3RvcmVcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udHJvbGxlcjxcbiAgRCBleHRlbmRzIEdlbmVyaWNEaXNwYXRjaCA9IERhdGFDbGllbnREaXNwYXRjaCxcbj4ge1xuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbiBhY3Rpb24gdG8gUmVhY3RpdmUgRGF0YSBDbGllbnQgcmVkdWNlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNkaXNwYXRjaFxuICAgKi9cbiAgZGVjbGFyZSByZWFkb25seSBkaXNwYXRjaDogRDtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhdGVzdCBzdGF0ZSBzbmFwc2hvdCB0aGF0IGlzIGZ1bGx5IGNvbW1pdHRlZC5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBpbXBlcmF0aXZlIHVzZS1jYXNlcyBsaWtlIGV2ZW50IGhhbmRsZXJzLlxuICAgKiBUaGlzIHNob3VsZCAqbm90KiBiZSB1c2VkIHRvIHJlbmRlcjsgaW5zdGVhZCB1c2VTdXNwZW5zZSgpIG9yIHVzZUNhY2hlKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNnZXRTdGF0ZVxuICAgKi9cbiAgZGVjbGFyZSByZWFkb25seSBnZXRTdGF0ZTogKCkgPT4gU3RhdGU8dW5rbm93bj47XG4gIC8qKlxuICAgKiBTaW5nbGV0b24gdG8gbWFpbnRhaW4gcmVmZXJlbnRpYWwgZXF1YWxpdHkgYmV0d2VlbiBjYWxsc1xuICAgKi9cbiAgZGVjbGFyZSByZWFkb25seSBtZW1vOiBQaWNrPFxuICAgIE1lbW9DYWNoZSxcbiAgICAnZGVub3JtYWxpemUnIHwgJ3F1ZXJ5JyB8ICdidWlsZFF1ZXJ5S2V5J1xuICA+O1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBkaXNwYXRjaCA9IHVuc2V0RGlzcGF0Y2ggYXMgYW55LFxuICAgIGdldFN0YXRlID0gdW5zZXRTdGF0ZSxcbiAgICBtZW1vID0gbmV3IE1lbW9DYWNoZSgpLFxuICB9OiBDb25zdHJ1Y3RvclByb3BzPEQ+ID0ge30pIHtcbiAgICB0aGlzLmRpc3BhdGNoID0gZGlzcGF0Y2g7XG4gICAgdGhpcy5nZXRTdGF0ZSA9IGdldFN0YXRlO1xuICAgIHRoaXMubWVtbyA9IG1lbW87XG4gIH1cblxuICAvKioqKioqKioqKioqKioqIEFjdGlvbiBEaXNwYXRjaGVycyAqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGVuZHBvaW50IHdpdGggZ2l2ZW4gYXJncywgdXBkYXRpbmcgdGhlIFJlYWN0aXZlIERhdGEgQ2xpZW50IGNhY2hlIHdpdGggdGhlIHJlc3BvbnNlIG9yIGVycm9yIHVwb24gY29tcGxldGlvbi5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNmZXRjaFxuICAgKi9cbiAgZmV0Y2ggPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IEVbJ3NjaGVtYSddIGV4dGVuZHMgdW5kZWZpbmVkIHwgbnVsbCA/IFJldHVyblR5cGU8RT5cbiAgOiBQcm9taXNlPERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPj4gPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZUZldGNoKGVuZHBvaW50LCB7XG4gICAgICBhcmdzLFxuICAgIH0pO1xuICAgIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcblxuICAgIGlmIChlbmRwb2ludC5zY2hlbWEpIHtcbiAgICAgIHJldHVybiBhY3Rpb24ubWV0YS5wcm9taXNlLnRoZW4oaW5wdXQgPT5cbiAgICAgICAgZGVub3JtYWxpemUoZW5kcG9pbnQuc2NoZW1hLCBpbnB1dCwge30sIGFyZ3MpLFxuICAgICAgKSBhcyBhbnk7XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb24ubWV0YS5wcm9taXNlIGFzIGFueTtcbiAgfTtcblxuICAvKipcbiAgICogRmV0Y2hlcyBvbmx5IGlmIGVuZHBvaW50IGlzIGNvbnNpZGVyZWQgJ3N0YWxlJzsgb3RoZXJ3aXNlIHJldHVybnMgdW5kZWZpbmVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZmV0Y2hJZlN0YWxlXG4gICAqL1xuICBmZXRjaElmU3RhbGUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IEVbJ3NjaGVtYSddIGV4dGVuZHMgdW5kZWZpbmVkIHwgbnVsbCA/IFJldHVyblR5cGU8RT4gfCBSZXNvbHZlVHlwZTxFPlxuICA6IFByb21pc2U8RGVub3JtYWxpemU8RVsnc2NoZW1hJ10+PiB8IERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPiA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBleHBpcmVzQXQsIGV4cGlyeVN0YXR1cyB9ID0gdGhpcy5nZXRSZXNwb25zZShcbiAgICAgIGVuZHBvaW50LFxuICAgICAgLi4uYXJncyxcbiAgICAgIHRoaXMuZ2V0U3RhdGUoKSxcbiAgICApO1xuICAgIGlmIChleHBpcnlTdGF0dXMgIT09IEV4cGlyeVN0YXR1cy5JbnZhbGlkICYmIERhdGUubm93KCkgPD0gZXhwaXJlc0F0KVxuICAgICAgcmV0dXJuIGRhdGEgYXMgYW55O1xuICAgIHJldHVybiB0aGlzLmZldGNoKGVuZHBvaW50LCAuLi5hcmdzKTtcbiAgfTtcblxuICAvKipcbiAgICogRm9yY2VzIHJlZmV0Y2hpbmcgYW5kIHN1c3BlbnNlIG9uIHVzZVN1c3BlbnNlIHdpdGggdGhlIHNhbWUgRW5kcG9pbnQgYW5kIHBhcmFtZXRlcnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZVxuICAgKi9cbiAgaW52YWxpZGF0ZSA9IDxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbCA/XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICBjcmVhdGVJbnZhbGlkYXRlKGVuZHBvaW50LCB7XG4gICAgICAgICAgYXJnczogYXJncyBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBGb3JjZXMgcmVmZXRjaGluZyBhbmQgc3VzcGVuc2Ugb24gdXNlU3VzcGVuc2Ugb24gYWxsIG1hdGNoaW5nIGVuZHBvaW50IHJlc3VsdCBrZXlzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2ludmFsaWRhdGVBbGxcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaW52YWxpZGF0aW9uIGlzIGNvbW1pdGVkLlxuICAgKi9cbiAgaW52YWxpZGF0ZUFsbCA9IChvcHRpb25zOiB7IHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB9KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2goY3JlYXRlSW52YWxpZGF0ZUFsbCgoa2V5OiBzdHJpbmcpID0+IG9wdGlvbnMudGVzdEtleShrZXkpKSk7XG5cbiAgLyoqXG4gICAqIFNldHMgYWxsIG1hdGNoaW5nIGVuZHBvaW50IHJlc3VsdCBrZXlzIHRvIGJlIFNUQUxFLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2V4cGlyZUFsbFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBleHBpcnkgaXMgY29tbWl0ZWQuICpOT1QqIGZldGNoIHByb21pc2VcbiAgICovXG4gIGV4cGlyZUFsbCA9IChvcHRpb25zOiB7IHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB9KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2goY3JlYXRlRXhwaXJlQWxsKChrZXk6IHN0cmluZykgPT4gb3B0aW9ucy50ZXN0S2V5KGtleSkpKTtcblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBlbnRpcmUgUmVhY3RpdmUgRGF0YSBDbGllbnQgY2FjaGUuIEFsbCBpbmZsaWdodCByZXF1ZXN0cyB3aWxsIG5vdCByZXNvbHZlLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc2V0RW50aXJlU3RvcmVcbiAgICovXG4gIHJlc2V0RW50aXJlU3RvcmUgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmRpc3BhdGNoKGNyZWF0ZVJlc2V0KCkpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHZhbHVlIGZvciB0aGUgUXVlcnlhYmxlIGFuZCBhcmdzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldFxuICAgKi9cbiAgc2V0PFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uU2NoZW1hQXJnczxTPiwgKHByZXZpb3VzVmFsdWU6IERlbm9ybWFsaXplPFM+KSA9PiB7fV1cbiAgKTogUHJvbWlzZTx2b2lkPjtcblxuICBzZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5TY2hlbWFBcmdzPFM+LCB7fV1cbiAgKTogUHJvbWlzZTx2b2lkPjtcblxuICBzZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5TY2hlbWFBcmdzPFM+LCBhbnldXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbHVlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZVNldChzY2hlbWEsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBTY2hlbWFBcmdzPFM+LFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gICAgLy8gVE9ETzogcmVqZWN0IHdpdGggZXJyb3IgaWYgdGhpcyBmYWlscyBpbiByZWR1Y2VyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHJlc3BvbnNlIGZvciB0aGUgRW5kcG9pbnQgYW5kIGFyZ3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0UmVzcG9uc2VcbiAgICovXG4gIHNldFJlc3BvbnNlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgYW55XVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXNwb25zZTogUmVzb2x2ZVR5cGU8RT4gPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0UmVzcG9uc2UoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0cyBhbiBlcnJvciByZXNwb25zZSBmb3IgdGhlIEVuZHBvaW50IGFuZCBhcmdzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldEVycm9yXG4gICAqL1xuICBzZXRFcnJvciA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIEVycm9yXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXNwb25zZTogRXJyb3IgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0UmVzcG9uc2UoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBpbmZsaWdodCBmZXRjaC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNyZXNvbHZlXG4gICAqL1xuICByZXNvbHZlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICBtZXRhOlxuICAgICAgfCB7XG4gICAgICAgICAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dO1xuICAgICAgICAgIHJlc3BvbnNlOiBFcnJvcjtcbiAgICAgICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgICAgICBlcnJvcjogdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dO1xuICAgICAgICAgIHJlc3BvbnNlOiBhbnk7XG4gICAgICAgICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICAgICAgZXJyb3I/OiBmYWxzZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goY3JlYXRlU2V0UmVzcG9uc2UoZW5kcG9pbnQsIG1ldGEgYXMgYW55KSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcmtzIGEgbmV3IHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3N1YnNjcmliZVxuICAgKi9cbiAgc3Vic2NyaWJlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZTxcbiAgICAgIEZldGNoRnVuY3Rpb24sXG4gICAgICBTY2hlbWEgfCB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQgfCBmYWxzZVxuICAgID4sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsID9cbiAgICAgIHRoaXMuZGlzcGF0Y2goXG4gICAgICAgIGNyZWF0ZVN1YnNjcmlwdGlvbihlbmRwb2ludCwge1xuICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgUGFyYW1ldGVyczxFPixcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgOiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAvKipcbiAgICogTWFya3MgY29tcGxldGlvbiBvZiBzdWJzY3JpcHRpb24gdG8gYSBnaXZlbiBFbmRwb2ludC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciN1bnN1YnNjcmliZVxuICAgKi9cbiAgdW5zdWJzY3JpYmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPFxuICAgICAgRmV0Y2hGdW5jdGlvbixcbiAgICAgIFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCB8IGZhbHNlXG4gICAgPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIGFyZ3NbMF0gIT09IG51bGwgP1xuICAgICAgdGhpcy5kaXNwYXRjaChcbiAgICAgICAgY3JlYXRlVW5zdWJzY3JpcHRpb24oZW5kcG9pbnQsIHtcbiAgICAgICAgICBhcmdzOiBhcmdzIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIDogUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLyoqKioqKioqKioqKioqKiBNb3JlICoqKioqKioqKioqKioqKi9cblxuICAvKiBUT0RPOlxuICBhYm9ydCA9IDxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiBQcm9taXNlPHZvaWQ+XG4gICovXG5cbiAgLyoqXG4gICAqIEdldHMgYSBzbmFwc2hvdCAoaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90KVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NuYXBzaG90XG4gICAqL1xuICBzbmFwc2hvdCA9IChzdGF0ZTogU3RhdGU8dW5rbm93bj4sIGZldGNoZWRBdD86IG51bWJlcik6IFNuYXBzaG90SW50ZXJmYWNlID0+IHtcbiAgICByZXR1cm4gbmV3IFNuYXBzaG90KHRoaXMsIHN0YXRlLCBmZXRjaGVkQXQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBlcnJvciwgaWYgYW55LCBmb3IgYSBnaXZlbiBlbmRwb2ludC4gUmV0dXJucyB1bmRlZmluZWQgZm9yIG5vIGVycm9ycy5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNnZXRFcnJvclxuICAgKi9cbiAgZ2V0RXJyb3I8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OlxuICAgICAgfCByZWFkb25seSBbbnVsbCwgU3RhdGU8dW5rbm93bj5dXG4gICAgICB8IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+LCBTdGF0ZTx1bmtub3duPl1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcjxFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleSc+PihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OlxuICAgICAgfCByZWFkb25seSBbbnVsbCwgU3RhdGU8dW5rbm93bj5dXG4gICAgICB8IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPiwgU3RhdGU8dW5rbm93bj5dXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQ7XG5cbiAgZ2V0RXJyb3IoXG4gICAgZW5kcG9pbnQ6IEVuZHBvaW50SW50ZXJmYWNlLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi51bmtub3duW10sIFN0YXRlPHVua25vd24+XVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocmVzdFswXSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKTtcbiAgICBjb25zdCBrZXkgPSBlbmRwb2ludC5rZXkoLi4uYXJncyk7XG5cbiAgICBjb25zdCBtZXRhID0gc2VsZWN0TWV0YShzdGF0ZSwga2V5KTtcbiAgICBjb25zdCBlcnJvciA9IHN0YXRlLmVuZHBvaW50c1trZXldO1xuXG4gICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQgJiYgbWV0YT8uZXJyb3JQb2xpY3kgPT09ICdzb2Z0JykgcmV0dXJuO1xuXG4gICAgcmV0dXJuIG1ldGE/LmVycm9yIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSAoZ2xvYmFsbHkgcmVmZXJlbnRpYWxseSBzdGFibGUpIHJlc3BvbnNlIGZvciBhIGdpdmVuIGVuZHBvaW50L2FyZ3MgcGFpciBmcm9tIHN0YXRlIGdpdmVuLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFJlc3BvbnNlXG4gICAqL1xuICBnZXRSZXNwb25zZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIFN0YXRlPHVua25vd24+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi4ocmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXSksXG4gICAgICBTdGF0ZTx1bmtub3duPixcbiAgICBdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZShcbiAgICBlbmRwb2ludDogRW5kcG9pbnRJbnRlcmZhY2UsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLnVua25vd25bXSwgU3RhdGU8dW5rbm93bj5dXG4gICk6IHtcbiAgICBkYXRhOiB1bmtub3duO1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9IHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXSBhcyBTdGF0ZTx1bmtub3duPjtcbiAgICAvLyB0aGlzIGlzIHR5cGVzY3JpcHQgZ2VuZXJpY3MgYnJlYWtpbmdcbiAgICBjb25zdCBhcmdzOiBhbnkgPSByZXN0XG4gICAgICAuc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKVxuICAgICAgLy8gaGFuZGxlIEZvcm1EYXRhXG4gICAgICAubWFwKGVuc3VyZVBvam8pO1xuICAgIGNvbnN0IGlzQWN0aXZlID0gYXJncy5sZW5ndGggIT09IDEgfHwgYXJnc1swXSAhPT0gbnVsbDtcbiAgICBjb25zdCBrZXkgPSBpc0FjdGl2ZSA/IGVuZHBvaW50LmtleSguLi5hcmdzKSA6ICcnO1xuICAgIGNvbnN0IGNhY2hlRW5kcG9pbnRzID0gaXNBY3RpdmUgPyBzdGF0ZS5lbmRwb2ludHNba2V5XSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzY2hlbWEgPSBlbmRwb2ludC5zY2hlbWE7XG4gICAgY29uc3QgbWV0YSA9IHNlbGVjdE1ldGEoc3RhdGUsIGtleSk7XG4gICAgbGV0IGV4cGlyZXNBdCA9IG1ldGE/LmV4cGlyZXNBdDtcbiAgICAvLyBpZiB3ZSBoYXZlIG5vIGVuZHBvaW50IGVudHJ5LCBhbmQgb3VyIGVuZHBvaW50IGhhcyBhIHNjaGVtYSAtIHRyeSBxdWVyeWluZyB0aGUgc3RvcmVcbiAgICBjb25zdCBzaG91bGRRdWVyeSA9IGNhY2hlRW5kcG9pbnRzID09PSB1bmRlZmluZWQgJiYgc2NoZW1hICE9PSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBpbnB1dCA9XG4gICAgICBzaG91bGRRdWVyeSA/XG4gICAgICAgIC8vIG5vdGhpbmcgaW4gZW5kcG9pbnRzIGNhY2hlLCBzbyB0cnkgcXVlcnlpbmcgaWYgd2UgaGF2ZSBhIHNjaGVtYSB0byBkbyBzb1xuICAgICAgICB0aGlzLm1lbW8uYnVpbGRRdWVyeUtleShcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgICBzdGF0ZS5lbnRpdGllcyBhcyBhbnksXG4gICAgICAgICAgc3RhdGUuaW5kZXhlcyxcbiAgICAgICAgICBrZXksXG4gICAgICAgIClcbiAgICAgIDogY2FjaGVFbmRwb2ludHM7XG5cbiAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAvLyB3aGVuIG5vdCBhY3RpdmUgc2ltcGx5IHJldHVybiB0aGUgcXVlcnkgaW5wdXQgd2l0aG91dCBkZW5vcm1hbGl6aW5nXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBpbnB1dCBhcyBhbnksXG4gICAgICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzLlZhbGlkLFxuICAgICAgICBleHBpcmVzQXQ6IEluZmluaXR5LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgaXNJbnZhbGlkID0gZmFsc2U7XG4gICAgaWYgKHNob3VsZFF1ZXJ5KSB7XG4gICAgICBpc0ludmFsaWQgPSAhdmFsaWRhdGVRdWVyeUtleShpbnB1dCk7XG4gICAgfSBlbHNlIGlmICghc2NoZW1hIHx8ICFzY2hlbWFIYXNFbnRpdHkoc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogY2FjaGVFbmRwb2ludHMsXG4gICAgICAgIGV4cGlyeVN0YXR1czpcbiAgICAgICAgICBtZXRhPy5pbnZhbGlkYXRlZCA/IEV4cGlyeVN0YXR1cy5JbnZhbGlkXG4gICAgICAgICAgOiBjYWNoZUVuZHBvaW50cyAmJiAhZW5kcG9pbnQuaW52YWxpZElmU3RhbGUgPyBFeHBpcnlTdGF0dXMuVmFsaWRcbiAgICAgICAgICA6IEV4cGlyeVN0YXR1cy5JbnZhbGlkSWZTdGFsZSxcbiAgICAgICAgZXhwaXJlc0F0OiBleHBpcmVzQXQgfHwgMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gc2Vjb25kIGFyZ3VtZW50IGlzIGZhbHNlIGlmIGFueSBlbnRpdGllcyBhcmUgbWlzc2luZ1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBjb25zdCB7IGRhdGEsIHBhdGhzIH0gPSB0aGlzLm1lbW8uZGVub3JtYWxpemUoXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnB1dCxcbiAgICAgIHN0YXRlLmVudGl0aWVzLFxuICAgICAgYXJncyxcbiAgICApIGFzIHsgZGF0YTogYW55OyBwYXRoczogRW50aXR5UGF0aFtdIH07XG5cbiAgICAvLyBub3RlOiBpc0ludmFsaWQgY2FuIG9ubHkgYmUgdHJ1ZSBpZiBzaG91bGRRdWVyeSBpcyB0cnVlXG4gICAgaWYgKCFleHBpcmVzQXQgJiYgaXNJbnZhbGlkKSBleHBpcmVzQXQgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hUmVzcG9uc2UoXG4gICAgICBkYXRhLFxuICAgICAgcGF0aHMsXG4gICAgICBzdGF0ZS5lbnRpdHlNZXRhLFxuICAgICAgZXhwaXJlc0F0LFxuICAgICAgZW5kcG9pbnQuaW52YWxpZElmU3RhbGUgfHwgaXNJbnZhbGlkLFxuICAgICAgbWV0YSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXJpZXMgdGhlIHN0b3JlIGZvciBhIFF1ZXJhYmxlIHNjaGVtYVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFxuICAgKi9cbiAgZ2V0PFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi5TY2hlbWFBcmdzPFM+LFxuICAgICAgUGljazxTdGF0ZTx1bmtub3duPiwgJ2VudGl0aWVzJyB8ICdlbnRpdHlNZXRhJz4sXG4gICAgXVxuICApOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXSBhcyBTdGF0ZTxhbnk+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3RcbiAgICAgIC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpXG4gICAgICAubWFwKGVuc3VyZVBvam8pIGFzIFNjaGVtYUFyZ3M8Uz47XG5cbiAgICByZXR1cm4gdGhpcy5tZW1vLnF1ZXJ5KHNjaGVtYSwgYXJncywgc3RhdGUuZW50aXRpZXMgYXMgYW55LCBzdGF0ZS5pbmRleGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NoZW1hUmVzcG9uc2U8VD4oXG4gICAgZGF0YTogVCxcbiAgICBwYXRoczogRW50aXR5UGF0aFtdLFxuICAgIGVudGl0eU1ldGE6IFN0YXRlPHVua25vd24+WydlbnRpdHlNZXRhJ10sXG4gICAgZXhwaXJlc0F0OiBudW1iZXIsXG4gICAgaW52YWxpZElmU3RhbGU6IGJvb2xlYW4sXG4gICAgbWV0YTogeyBlcnJvcj86IHVua25vd247IGludmFsaWRhdGVkPzogdW5rbm93biB9ID0ge30sXG4gICk6IHtcbiAgICBkYXRhOiBUO1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9IHtcbiAgICBjb25zdCBpbnZhbGlkRGVub3JtYWxpemUgPSB0eXBlb2YgZGF0YSA9PT0gJ3N5bWJvbCc7XG5cbiAgICAvLyBmYWxsYmFjayB0byBlbnRpdHkgZXhwaXJ5IHRpbWVcbiAgICBpZiAoIWV4cGlyZXNBdCkge1xuICAgICAgZXhwaXJlc0F0ID0gZW50aXR5RXhwaXJlc0F0KHBhdGhzLCBlbnRpdHlNZXRhKTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9jb25jZXB0cy9leHBpcnktcG9saWN5I2V4cGlyeS1zdGF0dXNcbiAgICAvLyB3ZSBkb24ndCB0cmFjayB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YWxlIG9yIGZyZXNoIGJlY2F1c2UgdGhhdCBpcyB0aWVkIHRvIHRyaWdnZXJpbmdcbiAgICAvLyBjb25kaXRpb25zXG4gICAgY29uc3QgZXhwaXJ5U3RhdHVzID1cbiAgICAgIG1ldGE/LmludmFsaWRhdGVkIHx8IChpbnZhbGlkRGVub3JtYWxpemUgJiYgIW1ldGE/LmVycm9yKSA/XG4gICAgICAgIEV4cGlyeVN0YXR1cy5JbnZhbGlkXG4gICAgICA6IGludmFsaWREZW5vcm1hbGl6ZSB8fCBpbnZhbGlkSWZTdGFsZSA/IEV4cGlyeVN0YXR1cy5JbnZhbGlkSWZTdGFsZVxuICAgICAgOiBFeHBpcnlTdGF0dXMuVmFsaWQ7XG5cbiAgICByZXR1cm4geyBkYXRhLCBleHBpcnlTdGF0dXMsIGV4cGlyZXNBdCB9O1xuICB9XG59XG5cbi8vIGJlbmNobWFyazogaHR0cHM6Ly93d3cubWVhc3VyZXRoYXQubmV0L0JlbmNobWFya3MvU2hvdy8yNDY5MS8wL21pbi1yZWR1Y2VyLXZzLWltcGVyYXRpdmUtd2l0aC1wYXRoc1xuLy8gZWFybGllc3QgZXhwaXJ5IGRpY3RhdGVzIGFnZVxuZnVuY3Rpb24gZW50aXR5RXhwaXJlc0F0KFxuICBwYXRoczogRW50aXR5UGF0aFtdLFxuICBlbnRpdHlNZXRhOiB7XG4gICAgcmVhZG9ubHkgW2VudGl0eUtleTogc3RyaW5nXToge1xuICAgICAgcmVhZG9ubHkgW3BrOiBzdHJpbmddOiB7XG4gICAgICAgIHJlYWRvbmx5IGRhdGU6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGZldGNoZWRBdDogbnVtYmVyOyAvLyBUaGlzIGlzIG9ubHkgdGhlIHZhbHVlIHVudGlsIGl0IGlzIHNldCBieSB0aGUgRGF0YVByb3ZpZGVyXG4gICAgICB9O1xuICAgIH07XG4gIH0sXG4pIHtcbiAgbGV0IGV4cGlyZXNBdCA9IEluZmluaXR5O1xuICBmb3IgKGNvbnN0IHsgcGssIGtleSB9IG9mIHBhdGhzKSB7XG4gICAgY29uc3QgZW50aXR5RXhwaXJ5ID0gZW50aXR5TWV0YVtrZXldPy5bcGtdPy5leHBpcmVzQXQ7XG4gICAgLy8gZXhwaXJlc0F0IHdpbGwgYWx3YXlzIHJlc29sdmUgdG8gZmFsc2Ugd2l0aCBhbnkgY29tcGFyaXNvblxuICAgIGlmIChlbnRpdHlFeHBpcnkgPCBleHBpcmVzQXQpIGV4cGlyZXNBdCA9IGVudGl0eUV4cGlyeTtcbiAgfVxuICByZXR1cm4gZXhwaXJlc0F0O1xufVxuXG4vKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNjaGVtYSBoYXMgYW55IGVudGl0aWVzLlxuICpcbiAqIFdpdGhvdXQgZW50aXRpZXMsIGRlbm9ybWFsaXphdGlvbiBpcyBub3QgbmVlZGVkLCBhbmQgcmVzdWx0cyBzaG91bGQgbm90IGJlIHF1ZXJpZWQuXG4gKi9cbmZ1bmN0aW9uIHNjaGVtYUhhc0VudGl0eShzY2hlbWE6IFNjaGVtYSk6IGJvb2xlYW4ge1xuICBpZiAoaXNFbnRpdHkoc2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgcmV0dXJuIHNjaGVtYS5sZW5ndGggIT09IDAgJiYgc2NoZW1hSGFzRW50aXR5KHNjaGVtYVswXSk7XG4gIGlmIChzY2hlbWEgJiYgKHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBzY2hlbWEgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY29uc3QgbmVzdGVkU2NoZW1hID1cbiAgICAgICdzY2hlbWEnIGluIHNjaGVtYSA/IChzY2hlbWEuc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIFNjaGVtYT4pIDogc2NoZW1hO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkU2NoZW1hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2NoZW1hSGFzRW50aXR5KG5lc3RlZFNjaGVtYSk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG5lc3RlZFNjaGVtYSkuc29tZSh4ID0+IHNjaGVtYUhhc0VudGl0eSh4KSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgdHlwZSB7IEVycm9yVHlwZXMgfTtcblxuY2xhc3MgU25hcHNob3Q8VCA9IHVua25vd24+IGltcGxlbWVudHMgU25hcHNob3RJbnRlcmZhY2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgYWJvcnQgPSBuZXcgQWJvcnRPcHRpbWlzdGljKCk7XG5cbiAgcHJpdmF0ZSBzdGF0ZTogU3RhdGU8VD47XG4gIHByaXZhdGUgY29udHJvbGxlcjogQ29udHJvbGxlcjtcbiAgcmVhZG9ubHkgZmV0Y2hlZEF0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFib3J0ID0gU25hcHNob3QuYWJvcnQ7XG5cbiAgY29uc3RydWN0b3IoY29udHJvbGxlcjogQ29udHJvbGxlciwgc3RhdGU6IFN0YXRlPFQ+LCBmZXRjaGVkQXQgPSAwKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgdGhpcy5mZXRjaGVkQXQgPSBmZXRjaGVkQXQ7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqIERhdGEgQWNjZXNzICoqKioqKioqKioqKioqKi9cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldFJlc3BvbnNlICovXG4gIGdldFJlc3BvbnNlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFJlc3BvbnNlKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRFcnJvciAqL1xuICBnZXRFcnJvcjxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkO1xuXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcjxFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleSc+PihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0RXJyb3IoZW5kcG9pbnQsIC4uLmFyZ3MsIHRoaXMuc3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlZCBtZW1vaXplZCB2YWx1ZSBmb3IgYW55IFF1ZXJhYmxlIHNjaGVtYVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRcbiAgICovXG4gIGdldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4uYXJnczogU2NoZW1hQXJnczxTPlxuICApOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldChzY2hlbWEsIC4uLmFyZ3MsIHRoaXMuc3RhdGUpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQVFBLFNBQ0VBLFlBQVksRUFNWkMsU0FBUyxFQUNUQyxRQUFRLEVBQ1JDLFdBQVcsRUFDWEMs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QUFJbkUsTUFBTSxHQUFJQSxNQUFNLENBQUNBLE1BQU0sR0FBOEJBLE1BQU07SUFDekUsSUFBSSxPQUFPbUUsWUFBWSxLQUFLLFVBQVUsRUFBRTtNQUN0QyxPQUFPaEIsZUFBZSxDQUFDZ0IsWUFBWSxDQUFDO0lBQ3RDO0lBQ0EsT0FBT0MsTUFBTSxDQUFDQyxNQUFNLENBQUNGLFlBQVksQ0FBQyxDQUFDRyxJQUFJLENBQUNDLENBQUMsSUFBSXBCLGVBQWUsQ0FBQ29CLENBQUMsQ0FBQyxDQUFDO0VBQ2xFO0VBQ0EsT0FBTyxLQUFLO0FBQ2Q7QUFJQSxNQUFNckMsUUFBUSxDQUEyQztFQVF2RHpDLFdBQVdBLENBQUMrRSxVQUFzQixFQUFFeEMsS0FBZSxFQUFFQyxTQUFTLEdBQUcsQ0FBQyxFQUFFO0lBQUEsS0FMNURELEtBQUs7SUFBQSxLQUNMd0MsVUFBVTtJQUFBLEtBQ1R2QyxTQUFTO0lBQUEsS0FDVHdDLEtBQUssR0FBR3ZDLFFBQVEsQ0FBQ3VDLEtBQUs7SUFHN0IsSUFBSSxDQUFDekMsS0FBSyxHQUFHQSxLQUFLO0lBQ2xCLElBQUksQ0FBQ3dDLFVBQVUsR0FBR0EsVUFBVTtJQUM1QixJQUFJLENBQUN2QyxTQUFTLEdBQUdBLFNBQVM7RUFDNUI7O0VBRUE7RUFDQTs7RUE4QkF4QixXQUFXQSxDQUdUWCxRQUFXLEVBQ1gsR0FBR0MsSUFBMEQsRUFLN0Q7SUFDQSxPQUFPLElBQUksQ0FBQ3lFLFVBQVUsQ0FBQy9ELFdBQVcsQ0FBQ1gsUUFBUSxFQUFFLEdBQUdDLElBQUksRUFBRSxJQUFJLENBQUNpQyxLQUFLLENBQUM7RUFDbkU7O0VBRUE7O0VBV0FLLFFBQVFBLENBQ052QyxRQUFXLEVBQ1gsR0FBR0MsSUFBMEQsRUFDckM7SUFDeEIsT0FBTyxJQUFJLENBQUN5RSxVQUFVLENBQUNuQyxRQUFRLENBQUN2QyxRQUFRLEVBQUUsR0FBR0MsSUFBSSxFQUFFLElBQUksQ0FBQ2lDLEtBQUssQ0FBQztFQUNoRTs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUNFMEIsR0FBR0EsQ0FDRDFELE1BQVMsRUFDVCxHQUFHRCxJQUFtQixFQUNjO0lBQ3BDLE9BQU8sSUFBSSxDQUFDeUUsVUFBVSxDQUFDZCxHQUFHLENBQUMxRCxNQUFNLEVBQUUsR0FBR0QsSUFBSSxFQUFFLElBQUksQ0FBQ2lDLEtBQUssQ0FBQztFQUN6RDtBQUNGO0FBdEZNRSxRQUFRLENBQ0l1QyxLQUFLLEdBQUcsSUFBSWxHLGVBQWUsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EXPIREALL_TYPE } from '../../actionTypes.js';
|
|
2
|
+
export function createExpireAll(testKey) {
|
|
3
|
+
return {
|
|
4
|
+
type: EXPIREALL_TYPE,
|
|
5
|
+
testKey
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFWFBJUkVBTExfVFlQRSIsImNyZWF0ZUV4cGlyZUFsbCIsInRlc3RLZXkiLCJ0eXBlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyb2xsZXIvYWN0aW9ucy9jcmVhdGVFeHBpcmVBbGwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRVhQSVJFQUxMX1RZUEUgfSBmcm9tICcuLi8uLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEV4cGlyZUFsbEFjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV4cGlyZUFsbChcbiAgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuKTogRXhwaXJlQWxsQWN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBFWFBJUkVBTExfVFlQRSxcbiAgICB0ZXN0S2V5LFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxjQUFjLFFBQVEsc0JBQXNCO0FBR3JELE9BQU8sU0FBU0MsZUFBZUEsQ0FDN0JDLE9BQWlDLEVBQ2hCO0VBQ2pCLE9BQU87SUFDTEMsSUFBSSxFQUFFSCxjQUFjO0lBQ3BCRTtFQUNGLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FETCH_TYPE } from '../../actionTypes.js';
|
|
2
|
+
/**
|
|
3
|
+
* Requesting a fetch to begin
|
|
4
|
+
*/
|
|
5
|
+
export function createFetch(endpoint, {
|
|
6
|
+
args
|
|
7
|
+
}) {
|
|
8
|
+
let resolve = 0;
|
|
9
|
+
let reject = 0;
|
|
10
|
+
const promise = new Promise((a, b) => {
|
|
11
|
+
[resolve, reject] = [a, b];
|
|
12
|
+
});
|
|
13
|
+
const meta = {
|
|
14
|
+
fetchedAt: Date.now(),
|
|
15
|
+
resolve,
|
|
16
|
+
reject,
|
|
17
|
+
promise
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
type: FETCH_TYPE,
|
|
21
|
+
endpoint,
|
|
22
|
+
args,
|
|
23
|
+
key: endpoint.key(...args),
|
|
24
|
+
meta
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGRVRDSF9UWVBFIiwiY3JlYXRlRmV0Y2giLCJlbmRwb2ludCIsImFyZ3MiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZSIsIlByb21pc2UiLCJhIiwiYiIsIm1ldGEiLCJmZXRjaGVkQXQiLCJEYXRlIiwibm93IiwidHlwZSIsImtleSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlRmV0Y2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludEludGVyZmFjZSwgTkkgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgRkVUQ0hfVFlQRSB9IGZyb20gJy4uLy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmV0Y2hBY3Rpb24sIEZldGNoTWV0YSB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogUmVxdWVzdGluZyBhIGZldGNoIHRvIGJlZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGZXRjaDxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgeyBhcmdzIH06IHsgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIH0sXG4pOiBGZXRjaEFjdGlvbjxFPiB7XG4gIGxldCByZXNvbHZlOiAodmFsdWU/OiBhbnkgfCBQcm9taXNlTGlrZTxhbnk+KSA9PiB2b2lkID0gMCBhcyBhbnk7XG4gIGxldCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQgPSAwIGFzIGFueTtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGFueT4oKGEsIGIpID0+IHtcbiAgICBbcmVzb2x2ZSwgcmVqZWN0XSA9IFthLCBiXTtcbiAgfSk7XG4gIGNvbnN0IG1ldGE6IEZldGNoTWV0YSA9IHtcbiAgICBmZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgcmVzb2x2ZSxcbiAgICByZWplY3QsXG4gICAgcHJvbWlzZSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6IEZFVENIX1RZUEUsXG4gICAgZW5kcG9pbnQsXG4gICAgYXJncyxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgICBtZXRhLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxVQUFVLFFBQVEsc0JBQXNCO0FBSWpEO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsV0FBV0EsQ0FHekJDLFFBQVcsRUFDWDtFQUFFQztBQUE0QyxDQUFDLEVBQy9CO0VBQ2hCLElBQUlDLE9BQWlELEdBQUcsQ0FBUTtFQUNoRSxJQUFJQyxNQUE4QixHQUFHLENBQVE7RUFDN0MsTUFBTUMsT0FBTyxHQUFHLElBQUlDLE9BQU8sQ0FBTSxDQUFDQyxDQUFDLEVBQUVDLENBQUMsS0FBSztJQUN6QyxDQUFDTCxPQUFPLEVBQUVDLE1BQU0sQ0FBQyxHQUFHLENBQUNHLENBQUMsRUFBRUMsQ0FBQyxDQUFDO0VBQzVCLENBQUMsQ0FBQztFQUNGLE1BQU1DLElBQWUsR0FBRztJQUN0QkMsU0FBUyxFQUFFQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCVCxPQUFPO0lBQ1BDLE1BQU07SUFDTkM7RUFDRixDQUFDO0VBRUQsT0FBTztJQUNMUSxJQUFJLEVBQUVkLFVBQVU7SUFDaEJFLFFBQVE7SUFDUkMsSUFBSTtJQUNKWSxHQUFHLEVBQUViLFFBQVEsQ0FBQ2EsR0FBRyxDQUFDLEdBQUdaLElBQUksQ0FBQztJQUMxQk87RUFDRixDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { INVALIDATE_TYPE } from '../../actionTypes.js';
|
|
2
|
+
export function createInvalidate(endpoint, {
|
|
3
|
+
args
|
|
4
|
+
}) {
|
|
5
|
+
return {
|
|
6
|
+
type: INVALIDATE_TYPE,
|
|
7
|
+
key: endpoint.key(...args)
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlZBTElEQVRFX1RZUEUiLCJjcmVhdGVJbnZhbGlkYXRlIiwiZW5kcG9pbnQiLCJhcmdzIiwidHlwZSIsImtleSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlSW52YWxpZGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IElOVkFMSURBVEVfVFlQRSB9IGZyb20gJy4uLy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgSW52YWxpZGF0ZUFjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUludmFsaWRhdGU8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgZW5kcG9pbnQ6IEUsXG4gIHsgYXJncyB9OiB7IGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB9LFxuKTogSW52YWxpZGF0ZUFjdGlvbiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogSU5WQUxJREFURV9UWVBFLFxuICAgIGtleTogZW5kcG9pbnQua2V5KC4uLmFyZ3MpLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxlQUFlLFFBQVEsc0JBQXNCO0FBR3RELE9BQU8sU0FBU0MsZ0JBQWdCQSxDQUM5QkMsUUFBVyxFQUNYO0VBQUVDO0FBQTRDLENBQUMsRUFDN0I7RUFDbEIsT0FBTztJQUNMQyxJQUFJLEVBQUVKLGVBQWU7SUFDckJLLEdBQUcsRUFBRUgsUUFBUSxDQUFDRyxHQUFHLENBQUMsR0FBR0YsSUFBSTtFQUMzQixDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { INVALIDATEALL_TYPE } from '../../actionTypes.js';
|
|
2
|
+
export function createInvalidateAll(testKey) {
|
|
3
|
+
return {
|
|
4
|
+
type: INVALIDATEALL_TYPE,
|
|
5
|
+
testKey
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlZBTElEQVRFQUxMX1RZUEUiLCJjcmVhdGVJbnZhbGlkYXRlQWxsIiwidGVzdEtleSIsInR5cGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZUludmFsaWRhdGVBbGwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU5WQUxJREFURUFMTF9UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBJbnZhbGlkYXRlQWxsQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW52YWxpZGF0ZUFsbChcbiAgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuKTogSW52YWxpZGF0ZUFsbEFjdGlvbiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogSU5WQUxJREFURUFMTF9UWVBFLFxuICAgIHRlc3RLZXksXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGtCQUFrQixRQUFRLHNCQUFzQjtBQUd6RCxPQUFPLFNBQVNDLG1CQUFtQkEsQ0FDakNDLE9BQWlDLEVBQ1o7RUFDckIsT0FBTztJQUNMQyxJQUFJLEVBQUVILGtCQUFrQjtJQUN4QkU7RUFDRixDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function createMeta(expiryLength, fetchedAt) {
|
|
2
|
+
const now = Date.now();
|
|
3
|
+
return {
|
|
4
|
+
fetchedAt: fetchedAt != null ? fetchedAt : now,
|
|
5
|
+
date: now,
|
|
6
|
+
expiresAt: now + expiryLength
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiZXhwaXJ5TGVuZ3RoIiwiZmV0Y2hlZEF0Iiwibm93IiwiRGF0ZSIsImRhdGUiLCJleHBpcmVzQXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZU1ldGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25NZXRhIH0gZnJvbSAnLi4vLi4vYWN0aW9ucy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZXRhKFxuICBleHBpcnlMZW5ndGg6IG51bWJlcixcbiAgZmV0Y2hlZEF0PzogbnVtYmVyLFxuKTogQWN0aW9uTWV0YSB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIHJldHVybiB7XG4gICAgZmV0Y2hlZEF0OiBmZXRjaGVkQXQgPz8gbm93LFxuICAgIGRhdGU6IG5vdyxcbiAgICBleHBpcmVzQXQ6IG5vdyArIGV4cGlyeUxlbmd0aCxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxTQUFTQSxVQUFVQSxDQUN4QkMsWUFBb0IsRUFDcEJDLFNBQWtCLEVBQ047RUFDWixNQUFNQyxHQUFHLEdBQUdDLElBQUksQ0FBQ0QsR0FBRyxDQUFDLENBQUM7RUFDdEIsT0FBTztJQUNMRCxTQUFTLEVBQUVBLFNBQVMsV0FBVEEsU0FBUyxHQUFJQyxHQUFHO0lBQzNCRSxJQUFJLEVBQUVGLEdBQUc7SUFDVEcsU0FBUyxFQUFFSCxHQUFHLEdBQUdGO0VBQ25CLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createMeta } from './createMeta.js';
|
|
2
|
+
import { OPTIMISTIC_TYPE } from '../../actionTypes.js';
|
|
3
|
+
export function createOptimistic(endpoint, args, fetchedAt) {
|
|
4
|
+
var _endpoint$dataExpiryL, _endpoint$dataExpiryL2;
|
|
5
|
+
/* istanbul ignore next */
|
|
6
|
+
if (process.env.NODE_ENV === 'development' && ((_endpoint$dataExpiryL = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL : 0) < 0) {
|
|
7
|
+
throw new Error('Negative expiry length are not allowed.');
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
type: OPTIMISTIC_TYPE,
|
|
11
|
+
endpoint,
|
|
12
|
+
args,
|
|
13
|
+
key: endpoint.key(...args),
|
|
14
|
+
meta: createMeta((_endpoint$dataExpiryL2 = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL2 : 60000, fetchedAt)
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiT1BUSU1JU1RJQ19UWVBFIiwiY3JlYXRlT3B0aW1pc3RpYyIsImVuZHBvaW50IiwiYXJncyIsImZldGNoZWRBdCIsIl9lbmRwb2ludCRkYXRhRXhwaXJ5TCIsIl9lbmRwb2ludCRkYXRhRXhwaXJ5TDIiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJkYXRhRXhwaXJ5TGVuZ3RoIiwiRXJyb3IiLCJ0eXBlIiwia2V5IiwibWV0YSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlT3B0aW1pc3RpYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IGNyZWF0ZU1ldGEgfSBmcm9tICcuL2NyZWF0ZU1ldGEuanMnO1xuaW1wb3J0IHsgT1BUSU1JU1RJQ19UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBPcHRpbWlzdGljQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pc3RpYzxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICBmZXRjaGVkQXQ6IG51bWJlcixcbik6IE9wdGltaXN0aWNBY3Rpb248RT4ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAoZW5kcG9pbnQuZGF0YUV4cGlyeUxlbmd0aCA/PyAwKSA8IDBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOZWdhdGl2ZSBleHBpcnkgbGVuZ3RoIGFyZSBub3QgYWxsb3dlZC4nKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogT1BUSU1JU1RJQ19UWVBFLFxuICAgIGVuZHBvaW50LFxuICAgIGFyZ3MsXG4gICAga2V5OiBlbmRwb2ludC5rZXkoLi4uYXJncyksXG4gICAgbWV0YTogY3JlYXRlTWV0YShlbmRwb2ludC5kYXRhRXhwaXJ5TGVuZ3RoID8/IDYwMDAwLCBmZXRjaGVkQXQpLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxVQUFVLFFBQVEsaUJBQWlCO0FBQzVDLFNBQVNDLGVBQWUsUUFBUSxzQkFBc0I7QUFJdEQsT0FBTyxTQUFTQyxnQkFBZ0JBLENBSzlCQyxRQUFXLEVBQ1hDLElBQWlDLEVBQ2pDQyxTQUFpQixFQUNJO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7RUFDckI7RUFDQSxJQUNFQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLGFBQWEsSUFDdEMsRUFBQUoscUJBQUEsR0FBQ0gsUUFBUSxDQUFDUSxnQkFBZ0IsWUFBQUwscUJBQUEsR0FBSSxDQUFDLElBQUksQ0FBQyxFQUNwQztJQUNBLE1BQU0sSUFBSU0sS0FBSyxDQUFDLHlDQUF5QyxDQUFDO0VBQzVEO0VBRUEsT0FBTztJQUNMQyxJQUFJLEVBQUVaLGVBQWU7SUFDckJFLFFBQVE7SUFDUkMsSUFBSTtJQUNKVSxHQUFHLEVBQUVYLFFBQVEsQ0FBQ1csR0FBRyxDQUFDLEdBQUdWLElBQUksQ0FBQztJQUMxQlcsSUFBSSxFQUFFZixVQUFVLEVBQUFPLHNCQUFBLEdBQUNKLFFBQVEsQ0FBQ1EsZ0JBQWdCLFlBQUFKLHNCQUFBLEdBQUksS0FBSyxFQUFFRixTQUFTO0VBQ2hFLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RESET_TYPE } from '../../actionTypes.js';
|
|
2
|
+
export function createReset() {
|
|
3
|
+
return {
|
|
4
|
+
type: RESET_TYPE,
|
|
5
|
+
date: Date.now()
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRVNFVF9UWVBFIiwiY3JlYXRlUmVzZXQiLCJ0eXBlIiwiZGF0ZSIsIkRhdGUiLCJub3ciXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZVJlc2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJFU0VUX1RZUEUgfSBmcm9tICcuLi8uLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlc2V0QWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzZXQoKTogUmVzZXRBY3Rpb24ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFJFU0VUX1RZUEUsXG4gICAgZGF0ZTogRGF0ZS5ub3coKSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxRQUFRLHNCQUFzQjtBQUdqRCxPQUFPLFNBQVNDLFdBQVdBLENBQUEsRUFBZ0I7RUFDekMsT0FBTztJQUNMQyxJQUFJLEVBQUVGLFVBQVU7SUFDaEJHLElBQUksRUFBRUMsSUFBSSxDQUFDQyxHQUFHLENBQUM7RUFDakIsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createMeta } from './createMeta.js';
|
|
2
|
+
import { SET_TYPE } from '../../actionTypes.js';
|
|
3
|
+
import ensurePojo from '../ensurePojo.js';
|
|
4
|
+
export function createSet(schema, {
|
|
5
|
+
args,
|
|
6
|
+
fetchedAt,
|
|
7
|
+
value
|
|
8
|
+
}) {
|
|
9
|
+
return {
|
|
10
|
+
type: SET_TYPE,
|
|
11
|
+
schema,
|
|
12
|
+
value,
|
|
13
|
+
args: args.map(ensurePojo),
|
|
14
|
+
meta: createMeta(60000, fetchedAt)
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiU0VUX1RZUEUiLCJlbnN1cmVQb2pvIiwiY3JlYXRlU2V0Iiwic2NoZW1hIiwiYXJncyIsImZldGNoZWRBdCIsInZhbHVlIiwidHlwZSIsIm1hcCIsIm1ldGEiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZVNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIERlbm9ybWFsaXplLFxuICBRdWVyeWFibGUsXG4gIFNjaGVtYUFyZ3MsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuXG5pbXBvcnQgeyBjcmVhdGVNZXRhIH0gZnJvbSAnLi9jcmVhdGVNZXRhLmpzJztcbmltcG9ydCB7IFNFVF9UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXRBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgZW5zdXJlUG9qbyBmcm9tICcuLi9lbnN1cmVQb2pvLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgc2NoZW1hOiBTLFxuICB7XG4gICAgYXJncyxcbiAgICBmZXRjaGVkQXQsXG4gICAgdmFsdWUsXG4gIH06IHtcbiAgICBhcmdzOiByZWFkb25seSBbLi4uU2NoZW1hQXJnczxTPl07XG4gICAgdmFsdWU6IHt9IHwgKChwcmV2aW91c1ZhbHVlOiBEZW5vcm1hbGl6ZTxTPikgPT4ge30pO1xuICAgIGZldGNoZWRBdD86IG51bWJlcjtcbiAgfSxcbik6IFNldEFjdGlvbjxTPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0VUX1RZUEUsXG4gICAgc2NoZW1hLFxuICAgIHZhbHVlLFxuICAgIGFyZ3M6IGFyZ3MubWFwKGVuc3VyZVBvam8pIGFzIFNjaGVtYUFyZ3M8Uz4sXG4gICAgbWV0YTogY3JlYXRlTWV0YSg2MDAwMCwgZmV0Y2hlZEF0KSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBTUEsU0FBU0EsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxTQUFTQyxRQUFRLFFBQVEsc0JBQXNCO0FBRS9DLE9BQU9DLFVBQVUsTUFBTSxrQkFBa0I7QUFFekMsT0FBTyxTQUFTQyxTQUFTQSxDQUN2QkMsTUFBUyxFQUNUO0VBQ0VDLElBQUk7RUFDSkMsU0FBUztFQUNUQztBQUtGLENBQUMsRUFDYTtFQUNkLE9BQU87SUFDTEMsSUFBSSxFQUFFUCxRQUFRO0lBQ2RHLE1BQU07SUFDTkcsS0FBSztJQUNMRixJQUFJLEVBQUVBLElBQUksQ0FBQ0ksR0FBRyxDQUFDUCxVQUFVLENBQWtCO0lBQzNDUSxJQUFJLEVBQUVWLFVBQVUsQ0FBQyxLQUFLLEVBQUVNLFNBQVM7RUFDbkMsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createMeta } from './createMeta.js';
|
|
2
|
+
import { SET_RESPONSE_TYPE } from '../../actionTypes.js';
|
|
3
|
+
import ensurePojo from '../ensurePojo.js';
|
|
4
|
+
export function createSetResponse(endpoint, {
|
|
5
|
+
args,
|
|
6
|
+
fetchedAt,
|
|
7
|
+
response,
|
|
8
|
+
error = false
|
|
9
|
+
}) {
|
|
10
|
+
var _endpoint$errorExpiry, _endpoint$dataExpiryL;
|
|
11
|
+
const expiryLength = error ? (_endpoint$errorExpiry = endpoint.errorExpiryLength) != null ? _endpoint$errorExpiry : 1000 : (_endpoint$dataExpiryL = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL : 60000;
|
|
12
|
+
/* istanbul ignore next */
|
|
13
|
+
if (process.env.NODE_ENV === 'development' && expiryLength < 0) {
|
|
14
|
+
throw new Error('Negative expiry length are not allowed.');
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
type: SET_RESPONSE_TYPE,
|
|
18
|
+
endpoint,
|
|
19
|
+
response,
|
|
20
|
+
args: args.map(ensurePojo),
|
|
21
|
+
key: endpoint.key(...args),
|
|
22
|
+
meta: createMeta(expiryLength, fetchedAt),
|
|
23
|
+
error
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiU0VUX1JFU1BPTlNFX1RZUEUiLCJlbnN1cmVQb2pvIiwiY3JlYXRlU2V0UmVzcG9uc2UiLCJlbmRwb2ludCIsImFyZ3MiLCJmZXRjaGVkQXQiLCJyZXNwb25zZSIsImVycm9yIiwiX2VuZHBvaW50JGVycm9yRXhwaXJ5IiwiX2VuZHBvaW50JGRhdGFFeHBpcnlMIiwiZXhwaXJ5TGVuZ3RoIiwiZXJyb3JFeHBpcnlMZW5ndGgiLCJkYXRhRXhwaXJ5TGVuZ3RoIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiRXJyb3IiLCJ0eXBlIiwibWFwIiwia2V5IiwibWV0YSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlU2V0UmVzcG9uc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludEludGVyZmFjZSwgUmVzb2x2ZVR5cGUgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgY3JlYXRlTWV0YSB9IGZyb20gJy4vY3JlYXRlTWV0YS5qcyc7XG5pbXBvcnQgeyBTRVRfUkVTUE9OU0VfVFlQRSB9IGZyb20gJy4uLy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2V0UmVzcG9uc2VBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgZW5zdXJlUG9qbyBmcm9tICcuLi9lbnN1cmVQb2pvLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXRSZXNwb25zZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgb3B0aW9uczoge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogRXJyb3I7XG4gICAgZmV0Y2hlZEF0PzogbnVtYmVyO1xuICAgIGVycm9yOiB0cnVlO1xuICB9LFxuKTogU2V0UmVzcG9uc2VBY3Rpb248RT47XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXRSZXNwb25zZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgb3B0aW9uczoge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogUmVzb2x2ZVR5cGU8RT47XG4gICAgZmV0Y2hlZEF0PzogbnVtYmVyO1xuICAgIGVycm9yPzogZmFsc2U7XG4gIH0sXG4pOiBTZXRSZXNwb25zZUFjdGlvbjxFPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldFJlc3BvbnNlPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgfSxcbj4oXG4gIGVuZHBvaW50OiBFLFxuICB7XG4gICAgYXJncyxcbiAgICBmZXRjaGVkQXQsXG4gICAgcmVzcG9uc2UsXG4gICAgZXJyb3IgPSBmYWxzZSxcbiAgfToge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogYW55O1xuICAgIGZldGNoZWRBdD86IG51bWJlcjtcbiAgICBlcnJvcj86IGJvb2xlYW47XG4gIH0sXG4pOiBTZXRSZXNwb25zZUFjdGlvbjxFPiB7XG4gIGNvbnN0IGV4cGlyeUxlbmd0aDogbnVtYmVyID1cbiAgICBlcnJvciA/XG4gICAgICAoZW5kcG9pbnQuZXJyb3JFeHBpcnlMZW5ndGggPz8gMTAwMClcbiAgICA6IChlbmRwb2ludC5kYXRhRXhwaXJ5TGVuZ3RoID8/IDYwMDAwKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGV4cGlyeUxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZ2F0aXZlIGV4cGlyeSBsZW5ndGggYXJlIG5vdCBhbGxvd2VkLicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBTRVRfUkVTUE9OU0VfVFlQRSxcbiAgICBlbmRwb2ludCxcbiAgICByZXNwb25zZSxcbiAgICBhcmdzOiBhcmdzLm1hcChlbnN1cmVQb2pvKSxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgICBtZXRhOiBjcmVhdGVNZXRhKGV4cGlyeUxlbmd0aCwgZmV0Y2hlZEF0KSxcbiAgICBlcnJvcixcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBU0EsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFFeEQsT0FBT0MsVUFBVSxNQUFNLGtCQUFrQjtBQStCekMsT0FBTyxTQUFTQyxpQkFBaUJBLENBSy9CQyxRQUFXLEVBQ1g7RUFDRUMsSUFBSTtFQUNKQyxTQUFTO0VBQ1RDLFFBQVE7RUFDUkMsS0FBSyxHQUFHO0FBTVYsQ0FBQyxFQUNxQjtFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO0VBQ3RCLE1BQU1DLFlBQW9CLEdBQ3hCSCxLQUFLLElBQUFDLHFCQUFBLEdBQ0ZMLFFBQVEsQ0FBQ1EsaUJBQWlCLFlBQUFILHFCQUFBLEdBQUksSUFBSSxJQUFBQyxxQkFBQSxHQUNsQ04sUUFBUSxDQUFDUyxnQkFBZ0IsWUFBQUgscUJBQUEsR0FBSSxLQUFNO0VBQ3hDO0VBQ0EsSUFBSUksT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxhQUFhLElBQUlMLFlBQVksR0FBRyxDQUFDLEVBQUU7SUFDOUQsTUFBTSxJQUFJTSxLQUFLLENBQUMseUNBQXlDLENBQUM7RUFDNUQ7RUFFQSxPQUFPO0lBQ0xDLElBQUksRUFBRWpCLGlCQUFpQjtJQUN2QkcsUUFBUTtJQUNSRyxRQUFRO0lBQ1JGLElBQUksRUFBRUEsSUFBSSxDQUFDYyxHQUFHLENBQUNqQixVQUFVLENBQUM7SUFDMUJrQixHQUFHLEVBQUVoQixRQUFRLENBQUNnQixHQUFHLENBQUMsR0FBR2YsSUFBSSxDQUFDO0lBQzFCZ0IsSUFBSSxFQUFFckIsVUFBVSxDQUFDVyxZQUFZLEVBQUVMLFNBQVMsQ0FBQztJQUN6Q0U7RUFDRixDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SUBSCRIBE_TYPE, UNSUBSCRIBE_TYPE } from '../../actionTypes.js';
|
|
2
|
+
export function createSubscription(endpoint, {
|
|
3
|
+
args
|
|
4
|
+
}) {
|
|
5
|
+
return {
|
|
6
|
+
type: SUBSCRIBE_TYPE,
|
|
7
|
+
endpoint,
|
|
8
|
+
args,
|
|
9
|
+
key: endpoint.key(...args)
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function createUnsubscription(endpoint, {
|
|
13
|
+
args
|
|
14
|
+
}) {
|
|
15
|
+
return {
|
|
16
|
+
type: UNSUBSCRIBE_TYPE,
|
|
17
|
+
endpoint,
|
|
18
|
+
args,
|
|
19
|
+
key: endpoint.key(...args)
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVUJTQ1JJQkVfVFlQRSIsIlVOU1VCU0NSSUJFX1RZUEUiLCJjcmVhdGVTdWJzY3JpcHRpb24iLCJlbmRwb2ludCIsImFyZ3MiLCJ0eXBlIiwia2V5IiwiY3JlYXRlVW5zdWJzY3JpcHRpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZVN1YnNjcmlwdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IFNVQlNDUklCRV9UWVBFLCBVTlNVQlNDUklCRV9UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpYmVBY3Rpb24sIFVuc3Vic2NyaWJlQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaXB0aW9uPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IFN1YnNjcmliZUFjdGlvbjxFPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU1VCU0NSSUJFX1RZUEUsXG4gICAgZW5kcG9pbnQsXG4gICAgYXJncyxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuc3Vic2NyaXB0aW9uPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IFVuc3Vic2NyaWJlQWN0aW9uPEU+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBVTlNVQlNDUklCRV9UWVBFLFxuICAgIGVuZHBvaW50LFxuICAgIGFyZ3MsXG4gICAga2V5OiBlbmRwb2ludC5rZXkoLi4uYXJncyksXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUVBLFNBQVNBLGNBQWMsRUFBRUMsZ0JBQWdCLFFBQVEsc0JBQXNCO0FBR3ZFLE9BQU8sU0FBU0Msa0JBQWtCQSxDQUNoQ0MsUUFBVyxFQUNYO0VBQUVDO0FBQTRDLENBQUMsRUFDM0I7RUFDcEIsT0FBTztJQUNMQyxJQUFJLEVBQUVMLGNBQWM7SUFDcEJHLFFBQVE7SUFDUkMsSUFBSTtJQUNKRSxHQUFHLEVBQUVILFFBQVEsQ0FBQ0csR0FBRyxDQUFDLEdBQUdGLElBQUk7RUFDM0IsQ0FBQztBQUNIO0FBRUEsT0FBTyxTQUFTRyxvQkFBb0JBLENBQ2xDSixRQUFXLEVBQ1g7RUFBRUM7QUFBNEMsQ0FBQyxFQUN6QjtFQUN0QixPQUFPO0lBQ0xDLElBQUksRUFBRUosZ0JBQWdCO0lBQ3RCRSxRQUFRO0lBQ1JDLElBQUk7SUFDSkUsR0FBRyxFQUFFSCxRQUFRLENBQUNHLEdBQUcsQ0FBQyxHQUFHRixJQUFJO0VBQzNCLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { createSubscription, createUnsubscription } from './createSubscription.js';
|
|
2
|
+
export { createSetResponse } from './createSetResponse.js';
|
|
3
|
+
export { createSet } from './createSet.js';
|
|
4
|
+
export { createReset } from './createReset.js';
|
|
5
|
+
export { createOptimistic } from './createOptimistic.js';
|
|
6
|
+
export { createMeta } from './createMeta.js';
|
|
7
|
+
export { createInvalidateAll } from './createInvalidateAll.js';
|
|
8
|
+
export { createInvalidate } from './createInvalidate.js';
|
|
9
|
+
export { createFetch } from './createFetch.js';
|
|
10
|
+
export { createExpireAll } from './createExpireAll.js';
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVTdWJzY3JpcHRpb24iLCJjcmVhdGVVbnN1YnNjcmlwdGlvbiIsImNyZWF0ZVNldFJlc3BvbnNlIiwiY3JlYXRlU2V0IiwiY3JlYXRlUmVzZXQiLCJjcmVhdGVPcHRpbWlzdGljIiwiY3JlYXRlTWV0YSIsImNyZWF0ZUludmFsaWRhdGVBbGwiLCJjcmVhdGVJbnZhbGlkYXRlIiwiY3JlYXRlRmV0Y2giLCJjcmVhdGVFeHBpcmVBbGwiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGNyZWF0ZVN1YnNjcmlwdGlvbixcbiAgY3JlYXRlVW5zdWJzY3JpcHRpb24sXG59IGZyb20gJy4vY3JlYXRlU3Vic2NyaXB0aW9uLmpzJztcbmV4cG9ydCB7IGNyZWF0ZVNldFJlc3BvbnNlIH0gZnJvbSAnLi9jcmVhdGVTZXRSZXNwb25zZS5qcyc7XG5leHBvcnQgeyBjcmVhdGVTZXQgfSBmcm9tICcuL2NyZWF0ZVNldC5qcyc7XG5leHBvcnQgeyBjcmVhdGVSZXNldCB9IGZyb20gJy4vY3JlYXRlUmVzZXQuanMnO1xuZXhwb3J0IHsgY3JlYXRlT3B0aW1pc3RpYyB9IGZyb20gJy4vY3JlYXRlT3B0aW1pc3RpYy5qcyc7XG5leHBvcnQgeyBjcmVhdGVNZXRhIH0gZnJvbSAnLi9jcmVhdGVNZXRhLmpzJztcbmV4cG9ydCB7IGNyZWF0ZUludmFsaWRhdGVBbGwgfSBmcm9tICcuL2NyZWF0ZUludmFsaWRhdGVBbGwuanMnO1xuZXhwb3J0IHsgY3JlYXRlSW52YWxpZGF0ZSB9IGZyb20gJy4vY3JlYXRlSW52YWxpZGF0ZS5qcyc7XG5leHBvcnQgeyBjcmVhdGVGZXRjaCB9IGZyb20gJy4vY3JlYXRlRmV0Y2guanMnO1xuZXhwb3J0IHsgY3JlYXRlRXhwaXJlQWxsIH0gZnJvbSAnLi9jcmVhdGVFeHBpcmVBbGwuanMnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxrQkFBa0IsRUFDbEJDLG9CQUFvQixRQUNmLHlCQUF5QjtBQUNoQyxTQUFTQyxpQkFBaUIsUUFBUSx3QkFBd0I7QUFDMUQsU0FBU0MsU0FBUyxRQUFRLGdCQUFnQjtBQUMxQyxTQUFTQyxXQUFXLFFBQVEsa0JBQWtCO0FBQzlDLFNBQVNDLGdCQUFnQixRQUFRLHVCQUF1QjtBQUN4RCxTQUFTQyxVQUFVLFFBQVEsaUJBQWlCO0FBQzVDLFNBQVNDLG1CQUFtQixRQUFRLDBCQUEwQjtBQUM5RCxTQUFTQyxnQkFBZ0IsUUFBUSx1QkFBdUI7QUFDeEQsU0FBU0MsV0FBVyxRQUFRLGtCQUFrQjtBQUM5QyxTQUFTQyxlQUFlLFFBQVEsc0JBQXNCIiwiaWdub3JlTGlzdCI6W119
|