react-elmish 4.2.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc +1 -1
- package/.vscode/settings.json +3 -0
- package/README.md +47 -18
- package/dist/Cmd.d.ts +19 -18
- package/dist/Cmd.js +4 -4
- package/dist/Common.d.ts +6 -0
- package/dist/Common.js +35 -0
- package/dist/ElmComponent.d.ts +10 -11
- package/dist/ElmComponent.js +16 -40
- package/dist/ErrorHandling.d.ts +1 -1
- package/dist/ErrorHandling.js +1 -1
- package/dist/Init.d.ts +17 -0
- package/dist/Init.js +7 -1
- package/dist/Testing/createUpdateArgsFactory.d.ts +16 -0
- package/dist/Testing/createUpdateArgsFactory.js +30 -0
- package/dist/Testing/execCmd.d.ts +9 -0
- package/dist/Testing/execCmd.js +88 -0
- package/dist/Testing/execCmd.spec.d.ts +1 -0
- package/dist/Testing/fakeOptions.d.ts +15 -1
- package/dist/Testing/fakeOptions.js +8 -1
- package/dist/Testing/getOfMsgParams.d.ts +8 -0
- package/dist/Testing/getOfMsgParams.js +25 -0
- package/dist/Testing/getUpdateFn.d.ts +8 -0
- package/dist/Testing/getUpdateFn.js +20 -0
- package/dist/Testing/index.d.ts +5 -34
- package/dist/Testing/index.js +36 -154
- package/dist/Testing/renderWithModel.d.ts +13 -0
- package/dist/Testing/renderWithModel.js +32 -0
- package/dist/Testing/renderWithModel.spec.d.ts +1 -0
- package/dist/Types.d.ts +8 -5
- package/dist/Types.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/useElmish.d.ts +31 -0
- package/dist/useElmish.js +21 -35
- package/package.json +11 -11
package/.eslintrc
CHANGED
package/README.md
CHANGED
|
@@ -5,6 +5,35 @@
|
|
|
5
5
|
|
|
6
6
|
This library brings the elmish pattern to react.
|
|
7
7
|
|
|
8
|
+
- [Installation](#installation)
|
|
9
|
+
- [Basic Usage](#basic-usage)
|
|
10
|
+
- [More on messages](#more-on-messages)
|
|
11
|
+
- [Message arguments](#message-arguments)
|
|
12
|
+
- [Symbols instead of strings](#symbols-instead-of-strings)
|
|
13
|
+
- [Dispatch commands in the update map or update function](#dispatch-commands-in-the-update-map-or-update-function)
|
|
14
|
+
- [Dispatch a message](#dispatch-a-message)
|
|
15
|
+
- [Call an async function](#call-an-async-function)
|
|
16
|
+
- [Dispatch a command from `init`](#dispatch-a-command-from-init)
|
|
17
|
+
- [Subscriptions](#subscriptions)
|
|
18
|
+
- [Working with external sources of events](#working-with-external-sources-of-events)
|
|
19
|
+
- [Cleanup subscriptions](#cleanup-subscriptions)
|
|
20
|
+
- [Setup](#setup)
|
|
21
|
+
- [Error handling](#error-handling)
|
|
22
|
+
- [React life cycle management](#react-life-cycle-management)
|
|
23
|
+
- [Composition](#composition)
|
|
24
|
+
- [With an `UpdateMap`](#with-an-updatemap)
|
|
25
|
+
- [With an update function](#with-an-update-function)
|
|
26
|
+
- [Call back parent components](#call-back-parent-components)
|
|
27
|
+
- [Testing](#testing)
|
|
28
|
+
- [Testing the model and simple message commands](#testing-the-model-and-simple-message-commands)
|
|
29
|
+
- [Testing all (async) messages](#testing-all-async-messages)
|
|
30
|
+
- [Testing with an UpdateMap](#testing-with-an-updatemap)
|
|
31
|
+
- [UI Tests](#ui-tests)
|
|
32
|
+
- [Migrations](#migrations)
|
|
33
|
+
- [From v1.x to v2.x](#from-v1x-to-v2x)
|
|
34
|
+
- [From v2.x to v3.x](#from-v2x-to-v3x)
|
|
35
|
+
- [From v3.x to v4.x](#from-v3x-to-v4x)
|
|
36
|
+
|
|
8
37
|
## Installation
|
|
9
38
|
|
|
10
39
|
`npm install react-elmish`
|
|
@@ -13,14 +42,14 @@ This library brings the elmish pattern to react.
|
|
|
13
42
|
|
|
14
43
|
An elmish component basically consists of the following parts:
|
|
15
44
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
45
|
+
- The **Model** holding the state of the component.
|
|
46
|
+
- The **Props** for the component.
|
|
47
|
+
- The **Init** function to create the initial model based on the props.
|
|
48
|
+
- The **Messages** to dispatch which modify the model.
|
|
49
|
+
- The **Update** function to modify the model based on a specific message.
|
|
50
|
+
- The **View** which renders the component based on the current model.
|
|
22
51
|
|
|
23
|
-
|
|
52
|
+
**App.ts:**
|
|
24
53
|
|
|
25
54
|
First import everything from `react-elmish` and declare the **Message** discriminated union type:
|
|
26
55
|
|
|
@@ -101,7 +130,7 @@ export const update = (model: Model, msg: Msg, props: Props): UpdateReturnType<M
|
|
|
101
130
|
|
|
102
131
|
> **Note:** If you are using **typescript** and **typescript-eslint** you should enable the [switch-exhaustive-check](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/switch-exhaustiveness-check.md) rule.
|
|
103
132
|
|
|
104
|
-
|
|
133
|
+
**App.tsx:**
|
|
105
134
|
|
|
106
135
|
To put all this together and to render our component, we need a React component.
|
|
107
136
|
|
|
@@ -439,7 +468,7 @@ function subscription (model: Model): SubscriptionResult<Message> {
|
|
|
439
468
|
}
|
|
440
469
|
|
|
441
470
|
const destructor = () => {
|
|
442
|
-
clearInterval(
|
|
471
|
+
clearInterval(timer);
|
|
443
472
|
}
|
|
444
473
|
|
|
445
474
|
return [cmd.ofSub(sub), destructor];
|
|
@@ -522,7 +551,7 @@ You can handle errors easily with the following pattern.
|
|
|
522
551
|
};
|
|
523
552
|
```
|
|
524
553
|
|
|
525
|
-
|
|
554
|
+
You can also use the `errorHandler` helper function:
|
|
526
555
|
|
|
527
556
|
```ts
|
|
528
557
|
const updateMap = {
|
|
@@ -828,9 +857,7 @@ To inform the parent component about some action, let's say to close a dialog fo
|
|
|
828
857
|
```ts Dialog.ts
|
|
829
858
|
...
|
|
830
859
|
case "close":
|
|
831
|
-
props.onClose
|
|
832
|
-
|
|
833
|
-
return [{}];
|
|
860
|
+
return [{}, cmd.ofFunc.attempt(props.onClose, Msg.error)];
|
|
834
861
|
...
|
|
835
862
|
```
|
|
836
863
|
|
|
@@ -964,10 +991,12 @@ it("dispatches the correct message", async () => {
|
|
|
964
991
|
|
|
965
992
|
This works for function components using the `useElmish` hook and class components.
|
|
966
993
|
|
|
967
|
-
##
|
|
994
|
+
## Migrations
|
|
995
|
+
|
|
996
|
+
### From v1.x to v2.x
|
|
968
997
|
|
|
969
|
-
|
|
970
|
-
|
|
998
|
+
- Use `Logger` and `Message` instead of `ILogger` and `IMessage`.
|
|
999
|
+
- The global declaration of the `Nullable` type was removed, because it is unexpected for this library to declare such a type. You can declare this type for yourself if needed:
|
|
971
1000
|
|
|
972
1001
|
```ts
|
|
973
1002
|
declare global {
|
|
@@ -975,7 +1004,7 @@ This works for function components using the `useElmish` hook and class componen
|
|
|
975
1004
|
}
|
|
976
1005
|
```
|
|
977
1006
|
|
|
978
|
-
|
|
1007
|
+
### From v2.x to v3.x
|
|
979
1008
|
|
|
980
1009
|
The signature of `useElmish` has changed. It takes an options object now. Thus there is no need for the `useElmishMap` function. Use the new `useElmish` hook with an `UpdateMap` instead.
|
|
981
1010
|
|
|
@@ -988,6 +1017,6 @@ import { useElmishMap } from "react-elmish/dist/legacy/useElmishMap";
|
|
|
988
1017
|
|
|
989
1018
|
**Notice**: These functions are marked as deprecated and will be removed in a later release.
|
|
990
1019
|
|
|
991
|
-
|
|
1020
|
+
### From v3.x to v4.x
|
|
992
1021
|
|
|
993
1022
|
Because the legacy `useElmish` and `useElmishMap` have been removed, you have to convert all usages of `useElmish` to use the parameter object.
|
package/dist/Cmd.d.ts
CHANGED
|
@@ -1,37 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type of the dispatch function.
|
|
3
3
|
*/
|
|
4
|
-
declare type Dispatch<
|
|
4
|
+
declare type Dispatch<TMessage> = (msg: TMessage) => void;
|
|
5
5
|
declare type FallbackHandler = (error?: Error) => void;
|
|
6
6
|
declare type Sub<TMsg> = (dispatch: Dispatch<TMsg>, fallback?: FallbackHandler) => void;
|
|
7
7
|
/**
|
|
8
8
|
* Type of a command.
|
|
9
9
|
*/
|
|
10
|
-
declare type Cmd<
|
|
10
|
+
declare type Cmd<TMessage> = Sub<TMessage>[];
|
|
11
11
|
/**
|
|
12
12
|
* Contains functions to create commands.
|
|
13
|
-
* @template
|
|
13
|
+
* @template TMessage Type of the Message discriminated union.
|
|
14
14
|
*/
|
|
15
|
-
interface Command<
|
|
15
|
+
interface Command<TMessage> {
|
|
16
16
|
/**
|
|
17
17
|
* Represents an empty command.
|
|
18
|
+
* @deprecated Do return nothing (`undefined`) instead.
|
|
18
19
|
*/
|
|
19
20
|
none: [];
|
|
20
21
|
/**
|
|
21
22
|
* Creates a command out of a specific message.
|
|
22
|
-
* @param {
|
|
23
|
+
* @param {TMessage} msg The specific message.
|
|
23
24
|
*/
|
|
24
|
-
ofMsg: (msg:
|
|
25
|
+
ofMsg: (msg: TMessage) => Cmd<TMessage>;
|
|
25
26
|
/**
|
|
26
27
|
* Aggregates multiple commands.
|
|
27
|
-
* @param {Cmd<
|
|
28
|
+
* @param {Cmd<TMessage> []} commands Array of commands.
|
|
28
29
|
*/
|
|
29
|
-
batch: (...commands: Cmd<
|
|
30
|
+
batch: (...commands: (Cmd<TMessage> | undefined | null)[]) => Cmd<TMessage>;
|
|
30
31
|
/**
|
|
31
32
|
* Command to call the subscriber.
|
|
32
|
-
* @param {Sub<
|
|
33
|
+
* @param {Sub<TMessage>} sub The subscriber function.
|
|
33
34
|
*/
|
|
34
|
-
ofSub: (sub: Sub<
|
|
35
|
+
ofSub: (sub: Sub<TMessage>) => Cmd<TMessage>;
|
|
35
36
|
/**
|
|
36
37
|
* Provides functionalities to create commands from simple functions.
|
|
37
38
|
*/
|
|
@@ -43,21 +44,21 @@ interface Command<TMsg> {
|
|
|
43
44
|
* @param ofError Creates the message to dispatch when an error occurred.
|
|
44
45
|
* @param args The parameters of the task.
|
|
45
46
|
*/
|
|
46
|
-
either: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => TReturn, ofSuccess: (result: TReturn) =>
|
|
47
|
+
either: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => TReturn, ofSuccess: (result: TReturn) => TMessage, ofError: (error: Error) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
47
48
|
/**
|
|
48
49
|
* Creates a command out of a simple function and ignores the error case.
|
|
49
50
|
* @param task The function to call.
|
|
50
51
|
* @param ofSuccess Creates the message to dispatch after a successful call of the task.
|
|
51
52
|
* @param args The parameters of the task.
|
|
52
53
|
*/
|
|
53
|
-
perform: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => TReturn, ofSuccess: (result: TReturn) =>
|
|
54
|
+
perform: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => TReturn, ofSuccess: (result: TReturn) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
54
55
|
/**
|
|
55
56
|
* Creates a command out of a simple function and ignores the success case.
|
|
56
57
|
* @param task The function to call.
|
|
57
58
|
* @param ofError Creates the message to dispatch when an error occurred.
|
|
58
59
|
* @param args The parameters of the task.
|
|
59
60
|
*/
|
|
60
|
-
attempt: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => TReturn, ofError: (error: Error) =>
|
|
61
|
+
attempt: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => TReturn, ofError: (error: Error) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
61
62
|
};
|
|
62
63
|
/**
|
|
63
64
|
* Provides functionalities to create commands from async functions.
|
|
@@ -70,27 +71,27 @@ interface Command<TMsg> {
|
|
|
70
71
|
* @param ofError Creates the message to dispatch when the promise is rejected.
|
|
71
72
|
* @param args The parameters of the task.
|
|
72
73
|
*/
|
|
73
|
-
either: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => Promise<TReturn>, ofSuccess: (result: TReturn) =>
|
|
74
|
+
either: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => Promise<TReturn>, ofSuccess: (result: TReturn) => TMessage, ofError: (error: Error) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
74
75
|
/**
|
|
75
76
|
* Creates a command out of an async function and ignores the error case.
|
|
76
77
|
* @param task The async function to call.
|
|
77
78
|
* @param ofSuccess Creates the message to dispatch when the promise is resolved.
|
|
78
79
|
* @param args The parameters of the task.
|
|
79
80
|
*/
|
|
80
|
-
perform: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => Promise<TReturn>, ofSuccess: (result: TReturn) =>
|
|
81
|
+
perform: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => Promise<TReturn>, ofSuccess: (result: TReturn) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
81
82
|
/**
|
|
82
83
|
* Creates a command out of an async function and ignores the success case.
|
|
83
84
|
* @param task The async function to call.
|
|
84
85
|
* @param ofError Creates the message to dispatch when the promise is rejected.
|
|
85
86
|
* @param args The parameters of the task.
|
|
86
87
|
*/
|
|
87
|
-
attempt: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => Promise<TReturn>, ofError: (error: Error) =>
|
|
88
|
+
attempt: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => Promise<TReturn>, ofError: (error: Error) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
88
89
|
};
|
|
89
90
|
}
|
|
90
91
|
/**
|
|
91
92
|
* Creates a typed instance of the Command class.
|
|
92
|
-
* @template
|
|
93
|
+
* @template TMessage The type of the Msg discriminated union.
|
|
93
94
|
*/
|
|
94
|
-
declare function createCmd<
|
|
95
|
+
declare function createCmd<TMessage>(): Command<TMessage>;
|
|
95
96
|
export type { Dispatch, Cmd, };
|
|
96
97
|
export { createCmd, };
|
package/dist/Cmd.js
CHANGED
|
@@ -15,12 +15,12 @@ exports.createCmd = createCmd;
|
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Contains functions to create commands.
|
|
18
|
-
* @template
|
|
18
|
+
* @template TMessage Type of the Message discriminated union.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Creates a typed instance of the Command class.
|
|
23
|
-
* @template
|
|
23
|
+
* @template TMessage The type of the Msg discriminated union.
|
|
24
24
|
*/
|
|
25
25
|
function createCmd() {
|
|
26
26
|
return {
|
|
@@ -35,7 +35,7 @@ function createCmd() {
|
|
|
35
35
|
commands[_key] = arguments[_key];
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
return commands.flat();
|
|
38
|
+
return commands.filter(Boolean).flat();
|
|
39
39
|
},
|
|
40
40
|
ofSub: function ofSub(sub) {
|
|
41
41
|
return [sub];
|
|
@@ -150,4 +150,4 @@ function createCmd() {
|
|
|
150
150
|
}
|
|
151
151
|
};
|
|
152
152
|
}
|
|
153
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVDbWQiLCJub25lIiwib2ZNc2ciLCJtc2ciLCJkaXNwYXRjaCIsImJhdGNoIiwiY29tbWFuZHMiLCJmbGF0Iiwib2ZTdWIiLCJzdWIiLCJvZkZ1bmMiLCJlaXRoZXIiLCJ0YXNrIiwib2ZTdWNjZXNzIiwib2ZFcnJvciIsImFyZ3MiLCJiaW5kIiwicmVzdWx0IiwiZXgiLCJwZXJmb3JtIiwiZmFsbGJhY2siLCJhdHRlbXB0Iiwib2ZQcm9taXNlIiwidGhlbiIsImRlZmF1bHRGYWxsYmFja0hhbmRsZXIiXSwic291cmNlcyI6WyIuLi9zcmMvQ21kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHlwZSBvZiB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24uXG4gKi9cbnR5cGUgRGlzcGF0Y2g8VE1zZz4gPSAobXNnOiBUTXNnKSA9PiB2b2lkO1xuXG50eXBlIEZhbGxiYWNrSGFuZGxlciA9IChlcnJvcj86IEVycm9yKSA9PiB2b2lkO1xudHlwZSBTdWI8VE1zZz4gPSAoZGlzcGF0Y2g6IERpc3BhdGNoPFRNc2c+LCBmYWxsYmFjaz86IEZhbGxiYWNrSGFuZGxlcikgPT4gdm9pZDtcblxuLyoqXG4gKiBUeXBlIG9mIGEgY29tbWFuZC5cbiAqL1xudHlwZSBDbWQ8VE1zZz4gPSBTdWI8VE1zZz4gW107XG5cbi8qKlxuICogQ29udGFpbnMgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb21tYW5kcy5cbiAqIEB0ZW1wbGF0ZSBUTXNnIFR5cGUgb2YgdGhlIE1lc3NhZ2UgZGlzY3JpbWluYXRlZCB1bmlvbi5cbiAqL1xuaW50ZXJmYWNlIENvbW1hbmQ8VE1zZz4ge1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYW4gZW1wdHkgY29tbWFuZC5cbiAgICAgKi9cbiAgICBub25lOiBbXSxcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYSBzcGVjaWZpYyBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSB7VE1zZ30gbXNnIFRoZSBzcGVjaWZpYyBtZXNzYWdlLlxuICAgICAqL1xuICAgIG9mTXNnOiAobXNnOiBUTXNnKSA9PiBDbWQ8VE1zZz4sXG4gICAgLyoqXG4gICAgICogQWdncmVnYXRlcyBtdWx0aXBsZSBjb21tYW5kcy5cbiAgICAgKiBAcGFyYW0ge0NtZDxUTXNnPiBbXX0gY29tbWFuZHMgQXJyYXkgb2YgY29tbWFuZHMuXG4gICAgICovXG4gICAgYmF0Y2g6ICguLi5jb21tYW5kczogQ21kPFRNc2c+IFtdKSA9PiBDbWQ8VE1zZz4sXG4gICAgLyoqXG4gICAgICogQ29tbWFuZCB0byBjYWxsIHRoZSBzdWJzY3JpYmVyLlxuICAgICAqIEBwYXJhbSB7U3ViPFRNc2c+fSBzdWIgVGhlIHN1YnNjcmliZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgb2ZTdWI6IChzdWI6IFN1YjxUTXNnPikgPT4gQ21kPFRNc2c+LFxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGZ1bmN0aW9uYWxpdGllcyB0byBjcmVhdGUgY29tbWFuZHMgZnJvbSBzaW1wbGUgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIG9mRnVuYzoge1xuICAgICAgICAvKipcbiAgICAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYSBzaW1wbGUgZnVuY3Rpb24gYW5kIG1hcHMgdGhlIHJlc3VsdC5cbiAgICAgICAgKiBAcGFyYW0gdGFzayBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgKiBAcGFyYW0gb2ZTdWNjZXNzIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgb2YgdGhlIHRhc2suXG4gICAgICAgICogQHBhcmFtIG9mRXJyb3IgQ3JlYXRlcyB0aGUgbWVzc2FnZSB0byBkaXNwYXRjaCB3aGVuIGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAgICAqIEBwYXJhbSBhcmdzIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXNrLlxuICAgICAgICAqL1xuICAgICAgICBlaXRoZXI6IDxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybiwgb2ZTdWNjZXNzOiAocmVzdWx0OiBUUmV0dXJuKSA9PiBUTXNnLCBvZkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiBUTXNnLCAuLi5hcmdzOiBUQXJncykgPT4gQ21kPFRNc2c+LFxuICAgICAgICAvKipcbiAgICAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYSBzaW1wbGUgZnVuY3Rpb24gYW5kIGlnbm9yZXMgdGhlIGVycm9yIGNhc2UuXG4gICAgICAgICogQHBhcmFtIHRhc2sgVGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICAgICogQHBhcmFtIG9mU3VjY2VzcyBDcmVhdGVzIHRoZSBtZXNzYWdlIHRvIGRpc3BhdGNoIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIG9mIHRoZSB0YXNrLlxuICAgICAgICAqIEBwYXJhbSBhcmdzIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXNrLlxuICAgICAgICAqL1xuICAgICAgICBwZXJmb3JtOiA8VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm4sIG9mU3VjY2VzczogKHJlc3VsdDogVFJldHVybikgPT4gVE1zZywgLi4uYXJnczogVEFyZ3MpID0+IENtZDxUTXNnPixcbiAgICAgICAgLyoqXG4gICAgICAgICogQ3JlYXRlcyBhIGNvbW1hbmQgb3V0IG9mIGEgc2ltcGxlIGZ1bmN0aW9uIGFuZCBpZ25vcmVzIHRoZSBzdWNjZXNzIGNhc2UuXG4gICAgICAgICogQHBhcmFtIHRhc2sgVGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICAgICogQHBhcmFtIG9mRXJyb3IgQ3JlYXRlcyB0aGUgbWVzc2FnZSB0byBkaXNwYXRjaCB3aGVuIGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAgICAqIEBwYXJhbSBhcmdzIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXNrLlxuICAgICAgICAqL1xuICAgICAgICBhdHRlbXB0OiA8VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm4sIG9mRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IFRNc2csIC4uLmFyZ3M6IFRBcmdzKSA9PiBDbWQ8VE1zZz4sXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBmdW5jdGlvbmFsaXRpZXMgdG8gY3JlYXRlIGNvbW1hbmRzIGZyb20gYXN5bmMgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIG9mUHJvbWlzZToge1xuICAgICAgICAvKipcbiAgICAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYW4gYXN5bmMgZnVuY3Rpb24gYW5kIG1hcHMgdGhlIHJlc3VsdC5cbiAgICAgICAgKiBAcGFyYW0gdGFzayBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgKiBAcGFyYW0gb2ZTdWNjZXNzIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAgICAgICAgKiBAcGFyYW0gb2ZFcnJvciBDcmVhdGVzIHRoZSBtZXNzYWdlIHRvIGRpc3BhdGNoIHdoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gICAgICAgICogQHBhcmFtIGFyZ3MgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHRhc2suXG4gICAgICAgICovXG4gICAgICAgIGVpdGhlcjogPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBQcm9taXNlPFRSZXR1cm4+LCBvZlN1Y2Nlc3M6IChyZXN1bHQ6IFRSZXR1cm4pID0+IFRNc2csIG9mRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IFRNc2csIC4uLmFyZ3M6IFRBcmdzKSA9PiBDbWQ8VE1zZz4sXG4gICAgICAgIC8qKlxuICAgICAgICAqIENyZWF0ZXMgYSBjb21tYW5kIG91dCBvZiBhbiBhc3luYyBmdW5jdGlvbiBhbmQgaWdub3JlcyB0aGUgZXJyb3IgY2FzZS5cbiAgICAgICAgKiBAcGFyYW0gdGFzayBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgKiBAcGFyYW0gb2ZTdWNjZXNzIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAgICAgICAgKiBAcGFyYW0gYXJncyBUaGUgcGFyYW1ldGVycyBvZiB0aGUgdGFzay5cbiAgICAgICAgKi9cbiAgICAgICAgcGVyZm9ybTogPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBQcm9taXNlPFRSZXR1cm4+LCBvZlN1Y2Nlc3M6IChyZXN1bHQ6IFRSZXR1cm4pID0+IFRNc2csIC4uLmFyZ3M6IFRBcmdzKSA9PiBDbWQ8VE1zZz4sXG4gICAgICAgIC8qKlxuICAgICAgICAqIENyZWF0ZXMgYSBjb21tYW5kIG91dCBvZiBhbiBhc3luYyBmdW5jdGlvbiBhbmQgaWdub3JlcyB0aGUgc3VjY2VzcyBjYXNlLlxuICAgICAgICAqIEBwYXJhbSB0YXNrIFRoZSBhc3luYyBmdW5jdGlvbiB0byBjYWxsLlxuICAgICAgICAqIEBwYXJhbSBvZkVycm9yIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggd2hlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC5cbiAgICAgICAgKiBAcGFyYW0gYXJncyBUaGUgcGFyYW1ldGVycyBvZiB0aGUgdGFzay5cbiAgICAgICAgKi9cbiAgICAgICAgYXR0ZW1wdDogPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBQcm9taXNlPFRSZXR1cm4+LCBvZkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiBUTXNnLCAuLi5hcmdzOiBUQXJncykgPT4gQ21kPFRNc2c+LFxuICAgIH0sXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHR5cGVkIGluc3RhbmNlIG9mIHRoZSBDb21tYW5kIGNsYXNzLlxuICogQHRlbXBsYXRlIFRNc2cgVGhlIHR5cGUgb2YgdGhlIE1zZyBkaXNjcmltaW5hdGVkIHVuaW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDbWQ8VE1zZz4gKCk6IENvbW1hbmQ8VE1zZz4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5vbmU6IFtdLFxuICAgICAgICBvZk1zZyAobXNnOiBUTXNnKTogQ21kPFRNc2c+IHtcbiAgICAgICAgICAgIHJldHVybiBbZGlzcGF0Y2ggPT4gZGlzcGF0Y2gobXNnKV07XG4gICAgICAgIH0sXG4gICAgICAgIGJhdGNoICguLi5jb21tYW5kczogQ21kPFRNc2c+IFtdKTogQ21kPFRNc2c+IHtcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy5mbGF0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9mU3ViIChzdWI6IFN1YjxUTXNnPik6IENtZDxUTXNnPiB7XG4gICAgICAgICAgICByZXR1cm4gW3N1Yl07XG4gICAgICAgIH0sXG4gICAgICAgIG9mRnVuYzoge1xuICAgICAgICAgICAgZWl0aGVyPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJuLCBvZlN1Y2Nlc3M6IChyZXN1bHQ6IFRSZXR1cm4pID0+IFRNc2csIG9mRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IFRNc2csIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNc2c+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5kID0gKGRpc3BhdGNoOiBEaXNwYXRjaDxUTXNnPik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGFzayguLi5hcmdzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gob2ZTdWNjZXNzKHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gob2ZFcnJvcihleCBhcyBFcnJvcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBbYmluZF07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGVyZm9ybTxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybiwgb2ZTdWNjZXNzOiAocmVzdWx0OiBUUmV0dXJuKSA9PiBUTXNnLCAuLi5hcmdzOiBUQXJncyk6IENtZDxUTXNnPiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZCA9IChkaXNwYXRjaDogRGlzcGF0Y2g8VE1zZz4sIGZhbGxiYWNrPzogRmFsbGJhY2tIYW5kbGVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0YXNrKC4uLmFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChvZlN1Y2Nlc3MocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4OiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjayhleCBhcyBFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtiaW5kXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdHRlbXB0PFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJuLCBvZkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiBUTXNnLCAuLi5hcmdzOiBUQXJncyk6IENtZDxUTXNnPiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZCA9IChkaXNwYXRjaDogRGlzcGF0Y2g8VE1zZz4sIGZhbGxiYWNrPzogRmFsbGJhY2tIYW5kbGVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrKC4uLmFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gob2ZFcnJvcihleCBhcyBFcnJvcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBbYmluZF07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBvZlByb21pc2U6IHtcbiAgICAgICAgICAgIGVpdGhlcjxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gUHJvbWlzZTxUUmV0dXJuPiwgb2ZTdWNjZXNzOiAocmVzdWx0OiBUUmV0dXJuKSA9PiBUTXNnLCBvZkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiBUTXNnLCAuLi5hcmdzOiBUQXJncyk6IENtZDxUTXNnPiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZCA9IChkaXNwYXRjaDogRGlzcGF0Y2g8VE1zZz4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayguLi5hcmdzKS50aGVuKHJlc3VsdCA9PiBkaXNwYXRjaChvZlN1Y2Nlc3MocmVzdWx0KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGV4OiBFcnJvcikgPT4gZGlzcGF0Y2gob2ZFcnJvcihleCkpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtiaW5kXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwZXJmb3JtPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBQcm9taXNlPFRSZXR1cm4+LCBvZlN1Y2Nlc3M6IChyZXN1bHQ6IFRSZXR1cm4pID0+IFRNc2csIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNc2c+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0RmFsbGJhY2tIYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBibGFua1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBiaW5kID0gKGRpc3BhdGNoOiBEaXNwYXRjaDxUTXNnPiwgZmFsbGJhY2s6IEZhbGxiYWNrSGFuZGxlciA9IGRlZmF1bHRGYWxsYmFja0hhbmRsZXIpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayguLi5hcmdzKS50aGVuKHJlc3VsdCA9PiBkaXNwYXRjaChvZlN1Y2Nlc3MocmVzdWx0KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZmFsbGJhY2spO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW2JpbmRdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF0dGVtcHQ8VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFByb21pc2U8VFJldHVybj4sIG9mRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IFRNc2csIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNc2c+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5kID0gKGRpc3BhdGNoOiBEaXNwYXRjaDxUTXNnPiwgZmFsbGJhY2s/OiBGYWxsYmFja0hhbmRsZXIpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayguLi5hcmdzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGV4OiBFcnJvcikgPT4gZGlzcGF0Y2gob2ZFcnJvcihleCkpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtiaW5kXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IHR5cGUge1xuICAgIERpc3BhdGNoLFxuICAgIENtZCxcbn07XG5cbmV4cG9ydCB7XG4gICAgY3JlYXRlQ21kLFxufTsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7O0FBTUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQTZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFNBQVQsR0FBMkM7RUFDdkMsT0FBTztJQUNIQyxJQUFJLEVBQUUsRUFESDtJQUVIQyxLQUZHLGlCQUVJQyxHQUZKLEVBRTBCO01BQ3pCLE9BQU8sQ0FBQyxVQUFBQyxRQUFRO1FBQUEsT0FBSUEsUUFBUSxDQUFDRCxHQUFELENBQVo7TUFBQSxDQUFULENBQVA7SUFDSCxDQUpFO0lBS0hFLEtBTEcsbUJBSzBDO01BQUEsa0NBQW5DQyxRQUFtQztRQUFuQ0EsUUFBbUM7TUFBQTs7TUFDekMsT0FBT0EsUUFBUSxDQUFDQyxJQUFULEVBQVA7SUFDSCxDQVBFO0lBUUhDLEtBUkcsaUJBUUlDLEdBUkosRUFRK0I7TUFDOUIsT0FBTyxDQUFDQSxHQUFELENBQVA7SUFDSCxDQVZFO0lBV0hDLE1BQU0sRUFBRTtNQUNKQyxNQURJLGtCQUNzQ0MsSUFEdEMsRUFDeUVDLFNBRHpFLEVBQytHQyxPQUQvRyxFQUMySztRQUFBLG1DQUF4QkMsSUFBd0I7VUFBeEJBLElBQXdCO1FBQUE7O1FBQzNLLElBQU1DLElBQUksR0FBRyxTQUFQQSxJQUFPLENBQUNaLFFBQUQsRUFBb0M7VUFDN0MsSUFBSTtZQUNBLElBQU1hLE9BQU0sR0FBR0wsSUFBSSxNQUFKLFNBQVFHLElBQVIsQ0FBZjs7WUFFQVgsUUFBUSxDQUFDUyxTQUFTLENBQUNJLE9BQUQsQ0FBVixDQUFSO1VBQ0gsQ0FKRCxDQUlFLE9BQU9DLEVBQVAsRUFBb0I7WUFDbEJkLFFBQVEsQ0FBQ1UsT0FBTyxDQUFDSSxFQUFELENBQVIsQ0FBUjtVQUNIO1FBQ0osQ0FSRDs7UUFVQSxPQUFPLENBQUNGLElBQUQsQ0FBUDtNQUNILENBYkc7TUFjSkcsT0FkSSxtQkFjdUNQLElBZHZDLEVBYzBFQyxTQWQxRSxFQWMySTtRQUFBLG1DQUF4QkUsSUFBd0I7VUFBeEJBLElBQXdCO1FBQUE7O1FBQzNJLElBQU1DLElBQUksR0FBRyxTQUFQQSxJQUFPLENBQUNaLFFBQUQsRUFBMkJnQixRQUEzQixFQUFnRTtVQUN6RSxJQUFJO1lBQ0EsSUFBTUgsUUFBTSxHQUFHTCxJQUFJLE1BQUosU0FBUUcsSUFBUixDQUFmOztZQUVBWCxRQUFRLENBQUNTLFNBQVMsQ0FBQ0ksUUFBRCxDQUFWLENBQVI7VUFDSCxDQUpELENBSUUsT0FBT0MsRUFBUCxFQUFvQjtZQUNsQixJQUFJRSxRQUFKLEVBQWM7Y0FDVkEsUUFBUSxDQUFDRixFQUFELENBQVI7WUFDSDtVQUNKO1FBQ0osQ0FWRDs7UUFZQSxPQUFPLENBQUNGLElBQUQsQ0FBUDtNQUNILENBNUJHO01BNkJKSyxPQTdCSSxtQkE2QnVDVCxJQTdCdkMsRUE2QjBFRSxPQTdCMUUsRUE2QnNJO1FBQUEsbUNBQXhCQyxJQUF3QjtVQUF4QkEsSUFBd0I7UUFBQTs7UUFDdEksSUFBTUMsSUFBSSxHQUFHLFNBQVBBLElBQU8sQ0FBQ1osUUFBRCxFQUEyQmdCLFFBQTNCLEVBQWdFO1VBQ3pFLElBQUk7WUFDQVIsSUFBSSxNQUFKLFNBQVFHLElBQVI7O1lBRUEsSUFBSUssUUFBSixFQUFjO2NBQ1ZBLFFBQVE7WUFDWDtVQUNKLENBTkQsQ0FNRSxPQUFPRixFQUFQLEVBQW9CO1lBQ2xCZCxRQUFRLENBQUNVLE9BQU8sQ0FBQ0ksRUFBRCxDQUFSLENBQVI7VUFDSDtRQUNKLENBVkQ7O1FBWUEsT0FBTyxDQUFDRixJQUFELENBQVA7TUFDSDtJQTNDRyxDQVhMO0lBd0RITSxTQUFTLEVBQUU7TUFDUFgsTUFETyxrQkFDbUNDLElBRG5DLEVBQytFQyxTQUQvRSxFQUNxSEMsT0FEckgsRUFDaUw7UUFBQSxtQ0FBeEJDLElBQXdCO1VBQXhCQSxJQUF3QjtRQUFBOztRQUNwTCxJQUFNQyxJQUFJLEdBQUcsU0FBUEEsSUFBTyxDQUFDWixRQUFELEVBQW9DO1VBQzdDUSxJQUFJLE1BQUosU0FBUUcsSUFBUixFQUFjUSxJQUFkLENBQW1CLFVBQUFOLE1BQU07WUFBQSxPQUFJYixRQUFRLENBQUNTLFNBQVMsQ0FBQ0ksTUFBRCxDQUFWLENBQVo7VUFBQSxDQUF6QixXQUNXLFVBQUNDLEVBQUQ7WUFBQSxPQUFlZCxRQUFRLENBQUNVLE9BQU8sQ0FBQ0ksRUFBRCxDQUFSLENBQXZCO1VBQUEsQ0FEWDtRQUVILENBSEQ7O1FBS0EsT0FBTyxDQUFDRixJQUFELENBQVA7TUFDSCxDQVJNO01BU1BHLE9BVE8sbUJBU29DUCxJQVRwQyxFQVNnRkMsU0FUaEYsRUFTaUo7UUFBQSxtQ0FBeEJFLElBQXdCO1VBQXhCQSxJQUF3QjtRQUFBOztRQUNwSixJQUFNUyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXlCLEdBQVksQ0FDdkM7UUFDSCxDQUZEOztRQUlBLElBQU1SLElBQUksR0FBRyxTQUFQQSxJQUFPLENBQUNaLFFBQUQsRUFBd0Y7VUFBQSxJQUE3RGdCLFFBQTZELHVFQUFqQ0ksc0JBQWlDO1VBQ2pHWixJQUFJLE1BQUosU0FBUUcsSUFBUixFQUFjUSxJQUFkLENBQW1CLFVBQUFOLE1BQU07WUFBQSxPQUFJYixRQUFRLENBQUNTLFNBQVMsQ0FBQ0ksTUFBRCxDQUFWLENBQVo7VUFBQSxDQUF6QixXQUNXRyxRQURYO1FBRUgsQ0FIRDs7UUFLQSxPQUFPLENBQUNKLElBQUQsQ0FBUDtNQUNILENBcEJNO01BcUJQSyxPQXJCTyxtQkFxQm9DVCxJQXJCcEMsRUFxQmdGRSxPQXJCaEYsRUFxQjRJO1FBQUEsbUNBQXhCQyxJQUF3QjtVQUF4QkEsSUFBd0I7UUFBQTs7UUFDL0ksSUFBTUMsSUFBSSxHQUFHLFNBQVBBLElBQU8sQ0FBQ1osUUFBRCxFQUEyQmdCLFFBQTNCLEVBQWdFO1VBQ3pFUixJQUFJLE1BQUosU0FBUUcsSUFBUixFQUFjUSxJQUFkLENBQW1CLFlBQU07WUFDckIsSUFBSUgsUUFBSixFQUFjO2NBQ1ZBLFFBQVE7WUFDWDtVQUNKLENBSkQsV0FLVyxVQUFDRixFQUFEO1lBQUEsT0FBZWQsUUFBUSxDQUFDVSxPQUFPLENBQUNJLEVBQUQsQ0FBUixDQUF2QjtVQUFBLENBTFg7UUFNSCxDQVBEOztRQVNBLE9BQU8sQ0FBQ0YsSUFBRCxDQUFQO01BQ0g7SUFoQ007RUF4RFIsQ0FBUDtBQTJGSCJ9
|
|
153
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVDbWQiLCJub25lIiwib2ZNc2ciLCJtc2ciLCJkaXNwYXRjaCIsImJhdGNoIiwiY29tbWFuZHMiLCJmaWx0ZXIiLCJCb29sZWFuIiwiZmxhdCIsIm9mU3ViIiwic3ViIiwib2ZGdW5jIiwiZWl0aGVyIiwidGFzayIsIm9mU3VjY2VzcyIsIm9mRXJyb3IiLCJhcmdzIiwiYmluZCIsInJlc3VsdCIsImV4IiwicGVyZm9ybSIsImZhbGxiYWNrIiwiYXR0ZW1wdCIsIm9mUHJvbWlzZSIsInRoZW4iLCJkZWZhdWx0RmFsbGJhY2tIYW5kbGVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL0NtZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFR5cGUgb2YgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uLlxuICovXG50eXBlIERpc3BhdGNoPFRNZXNzYWdlPiA9IChtc2c6IFRNZXNzYWdlKSA9PiB2b2lkO1xuXG50eXBlIEZhbGxiYWNrSGFuZGxlciA9IChlcnJvcj86IEVycm9yKSA9PiB2b2lkO1xudHlwZSBTdWI8VE1zZz4gPSAoZGlzcGF0Y2g6IERpc3BhdGNoPFRNc2c+LCBmYWxsYmFjaz86IEZhbGxiYWNrSGFuZGxlcikgPT4gdm9pZDtcblxuLyoqXG4gKiBUeXBlIG9mIGEgY29tbWFuZC5cbiAqL1xudHlwZSBDbWQ8VE1lc3NhZ2U+ID0gU3ViPFRNZXNzYWdlPiBbXTtcblxuLyoqXG4gKiBDb250YWlucyBmdW5jdGlvbnMgdG8gY3JlYXRlIGNvbW1hbmRzLlxuICogQHRlbXBsYXRlIFRNZXNzYWdlIFR5cGUgb2YgdGhlIE1lc3NhZ2UgZGlzY3JpbWluYXRlZCB1bmlvbi5cbiAqL1xuaW50ZXJmYWNlIENvbW1hbmQ8VE1lc3NhZ2U+IHtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGVtcHR5IGNvbW1hbmQuXG4gICAgICogQGRlcHJlY2F0ZWQgRG8gcmV0dXJuIG5vdGhpbmcgKGB1bmRlZmluZWRgKSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIG5vbmU6IFtdLFxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb21tYW5kIG91dCBvZiBhIHNwZWNpZmljIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIHtUTWVzc2FnZX0gbXNnIFRoZSBzcGVjaWZpYyBtZXNzYWdlLlxuICAgICAqL1xuICAgIG9mTXNnOiAobXNnOiBUTWVzc2FnZSkgPT4gQ21kPFRNZXNzYWdlPixcbiAgICAvKipcbiAgICAgKiBBZ2dyZWdhdGVzIG11bHRpcGxlIGNvbW1hbmRzLlxuICAgICAqIEBwYXJhbSB7Q21kPFRNZXNzYWdlPiBbXX0gY29tbWFuZHMgQXJyYXkgb2YgY29tbWFuZHMuXG4gICAgICovXG4gICAgYmF0Y2g6ICguLi5jb21tYW5kczogKENtZDxUTWVzc2FnZT4gfCB1bmRlZmluZWQgfCBudWxsKSBbXSkgPT4gQ21kPFRNZXNzYWdlPixcbiAgICAvKipcbiAgICAgKiBDb21tYW5kIHRvIGNhbGwgdGhlIHN1YnNjcmliZXIuXG4gICAgICogQHBhcmFtIHtTdWI8VE1lc3NhZ2U+fSBzdWIgVGhlIHN1YnNjcmliZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgb2ZTdWI6IChzdWI6IFN1YjxUTWVzc2FnZT4pID0+IENtZDxUTWVzc2FnZT4sXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgZnVuY3Rpb25hbGl0aWVzIHRvIGNyZWF0ZSBjb21tYW5kcyBmcm9tIHNpbXBsZSBmdW5jdGlvbnMuXG4gICAgICovXG4gICAgb2ZGdW5jOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAqIENyZWF0ZXMgYSBjb21tYW5kIG91dCBvZiBhIHNpbXBsZSBmdW5jdGlvbiBhbmQgbWFwcyB0aGUgcmVzdWx0LlxuICAgICAgICAqIEBwYXJhbSB0YXNrIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICAgICAgICAqIEBwYXJhbSBvZlN1Y2Nlc3MgQ3JlYXRlcyB0aGUgbWVzc2FnZSB0byBkaXNwYXRjaCBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCBvZiB0aGUgdGFzay5cbiAgICAgICAgKiBAcGFyYW0gb2ZFcnJvciBDcmVhdGVzIHRoZSBtZXNzYWdlIHRvIGRpc3BhdGNoIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuXG4gICAgICAgICogQHBhcmFtIGFyZ3MgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHRhc2suXG4gICAgICAgICovXG4gICAgICAgIGVpdGhlcjogPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJuLCBvZlN1Y2Nlc3M6IChyZXN1bHQ6IFRSZXR1cm4pID0+IFRNZXNzYWdlLCBvZkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiBUTWVzc2FnZSwgLi4uYXJnczogVEFyZ3MpID0+IENtZDxUTWVzc2FnZT4sXG4gICAgICAgIC8qKlxuICAgICAgICAqIENyZWF0ZXMgYSBjb21tYW5kIG91dCBvZiBhIHNpbXBsZSBmdW5jdGlvbiBhbmQgaWdub3JlcyB0aGUgZXJyb3IgY2FzZS5cbiAgICAgICAgKiBAcGFyYW0gdGFzayBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgKiBAcGFyYW0gb2ZTdWNjZXNzIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgb2YgdGhlIHRhc2suXG4gICAgICAgICogQHBhcmFtIGFyZ3MgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHRhc2suXG4gICAgICAgICovXG4gICAgICAgIHBlcmZvcm06IDxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybiwgb2ZTdWNjZXNzOiAocmVzdWx0OiBUUmV0dXJuKSA9PiBUTWVzc2FnZSwgLi4uYXJnczogVEFyZ3MpID0+IENtZDxUTWVzc2FnZT4sXG4gICAgICAgIC8qKlxuICAgICAgICAqIENyZWF0ZXMgYSBjb21tYW5kIG91dCBvZiBhIHNpbXBsZSBmdW5jdGlvbiBhbmQgaWdub3JlcyB0aGUgc3VjY2VzcyBjYXNlLlxuICAgICAgICAqIEBwYXJhbSB0YXNrIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICAgICAgICAqIEBwYXJhbSBvZkVycm9yIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggd2hlbiBhbiBlcnJvciBvY2N1cnJlZC5cbiAgICAgICAgKiBAcGFyYW0gYXJncyBUaGUgcGFyYW1ldGVycyBvZiB0aGUgdGFzay5cbiAgICAgICAgKi9cbiAgICAgICAgYXR0ZW1wdDogPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJuLCBvZkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiBUTWVzc2FnZSwgLi4uYXJnczogVEFyZ3MpID0+IENtZDxUTWVzc2FnZT4sXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBmdW5jdGlvbmFsaXRpZXMgdG8gY3JlYXRlIGNvbW1hbmRzIGZyb20gYXN5bmMgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIG9mUHJvbWlzZToge1xuICAgICAgICAvKipcbiAgICAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYW4gYXN5bmMgZnVuY3Rpb24gYW5kIG1hcHMgdGhlIHJlc3VsdC5cbiAgICAgICAgKiBAcGFyYW0gdGFzayBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgKiBAcGFyYW0gb2ZTdWNjZXNzIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAgICAgICAgKiBAcGFyYW0gb2ZFcnJvciBDcmVhdGVzIHRoZSBtZXNzYWdlIHRvIGRpc3BhdGNoIHdoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gICAgICAgICogQHBhcmFtIGFyZ3MgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHRhc2suXG4gICAgICAgICovXG4gICAgICAgIGVpdGhlcjogPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBQcm9taXNlPFRSZXR1cm4+LCBvZlN1Y2Nlc3M6IChyZXN1bHQ6IFRSZXR1cm4pID0+IFRNZXNzYWdlLCBvZkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiBUTWVzc2FnZSwgLi4uYXJnczogVEFyZ3MpID0+IENtZDxUTWVzc2FnZT4sXG4gICAgICAgIC8qKlxuICAgICAgICAqIENyZWF0ZXMgYSBjb21tYW5kIG91dCBvZiBhbiBhc3luYyBmdW5jdGlvbiBhbmQgaWdub3JlcyB0aGUgZXJyb3IgY2FzZS5cbiAgICAgICAgKiBAcGFyYW0gdGFzayBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgKiBAcGFyYW0gb2ZTdWNjZXNzIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAgICAgICAgKiBAcGFyYW0gYXJncyBUaGUgcGFyYW1ldGVycyBvZiB0aGUgdGFzay5cbiAgICAgICAgKi9cbiAgICAgICAgcGVyZm9ybTogPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBQcm9taXNlPFRSZXR1cm4+LCBvZlN1Y2Nlc3M6IChyZXN1bHQ6IFRSZXR1cm4pID0+IFRNZXNzYWdlLCAuLi5hcmdzOiBUQXJncykgPT4gQ21kPFRNZXNzYWdlPixcbiAgICAgICAgLyoqXG4gICAgICAgICogQ3JlYXRlcyBhIGNvbW1hbmQgb3V0IG9mIGFuIGFzeW5jIGZ1bmN0aW9uIGFuZCBpZ25vcmVzIHRoZSBzdWNjZXNzIGNhc2UuXG4gICAgICAgICogQHBhcmFtIHRhc2sgVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICAgICogQHBhcmFtIG9mRXJyb3IgQ3JlYXRlcyB0aGUgbWVzc2FnZSB0byBkaXNwYXRjaCB3aGVuIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkLlxuICAgICAgICAqIEBwYXJhbSBhcmdzIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXNrLlxuICAgICAgICAqL1xuICAgICAgICBhdHRlbXB0OiA8VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFByb21pc2U8VFJldHVybj4sIG9mRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IFRNZXNzYWdlLCAuLi5hcmdzOiBUQXJncykgPT4gQ21kPFRNZXNzYWdlPixcbiAgICB9LFxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0eXBlZCBpbnN0YW5jZSBvZiB0aGUgQ29tbWFuZCBjbGFzcy5cbiAqIEB0ZW1wbGF0ZSBUTWVzc2FnZSBUaGUgdHlwZSBvZiB0aGUgTXNnIGRpc2NyaW1pbmF0ZWQgdW5pb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNtZDxUTWVzc2FnZT4gKCk6IENvbW1hbmQ8VE1lc3NhZ2U+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBub25lOiBbXSxcbiAgICAgICAgb2ZNc2cgKG1zZzogVE1lc3NhZ2UpOiBDbWQ8VE1lc3NhZ2U+IHtcbiAgICAgICAgICAgIHJldHVybiBbZGlzcGF0Y2ggPT4gZGlzcGF0Y2gobXNnKV07XG4gICAgICAgIH0sXG4gICAgICAgIGJhdGNoICguLi5jb21tYW5kczogKENtZDxUTWVzc2FnZT4gfCB1bmRlZmluZWQgfCBudWxsKSBbXSk6IENtZDxUTWVzc2FnZT4ge1xuICAgICAgICAgICAgcmV0dXJuIChjb21tYW5kcy5maWx0ZXIoQm9vbGVhbikgYXMgQ21kPFRNZXNzYWdlPiBbXSkuZmxhdCgpO1xuICAgICAgICB9LFxuICAgICAgICBvZlN1YiAoc3ViOiBTdWI8VE1lc3NhZ2U+KTogQ21kPFRNZXNzYWdlPiB7XG4gICAgICAgICAgICByZXR1cm4gW3N1Yl07XG4gICAgICAgIH0sXG4gICAgICAgIG9mRnVuYzoge1xuICAgICAgICAgICAgZWl0aGVyPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmV0dXJuLCBvZlN1Y2Nlc3M6IChyZXN1bHQ6IFRSZXR1cm4pID0+IFRNZXNzYWdlLCBvZkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiBUTWVzc2FnZSwgLi4uYXJnczogVEFyZ3MpOiBDbWQ8VE1lc3NhZ2U+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5kID0gKGRpc3BhdGNoOiBEaXNwYXRjaDxUTWVzc2FnZT4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRhc2soLi4uYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKG9mU3VjY2VzcyhyZXN1bHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKG9mRXJyb3IoZXggYXMgRXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW2JpbmRdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBlcmZvcm08VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm4sIG9mU3VjY2VzczogKHJlc3VsdDogVFJldHVybikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNZXNzYWdlPiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZCA9IChkaXNwYXRjaDogRGlzcGF0Y2g8VE1lc3NhZ2U+LCBmYWxsYmFjaz86IEZhbGxiYWNrSGFuZGxlcik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGFzayguLi5hcmdzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gob2ZTdWNjZXNzKHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2soZXggYXMgRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBbYmluZF07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXR0ZW1wdDxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybiwgb2ZFcnJvcjogKGVycm9yOiBFcnJvcikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNZXNzYWdlPiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZCA9IChkaXNwYXRjaDogRGlzcGF0Y2g8VE1lc3NhZ2U+LCBmYWxsYmFjaz86IEZhbGxiYWNrSGFuZGxlcik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFzayguLi5hcmdzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKG9mRXJyb3IoZXggYXMgRXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW2JpbmRdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgb2ZQcm9taXNlOiB7XG4gICAgICAgICAgICBlaXRoZXI8VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFByb21pc2U8VFJldHVybj4sIG9mU3VjY2VzczogKHJlc3VsdDogVFJldHVybikgPT4gVE1lc3NhZ2UsIG9mRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IFRNZXNzYWdlLCAuLi5hcmdzOiBUQXJncyk6IENtZDxUTWVzc2FnZT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmQgPSAoZGlzcGF0Y2g6IERpc3BhdGNoPFRNZXNzYWdlPik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKC4uLmFyZ3MpLnRoZW4ocmVzdWx0ID0+IGRpc3BhdGNoKG9mU3VjY2VzcyhyZXN1bHQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXg6IEVycm9yKSA9PiBkaXNwYXRjaChvZkVycm9yKGV4KSkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW2JpbmRdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBlcmZvcm08VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFByb21pc2U8VFJldHVybj4sIG9mU3VjY2VzczogKHJlc3VsdDogVFJldHVybikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNZXNzYWdlPiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZhbGxiYWNrSGFuZGxlciA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYmxhbmtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYmluZCA9IChkaXNwYXRjaDogRGlzcGF0Y2g8VE1lc3NhZ2U+LCBmYWxsYmFjazogRmFsbGJhY2tIYW5kbGVyID0gZGVmYXVsdEZhbGxiYWNrSGFuZGxlcik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKC4uLmFyZ3MpLnRoZW4ocmVzdWx0ID0+IGRpc3BhdGNoKG9mU3VjY2VzcyhyZXN1bHQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBbYmluZF07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXR0ZW1wdDxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gUHJvbWlzZTxUUmV0dXJuPiwgb2ZFcnJvcjogKGVycm9yOiBFcnJvcikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNZXNzYWdlPiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZCA9IChkaXNwYXRjaDogRGlzcGF0Y2g8VE1lc3NhZ2U+LCBmYWxsYmFjaz86IEZhbGxiYWNrSGFuZGxlcik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKC4uLmFyZ3MpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXg6IEVycm9yKSA9PiBkaXNwYXRjaChvZkVycm9yKGV4KSkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW2JpbmRdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgdHlwZSB7XG4gICAgRGlzcGF0Y2gs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
|
package/dist/Common.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Cmd, Dispatch } from "./Cmd";
|
|
2
|
+
import { MessageBase } from "./Types";
|
|
3
|
+
declare function logMessage<TMessage extends MessageBase>(name: string, msg: TMessage): void;
|
|
4
|
+
declare function modelHasChanged<TModel>(currentModel: TModel, model: Partial<TModel>): boolean;
|
|
5
|
+
declare function execCmd<TMessage>(cmd: Cmd<TMessage>, dispatch: Dispatch<TMessage>): void;
|
|
6
|
+
export { logMessage, modelHasChanged, execCmd, };
|
package/dist/Common.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.execCmd = execCmd;
|
|
7
|
+
exports.logMessage = logMessage;
|
|
8
|
+
exports.modelHasChanged = modelHasChanged;
|
|
9
|
+
|
|
10
|
+
var _Init = require("./Init");
|
|
11
|
+
|
|
12
|
+
function logMessage(name, msg) {
|
|
13
|
+
var _Services$logger, _Services$logger2, _Services$dispatchMid;
|
|
14
|
+
|
|
15
|
+
(_Services$logger = _Init.Services.logger) === null || _Services$logger === void 0 ? void 0 : _Services$logger.info("Elm", "message from", name, msg.name);
|
|
16
|
+
(_Services$logger2 = _Init.Services.logger) === null || _Services$logger2 === void 0 ? void 0 : _Services$logger2.debug("Elm", "message from", name, msg);
|
|
17
|
+
(_Services$dispatchMid = _Init.Services.dispatchMiddleware) === null || _Services$dispatchMid === void 0 ? void 0 : _Services$dispatchMid.call(_Init.Services, msg);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function modelHasChanged(currentModel, model) {
|
|
21
|
+
return !Object.is(model, currentModel) && Object.getOwnPropertyNames(model).length > 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function execCmd(cmd, dispatch) {
|
|
25
|
+
cmd.forEach(function (call) {
|
|
26
|
+
try {
|
|
27
|
+
call(dispatch);
|
|
28
|
+
} catch (ex) {
|
|
29
|
+
var _Services$logger3;
|
|
30
|
+
|
|
31
|
+
(_Services$logger3 = _Init.Services.logger) === null || _Services$logger3 === void 0 ? void 0 : _Services$logger3.error(ex);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2dNZXNzYWdlIiwibmFtZSIsIm1zZyIsIlNlcnZpY2VzIiwibG9nZ2VyIiwiaW5mbyIsImRlYnVnIiwiZGlzcGF0Y2hNaWRkbGV3YXJlIiwibW9kZWxIYXNDaGFuZ2VkIiwiY3VycmVudE1vZGVsIiwibW9kZWwiLCJPYmplY3QiLCJpcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW5ndGgiLCJleGVjQ21kIiwiY21kIiwiZGlzcGF0Y2giLCJmb3JFYWNoIiwiY2FsbCIsImV4IiwiZXJyb3IiXSwic291cmNlcyI6WyIuLi9zcmMvQ29tbW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENtZCwgRGlzcGF0Y2ggfSBmcm9tIFwiLi9DbWRcIjtcbmltcG9ydCB7IFNlcnZpY2VzIH0gZnJvbSBcIi4vSW5pdFwiO1xuaW1wb3J0IHsgTWVzc2FnZUJhc2UgfSBmcm9tIFwiLi9UeXBlc1wiO1xuXG5mdW5jdGlvbiBsb2dNZXNzYWdlPFRNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZUJhc2U+IChuYW1lOiBzdHJpbmcsIG1zZzogVE1lc3NhZ2UpOiB2b2lkIHtcbiAgICBTZXJ2aWNlcy5sb2dnZXI/LmluZm8oXCJFbG1cIiwgXCJtZXNzYWdlIGZyb21cIiwgbmFtZSwgbXNnLm5hbWUpO1xuICAgIFNlcnZpY2VzLmxvZ2dlcj8uZGVidWcoXCJFbG1cIiwgXCJtZXNzYWdlIGZyb21cIiwgbmFtZSwgbXNnKTtcblxuICAgIFNlcnZpY2VzLmRpc3BhdGNoTWlkZGxld2FyZT8uKG1zZyk7XG59XG5cbmZ1bmN0aW9uIG1vZGVsSGFzQ2hhbmdlZDxUTW9kZWw+IChjdXJyZW50TW9kZWw6IFRNb2RlbCwgbW9kZWw6IFBhcnRpYWw8VE1vZGVsPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhT2JqZWN0LmlzKG1vZGVsLCBjdXJyZW50TW9kZWwpICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1vZGVsKS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBleGVjQ21kPFRNZXNzYWdlPiAoY21kOiBDbWQ8VE1lc3NhZ2U+LCBkaXNwYXRjaDogRGlzcGF0Y2g8VE1lc3NhZ2U+KTogdm9pZCB7XG4gICAgY21kLmZvckVhY2goY2FsbCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsKGRpc3BhdGNoKTtcbiAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgIFNlcnZpY2VzLmxvZ2dlcj8uZXJyb3IoZXgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCB7XG4gICAgbG9nTWVzc2FnZSxcbiAgICBtb2RlbEhhc0NoYW5nZWQsXG4gICAgZXhlY0NtZCxcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFHQSxTQUFTQSxVQUFULENBQW1EQyxJQUFuRCxFQUFpRUMsR0FBakUsRUFBc0Y7RUFBQTs7RUFDbEYsb0JBQUFDLGNBQUEsQ0FBU0MsTUFBVCxzRUFBaUJDLElBQWpCLENBQXNCLEtBQXRCLEVBQTZCLGNBQTdCLEVBQTZDSixJQUE3QyxFQUFtREMsR0FBRyxDQUFDRCxJQUF2RDtFQUNBLHFCQUFBRSxjQUFBLENBQVNDLE1BQVQsd0VBQWlCRSxLQUFqQixDQUF1QixLQUF2QixFQUE4QixjQUE5QixFQUE4Q0wsSUFBOUMsRUFBb0RDLEdBQXBEO0VBRUEseUJBQUFDLGNBQUEsQ0FBU0ksa0JBQVQscUZBQUFKLGNBQUEsRUFBOEJELEdBQTlCO0FBQ0g7O0FBRUQsU0FBU00sZUFBVCxDQUFrQ0MsWUFBbEMsRUFBd0RDLEtBQXhELEVBQXlGO0VBQ3JGLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDQyxFQUFQLENBQVVGLEtBQVYsRUFBaUJELFlBQWpCLENBQUQsSUFBbUNFLE1BQU0sQ0FBQ0UsbUJBQVAsQ0FBMkJILEtBQTNCLEVBQWtDSSxNQUFsQyxHQUEyQyxDQUFyRjtBQUNIOztBQUVELFNBQVNDLE9BQVQsQ0FBNEJDLEdBQTVCLEVBQWdEQyxRQUFoRCxFQUFvRjtFQUNoRkQsR0FBRyxDQUFDRSxPQUFKLENBQVksVUFBQUMsSUFBSSxFQUFJO0lBQ2hCLElBQUk7TUFDQUEsSUFBSSxDQUFDRixRQUFELENBQUo7SUFDSCxDQUZELENBRUUsT0FBT0csRUFBUCxFQUFvQjtNQUFBOztNQUNsQixxQkFBQWpCLGNBQUEsQ0FBU0MsTUFBVCx3RUFBaUJpQixLQUFqQixDQUF1QkQsRUFBdkI7SUFDSDtFQUNKLENBTkQ7QUFPSCJ9
|
package/dist/ElmComponent.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { InitFunction, UpdateFunction } from "./Types";
|
|
2
|
-
import { Message } from "./Init";
|
|
3
1
|
import React from "react";
|
|
2
|
+
import { Message } from "./Init";
|
|
3
|
+
import { InitFunction, UpdateFunction } from "./Types";
|
|
4
4
|
/**
|
|
5
|
-
* Abstract class for a react class component using the
|
|
5
|
+
* Abstract class for a react class component using the Elmish pattern.
|
|
6
6
|
* @export
|
|
7
7
|
* @abstract
|
|
8
8
|
* @class ElmComponent
|
|
9
9
|
* @extends {Component<TProps, TModel>}
|
|
10
10
|
* @template TModel The type of the model.
|
|
11
|
-
* @template
|
|
11
|
+
* @template TMessage The type of the messages.
|
|
12
12
|
* @template TProps The type of the props.
|
|
13
13
|
*/
|
|
14
|
-
declare abstract class ElmComponent<TModel,
|
|
14
|
+
declare abstract class ElmComponent<TModel, TMessage extends Message, TProps> extends React.Component<TProps> {
|
|
15
15
|
private initCmd;
|
|
16
16
|
private readonly componentName;
|
|
17
17
|
private readonly buffer;
|
|
@@ -25,7 +25,7 @@ declare abstract class ElmComponent<TModel, TMsg extends Message, TProps> extend
|
|
|
25
25
|
* @param name The name of the component.
|
|
26
26
|
* @memberof ElmComponent
|
|
27
27
|
*/
|
|
28
|
-
constructor(props: TProps, init: InitFunction<TProps, TModel,
|
|
28
|
+
constructor(props: TProps, init: InitFunction<TProps, TModel, TMessage>, name: string);
|
|
29
29
|
/**
|
|
30
30
|
* Is called when the component is loaded.
|
|
31
31
|
* When implementing this method, the base implementation has to be called.
|
|
@@ -38,7 +38,6 @@ declare abstract class ElmComponent<TModel, TMsg extends Message, TProps> extend
|
|
|
38
38
|
* @memberof ElmComponent
|
|
39
39
|
*/
|
|
40
40
|
componentWillUnmount(): void;
|
|
41
|
-
private execCmd;
|
|
42
41
|
/**
|
|
43
42
|
* Returns the current model.
|
|
44
43
|
* @readonly
|
|
@@ -48,19 +47,19 @@ declare abstract class ElmComponent<TModel, TMsg extends Message, TProps> extend
|
|
|
48
47
|
get model(): Readonly<TModel>;
|
|
49
48
|
/**
|
|
50
49
|
* Dispatches a message.
|
|
51
|
-
* @param {
|
|
50
|
+
* @param {TMessage} msg The message to dispatch.
|
|
52
51
|
* @memberof ElmComponent
|
|
53
52
|
*/
|
|
54
|
-
readonly dispatch: (msg:
|
|
53
|
+
readonly dispatch: (msg: TMessage) => void;
|
|
55
54
|
/**
|
|
56
55
|
* Function to modify the model based on a message.
|
|
57
56
|
* @param {TModel} model The current model.
|
|
58
|
-
* @param {
|
|
57
|
+
* @param {TMessage} msg The message to process.
|
|
59
58
|
* @param {TProps} props The props of the component.
|
|
60
59
|
* @returns The new model (can also be an empty object {}) and an optional new message to dispatch.
|
|
61
60
|
* @abstract
|
|
62
61
|
* @memberof ElmComponent
|
|
63
62
|
*/
|
|
64
|
-
abstract update: UpdateFunction<TProps, TModel,
|
|
63
|
+
abstract update: UpdateFunction<TProps, TModel, TMessage>;
|
|
65
64
|
}
|
|
66
65
|
export { ElmComponent, };
|
package/dist/ElmComponent.js
CHANGED
|
@@ -7,12 +7,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.ElmComponent = void 0;
|
|
9
9
|
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _Common = require("./Common");
|
|
13
|
+
|
|
10
14
|
var _Init = require("./Init");
|
|
11
15
|
|
|
12
16
|
var _fakeOptions = require("./Testing/fakeOptions");
|
|
13
17
|
|
|
14
|
-
var _react = _interopRequireDefault(require("react"));
|
|
15
|
-
|
|
16
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
17
19
|
|
|
18
20
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -54,13 +56,13 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
|
|
|
54
56
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
55
57
|
|
|
56
58
|
/**
|
|
57
|
-
* Abstract class for a react class component using the
|
|
59
|
+
* Abstract class for a react class component using the Elmish pattern.
|
|
58
60
|
* @export
|
|
59
61
|
* @abstract
|
|
60
62
|
* @class ElmComponent
|
|
61
63
|
* @extends {Component<TProps, TModel>}
|
|
62
64
|
* @template TModel The type of the model.
|
|
63
|
-
* @template
|
|
65
|
+
* @template TMessage The type of the messages.
|
|
64
66
|
* @template TProps The type of the props.
|
|
65
67
|
*/
|
|
66
68
|
var ElmComponent = /*#__PURE__*/function (_React$Component) {
|
|
@@ -95,10 +97,6 @@ var ElmComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
95
97
|
_defineProperty(_assertThisInitialized(_this), "currentModel", void 0);
|
|
96
98
|
|
|
97
99
|
_defineProperty(_assertThisInitialized(_this), "dispatch", function (msg) {
|
|
98
|
-
var modelHasChanged = function modelHasChanged(model) {
|
|
99
|
-
return model !== _this.currentModel && Object.getOwnPropertyNames(model).length > 0;
|
|
100
|
-
};
|
|
101
|
-
|
|
102
100
|
if (_this.reentered) {
|
|
103
101
|
_this.buffer.push(msg);
|
|
104
102
|
} else {
|
|
@@ -107,14 +105,7 @@ var ElmComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
107
105
|
var modified = false;
|
|
108
106
|
|
|
109
107
|
while (nextMsg) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
(_Services$logger = _Init.Services.logger) === null || _Services$logger === void 0 ? void 0 : _Services$logger.info("Elm", "message from", _this.componentName, nextMsg.name);
|
|
113
|
-
(_Services$logger2 = _Init.Services.logger) === null || _Services$logger2 === void 0 ? void 0 : _Services$logger2.debug("Elm", "message from", _this.componentName, nextMsg);
|
|
114
|
-
|
|
115
|
-
if (_Init.Services.dispatchMiddleware) {
|
|
116
|
-
_Init.Services.dispatchMiddleware(nextMsg);
|
|
117
|
-
}
|
|
108
|
+
(0, _Common.logMessage)(_this.componentName, nextMsg);
|
|
118
109
|
|
|
119
110
|
try {
|
|
120
111
|
var _this$update = _this.update(_this.currentModel, nextMsg, _this.props),
|
|
@@ -122,18 +113,18 @@ var ElmComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
122
113
|
model = _this$update2[0],
|
|
123
114
|
cmd = _this$update2[1];
|
|
124
115
|
|
|
125
|
-
if (modelHasChanged(model)) {
|
|
116
|
+
if ((0, _Common.modelHasChanged)(_this.currentModel, model)) {
|
|
126
117
|
_this.currentModel = _objectSpread(_objectSpread({}, _this.currentModel), model);
|
|
127
118
|
modified = true;
|
|
128
119
|
}
|
|
129
120
|
|
|
130
121
|
if (cmd) {
|
|
131
|
-
|
|
122
|
+
(0, _Common.execCmd)(cmd, _this.dispatch);
|
|
132
123
|
}
|
|
133
124
|
} catch (ex) {
|
|
134
|
-
var _Services$
|
|
125
|
+
var _Services$logger;
|
|
135
126
|
|
|
136
|
-
(_Services$
|
|
127
|
+
(_Services$logger = _Init.Services.logger) === null || _Services$logger === void 0 ? void 0 : _Services$logger.error(ex);
|
|
137
128
|
}
|
|
138
129
|
|
|
139
130
|
nextMsg = _this.buffer.shift();
|
|
@@ -142,9 +133,9 @@ var ElmComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
142
133
|
_this.reentered = false;
|
|
143
134
|
|
|
144
135
|
if (_this.mounted && modified) {
|
|
145
|
-
var _Services$
|
|
136
|
+
var _Services$logger2;
|
|
146
137
|
|
|
147
|
-
(_Services$
|
|
138
|
+
(_Services$logger2 = _Init.Services.logger) === null || _Services$logger2 === void 0 ? void 0 : _Services$logger2.debug("Elm", "update model for", _this.componentName, _this.currentModel);
|
|
148
139
|
|
|
149
140
|
_this.forceUpdate();
|
|
150
141
|
}
|
|
@@ -182,7 +173,7 @@ var ElmComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
182
173
|
this.mounted = true;
|
|
183
174
|
|
|
184
175
|
if (this.initCmd) {
|
|
185
|
-
|
|
176
|
+
(0, _Common.execCmd)(this.initCmd, this.dispatch);
|
|
186
177
|
this.initCmd = null;
|
|
187
178
|
}
|
|
188
179
|
}
|
|
@@ -197,21 +188,6 @@ var ElmComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
197
188
|
value: function componentWillUnmount() {
|
|
198
189
|
this.mounted = false;
|
|
199
190
|
}
|
|
200
|
-
}, {
|
|
201
|
-
key: "execCmd",
|
|
202
|
-
value: function execCmd(cmd) {
|
|
203
|
-
var _this2 = this;
|
|
204
|
-
|
|
205
|
-
cmd.forEach(function (call) {
|
|
206
|
-
try {
|
|
207
|
-
call(_this2.dispatch);
|
|
208
|
-
} catch (ex) {
|
|
209
|
-
var _Services$logger5;
|
|
210
|
-
|
|
211
|
-
(_Services$logger5 = _Init.Services.logger) === null || _Services$logger5 === void 0 ? void 0 : _Services$logger5.error(ex);
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
191
|
/**
|
|
216
192
|
* Returns the current model.
|
|
217
193
|
* @readonly
|
|
@@ -226,7 +202,7 @@ var ElmComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
226
202
|
}
|
|
227
203
|
/**
|
|
228
204
|
* Dispatches a message.
|
|
229
|
-
* @param {
|
|
205
|
+
* @param {TMessage} msg The message to dispatch.
|
|
230
206
|
* @memberof ElmComponent
|
|
231
207
|
*/
|
|
232
208
|
|
|
@@ -236,4 +212,4 @@ var ElmComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
236
212
|
}(_react["default"].Component);
|
|
237
213
|
|
|
238
214
|
exports.ElmComponent = ElmComponent;
|
|
239
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFbG1Db21wb25lbnQiLCJwcm9wcyIsImluaXQiLCJuYW1lIiwibXNnIiwibW9kZWxIYXNDaGFuZ2VkIiwibW9kZWwiLCJjdXJyZW50TW9kZWwiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibGVuZ3RoIiwicmVlbnRlcmVkIiwiYnVmZmVyIiwicHVzaCIsIm5leHRNc2ciLCJtb2RpZmllZCIsIlNlcnZpY2VzIiwibG9nZ2VyIiwiaW5mbyIsImNvbXBvbmVudE5hbWUiLCJkZWJ1ZyIsImRpc3BhdGNoTWlkZGxld2FyZSIsInVwZGF0ZSIsImNtZCIsImV4ZWNDbWQiLCJleCIsImVycm9yIiwic2hpZnQiLCJtb3VudGVkIiwiZm9yY2VVcGRhdGUiLCJmYWtlT3B0aW9ucyIsImdldEZha2VPcHRpb25zT25jZSIsImRpc3BhdGNoIiwiaW5pdENtZCIsImZvckVhY2giLCJjYWxsIiwiUmVhY3QiLCJDb21wb25lbnQiXSwic291cmNlcyI6WyIuLi9zcmMvRWxtQ29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluaXRGdW5jdGlvbiwgTnVsbGFibGUsIFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSBcIi4vVHlwZXNcIjtcbmltcG9ydCB7IE1lc3NhZ2UsIFNlcnZpY2VzIH0gZnJvbSBcIi4vSW5pdFwiO1xuaW1wb3J0IHsgQ21kIH0gZnJvbSBcIi4vQ21kXCI7XG5pbXBvcnQgeyBnZXRGYWtlT3B0aW9uc09uY2UgfSBmcm9tIFwiLi9UZXN0aW5nL2Zha2VPcHRpb25zXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgZm9yIGEgcmVhY3QgY2xhc3MgY29tcG9uZW50IHVzaW5nIHRoZSBlbG1pc2ggcGF0dGVybi5cbiAqIEBleHBvcnRcbiAqIEBhYnN0cmFjdFxuICogQGNsYXNzIEVsbUNvbXBvbmVudFxuICogQGV4dGVuZHMge0NvbXBvbmVudDxUUHJvcHMsIFRNb2RlbD59XG4gKiBAdGVtcGxhdGUgVE1vZGVsIFRoZSB0eXBlIG9mIHRoZSBtb2RlbC5cbiAqIEB0ZW1wbGF0ZSBUTXNnIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlcy5cbiAqIEB0ZW1wbGF0ZSBUUHJvcHMgVGhlIHR5cGUgb2YgdGhlIHByb3BzLlxuICovXG5hYnN0cmFjdCBjbGFzcyBFbG1Db21wb25lbnQ8VE1vZGVsLCBUTXNnIGV4dGVuZHMgTWVzc2FnZSwgVFByb3BzPiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxUUHJvcHM+IHtcbiAgICBwcml2YXRlIGluaXRDbWQ6IE51bGxhYmxlPENtZDxUTXNnPj4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnROYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBidWZmZXI6IFRNc2cgW10gPSBbXTtcbiAgICBwcml2YXRlIHJlZW50ZXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgbW91bnRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgY3VycmVudE1vZGVsOiBUTW9kZWw7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEVsbUNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0ge1RQcm9wc30gcHJvcHMgVGhlIHByb3BzIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSB7KCkgPT4gVE1vZGVsfSBpbml0IFRoZSBpbml0aWFsaXplciBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBtZW1iZXJvZiBFbG1Db21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHByb3BzOiBUUHJvcHMsIGluaXQ6IEluaXRGdW5jdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1zZz4sIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgY29uc3QgZmFrZU9wdGlvbnMgPSBnZXRGYWtlT3B0aW9uc09uY2UoKTtcblxuICAgICAgICBpZiAoZmFrZU9wdGlvbnM/LmRpc3BhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoID0gZmFrZU9wdGlvbnMuZGlzcGF0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbbW9kZWwsIGNtZF0gPSBmYWtlT3B0aW9ucz8ubW9kZWwgPyBbZmFrZU9wdGlvbnMubW9kZWwgYXMgVE1vZGVsXSA6IGluaXQodGhpcy5wcm9wcyk7XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnROYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5pbml0Q21kID0gY21kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgICAqIFdoZW4gaW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kLCB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBoYXMgdG8gYmUgY2FsbGVkLlxuICAgICAqIEBtZW1iZXJvZiBFbG1Db21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmluaXRDbWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY0NtZCh0aGlzLmluaXRDbWQpO1xuICAgICAgICAgICAgdGhpcy5pbml0Q21kID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCBiZWZvcmUgdW5sb2FkaW5nIHRoZSBjb21wb25lbnQuXG4gICAgICogV2hlbiBpbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QsIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uIGhhcyB0byBiZSBjYWxsZWQuXG4gICAgICogQG1lbWJlcm9mIEVsbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhlY0NtZCAoY21kOiBDbWQ8VE1zZz4pOiB2b2lkIHtcbiAgICAgICAgY21kLmZvckVhY2goY2FsbCA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNhbGwodGhpcy5kaXNwYXRjaCk7XG4gICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgIFNlcnZpY2VzLmxvZ2dlcj8uZXJyb3IoZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG1vZGVsLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtSZWFkb25seTxUTW9kZWw+fVxuICAgICAqIEBtZW1iZXJvZiBFbG1Db21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1vZGVsICgpOiBSZWFkb25seTxUTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BhdGNoZXMgYSBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSB7VE1zZ30gbXNnIFRoZSBtZXNzYWdlIHRvIGRpc3BhdGNoLlxuICAgICAqIEBtZW1iZXJvZiBFbG1Db21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlzcGF0Y2ggPSAobXNnOiBUTXNnKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGVsSGFzQ2hhbmdlZCA9IChtb2RlbDogUGFydGlhbDxUTW9kZWw+KTogYm9vbGVhbiA9PiBtb2RlbCAhPT0gdGhpcy5jdXJyZW50TW9kZWwgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobW9kZWwpLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgaWYgKHRoaXMucmVlbnRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKG1zZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlZW50ZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGxldCBuZXh0TXNnOiBUTXNnIHwgdW5kZWZpbmVkID0gbXNnO1xuICAgICAgICAgICAgbGV0IG1vZGlmaWVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHdoaWxlIChuZXh0TXNnKSB7XG4gICAgICAgICAgICAgICAgU2VydmljZXMubG9nZ2VyPy5pbmZvKFwiRWxtXCIsIFwibWVzc2FnZSBmcm9tXCIsIHRoaXMuY29tcG9uZW50TmFtZSwgbmV4dE1zZy5uYW1lKTtcbiAgICAgICAgICAgICAgICBTZXJ2aWNlcy5sb2dnZXI/LmRlYnVnKFwiRWxtXCIsIFwibWVzc2FnZSBmcm9tXCIsIHRoaXMuY29tcG9uZW50TmFtZSwgbmV4dE1zZyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoU2VydmljZXMuZGlzcGF0Y2hNaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VzLmRpc3BhdGNoTWlkZGxld2FyZShuZXh0TXNnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbW9kZWwsIGNtZF0gPSB0aGlzLnVwZGF0ZSh0aGlzLmN1cnJlbnRNb2RlbCwgbmV4dE1zZywgdGhpcy5wcm9wcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsSGFzQ2hhbmdlZChtb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1vZGVsID0geyAuLi50aGlzLmN1cnJlbnRNb2RlbCwgLi4ubW9kZWwgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY0NtZChjbWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICAgICAgU2VydmljZXMubG9nZ2VyPy5lcnJvcihleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV4dE1zZyA9IHRoaXMuYnVmZmVyLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlZW50ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5tb3VudGVkICYmIG1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgU2VydmljZXMubG9nZ2VyPy5kZWJ1ZyhcIkVsbVwiLCBcInVwZGF0ZSBtb2RlbCBmb3JcIiwgdGhpcy5jb21wb25lbnROYW1lLCB0aGlzLmN1cnJlbnRNb2RlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgbW9kZWwgYmFzZWQgb24gYSBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSB7VE1vZGVsfSBtb2RlbCBUaGUgY3VycmVudCBtb2RlbC5cbiAgICAgKiBAcGFyYW0ge1RNc2d9IG1zZyBUaGUgbWVzc2FnZSB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7VFByb3BzfSBwcm9wcyBUaGUgcHJvcHMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IG1vZGVsIChjYW4gYWxzbyBiZSBhbiBlbXB0eSBvYmplY3Qge30pIGFuZCBhbiBvcHRpb25hbCBuZXcgbWVzc2FnZSB0byBkaXNwYXRjaC5cbiAgICAgKiBAYWJzdHJhY3RcbiAgICAgKiBAbWVtYmVyb2YgRWxtQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHVwZGF0ZTogVXBkYXRlRnVuY3Rpb248VFByb3BzLCBUTW9kZWwsIFRNc2c+O1xufVxuXG5leHBvcnQge1xuICAgIEVsbUNvbXBvbmVudCxcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFFQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDZUEsWTs7Ozs7RUFRWDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJLHNCQUFvQkMsS0FBcEIsRUFBbUNDLElBQW5DLEVBQTZFQyxJQUE3RSxFQUEyRjtJQUFBOztJQUFBOztJQUN2RiwwQkFBTUYsS0FBTjs7SUFEdUY7O0lBQUE7O0lBQUEseURBWnhELEVBWXdEOztJQUFBLDREQVh2RSxLQVd1RTs7SUFBQSwwREFWekUsS0FVeUU7O0lBQUE7O0lBQUEsMkRBZ0VoRSxVQUFDRyxHQUFELEVBQXFCO01BQzVDLElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBa0IsQ0FBQ0MsS0FBRDtRQUFBLE9BQXFDQSxLQUFLLEtBQUssTUFBS0MsWUFBZixJQUErQkMsTUFBTSxDQUFDQyxtQkFBUCxDQUEyQkgsS0FBM0IsRUFBa0NJLE1BQWxDLEdBQTJDLENBQS9HO01BQUEsQ0FBeEI7O01BRUEsSUFBSSxNQUFLQyxTQUFULEVBQW9CO1FBQ2hCLE1BQUtDLE1BQUwsQ0FBWUMsSUFBWixDQUFpQlQsR0FBakI7TUFDSCxDQUZELE1BRU87UUFDSCxNQUFLTyxTQUFMLEdBQWlCLElBQWpCO1FBRUEsSUFBSUcsT0FBeUIsR0FBR1YsR0FBaEM7UUFDQSxJQUFJVyxRQUFRLEdBQUcsS0FBZjs7UUFFQSxPQUFPRCxPQUFQLEVBQWdCO1VBQUE7O1VBQ1osb0JBQUFFLGNBQUEsQ0FBU0MsTUFBVCxzRUFBaUJDLElBQWpCLENBQXNCLEtBQXRCLEVBQTZCLGNBQTdCLEVBQTZDLE1BQUtDLGFB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
|
|
215
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFbG1Db21wb25lbnQiLCJwcm9wcyIsImluaXQiLCJuYW1lIiwibXNnIiwicmVlbnRlcmVkIiwiYnVmZmVyIiwicHVzaCIsIm5leHRNc2ciLCJtb2RpZmllZCIsImxvZ01lc3NhZ2UiLCJjb21wb25lbnROYW1lIiwidXBkYXRlIiwiY3VycmVudE1vZGVsIiwibW9kZWwiLCJjbWQiLCJtb2RlbEhhc0NoYW5nZWQiLCJleGVjQ21kIiwiZGlzcGF0Y2giLCJleCIsIlNlcnZpY2VzIiwibG9nZ2VyIiwiZXJyb3IiLCJzaGlmdCIsIm1vdW50ZWQiLCJkZWJ1ZyIsImZvcmNlVXBkYXRlIiwiZmFrZU9wdGlvbnMiLCJnZXRGYWtlT3B0aW9uc09uY2UiLCJpbml0Q21kIiwiUmVhY3QiLCJDb21wb25lbnQiXSwic291cmNlcyI6WyIuLi9zcmMvRWxtQ29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENtZCB9IGZyb20gXCIuL0NtZFwiO1xuaW1wb3J0IHsgZXhlY0NtZCwgbG9nTWVzc2FnZSwgbW9kZWxIYXNDaGFuZ2VkIH0gZnJvbSBcIi4vQ29tbW9uXCI7XG5pbXBvcnQgeyBNZXNzYWdlLCBTZXJ2aWNlcyB9IGZyb20gXCIuL0luaXRcIjtcbmltcG9ydCB7IGdldEZha2VPcHRpb25zT25jZSB9IGZyb20gXCIuL1Rlc3RpbmcvZmFrZU9wdGlvbnNcIjtcbmltcG9ydCB7IEluaXRGdW5jdGlvbiwgTnVsbGFibGUsIFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSBcIi4vVHlwZXNcIjtcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBmb3IgYSByZWFjdCBjbGFzcyBjb21wb25lbnQgdXNpbmcgdGhlIEVsbWlzaCBwYXR0ZXJuLlxuICogQGV4cG9ydFxuICogQGFic3RyYWN0XG4gKiBAY2xhc3MgRWxtQ29tcG9uZW50XG4gKiBAZXh0ZW5kcyB7Q29tcG9uZW50PFRQcm9wcywgVE1vZGVsPn1cbiAqIEB0ZW1wbGF0ZSBUTW9kZWwgVGhlIHR5cGUgb2YgdGhlIG1vZGVsLlxuICogQHRlbXBsYXRlIFRNZXNzYWdlIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlcy5cbiAqIEB0ZW1wbGF0ZSBUUHJvcHMgVGhlIHR5cGUgb2YgdGhlIHByb3BzLlxuICovXG5hYnN0cmFjdCBjbGFzcyBFbG1Db21wb25lbnQ8VE1vZGVsLCBUTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2UsIFRQcm9wcz4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8VFByb3BzPiB7XG4gICAgcHJpdmF0ZSBpbml0Q21kOiBOdWxsYWJsZTxDbWQ8VE1lc3NhZ2U+PiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1ZmZlcjogVE1lc3NhZ2UgW10gPSBbXTtcbiAgICBwcml2YXRlIHJlZW50ZXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgbW91bnRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgY3VycmVudE1vZGVsOiBUTW9kZWw7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEVsbUNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0ge1RQcm9wc30gcHJvcHMgVGhlIHByb3BzIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSB7KCkgPT4gVE1vZGVsfSBpbml0IFRoZSBpbml0aWFsaXplciBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBtZW1iZXJvZiBFbG1Db21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHByb3BzOiBUUHJvcHMsIGluaXQ6IEluaXRGdW5jdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIGNvbnN0IGZha2VPcHRpb25zID0gZ2V0RmFrZU9wdGlvbnNPbmNlKCk7XG5cbiAgICAgICAgaWYgKGZha2VPcHRpb25zPy5kaXNwYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaCA9IGZha2VPcHRpb25zLmRpc3BhdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW21vZGVsLCBjbWRdID0gZmFrZU9wdGlvbnM/Lm1vZGVsID8gW2Zha2VPcHRpb25zLm1vZGVsIGFzIFRNb2RlbF0gOiBpbml0KHRoaXMucHJvcHMpO1xuXG4gICAgICAgIHRoaXMuY29tcG9uZW50TmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuY3VycmVudE1vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuaW5pdENtZCA9IGNtZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZC5cbiAgICAgKiBXaGVuIGltcGxlbWVudGluZyB0aGlzIG1ldGhvZCwgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gaGFzIHRvIGJlIGNhbGxlZC5cbiAgICAgKiBAbWVtYmVyb2YgRWxtQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGNvbXBvbmVudERpZE1vdW50ICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5pbml0Q21kKSB7XG4gICAgICAgICAgICBleGVjQ21kKHRoaXMuaW5pdENtZCwgdGhpcy5kaXNwYXRjaCk7XG4gICAgICAgICAgICB0aGlzLmluaXRDbWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXMgY2FsbGVkIGJlZm9yZSB1bmxvYWRpbmcgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBXaGVuIGltcGxlbWVudGluZyB0aGlzIG1ldGhvZCwgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gaGFzIHRvIGJlIGNhbGxlZC5cbiAgICAgKiBAbWVtYmVyb2YgRWxtQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBtb2RlbC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7UmVhZG9ubHk8VE1vZGVsPn1cbiAgICAgKiBAbWVtYmVyb2YgRWxtQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBtb2RlbCAoKTogUmVhZG9ubHk8VE1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwYXRjaGVzIGEgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ge1RNZXNzYWdlfSBtc2cgVGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2guXG4gICAgICogQG1lbWJlcm9mIEVsbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkaXNwYXRjaCA9IChtc2c6IFRNZXNzYWdlKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJlZW50ZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIucHVzaChtc2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWVudGVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBsZXQgbmV4dE1zZzogVE1lc3NhZ2UgfCB1bmRlZmluZWQgPSBtc2c7XG4gICAgICAgICAgICBsZXQgbW9kaWZpZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgd2hpbGUgKG5leHRNc2cpIHtcbiAgICAgICAgICAgICAgICBsb2dNZXNzYWdlKHRoaXMuY29tcG9uZW50TmFtZSwgbmV4dE1zZyk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbW9kZWwsIGNtZF0gPSB0aGlzLnVwZGF0ZSh0aGlzLmN1cnJlbnRNb2RlbCwgbmV4dE1zZywgdGhpcy5wcm9wcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsSGFzQ2hhbmdlZCh0aGlzLmN1cnJlbnRNb2RlbCwgbW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRNb2RlbCA9IHsgLi4udGhpcy5jdXJyZW50TW9kZWwsIC4uLm1vZGVsIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjQ21kKGNtZCwgdGhpcy5kaXNwYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcy5sb2dnZXI/LmVycm9yKGV4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXh0TXNnID0gdGhpcy5idWZmZXIuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVlbnRlcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1vdW50ZWQgJiYgbW9kaWZpZWQpIHtcbiAgICAgICAgICAgICAgICBTZXJ2aWNlcy5sb2dnZXI/LmRlYnVnKFwiRWxtXCIsIFwidXBkYXRlIG1vZGVsIGZvclwiLCB0aGlzLmNvbXBvbmVudE5hbWUsIHRoaXMuY3VycmVudE1vZGVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBtb2RlbCBiYXNlZCBvbiBhIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIHtUTW9kZWx9IG1vZGVsIFRoZSBjdXJyZW50IG1vZGVsLlxuICAgICAqIEBwYXJhbSB7VE1lc3NhZ2V9IG1zZyBUaGUgbWVzc2FnZSB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7VFByb3BzfSBwcm9wcyBUaGUgcHJvcHMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IG1vZGVsIChjYW4gYWxzbyBiZSBhbiBlbXB0eSBvYmplY3Qge30pIGFuZCBhbiBvcHRpb25hbCBuZXcgbWVzc2FnZSB0byBkaXNwYXRjaC5cbiAgICAgKiBAYWJzdHJhY3RcbiAgICAgKiBAbWVtYmVyb2YgRWxtQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHVwZGF0ZTogVXBkYXRlRnVuY3Rpb248VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPjtcbn1cblxuZXhwb3J0IHtcbiAgICBFbG1Db21wb25lbnQsXG59OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ2VBLFk7Ozs7O0VBUVg7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSSxzQkFBb0JDLEtBQXBCLEVBQW1DQyxJQUFuQyxFQUFpRkMsSUFBakYsRUFBK0Y7SUFBQTs7SUFBQTs7SUFDM0YsMEJBQU1GLEtBQU47O0lBRDJGOztJQUFBOztJQUFBLHlEQVp4RCxFQVl3RDs7SUFBQSw0REFYM0UsS0FXMkU7O0lBQUEsMERBVjdFLEtBVTZFOztJQUFBOztJQUFBLDJEQXNEcEUsVUFBQ0csR0FBRCxFQUF5QjtNQUNoRCxJQUFJLE1BQUtDLFNBQVQsRUFBb0I7UUFDaEIsTUFBS0MsTUFBTCxDQUFZQyxJQUFaLENBQWlCSCxHQUFqQjtNQUNILENBRkQsTUFFTztRQUNILE1BQUtDLFNBQUwsR0FBaUIsSUFBakI7UUFFQSxJQUFJ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
|