react-elmish 6.6.3 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -7
- package/dist/Testing/getCreateUpdateArgs.d.ts +15 -0
- package/dist/Testing/getCreateUpdateArgs.js +39 -0
- package/dist/Testing/index.d.ts +2 -2
- package/dist/Testing/index.js +4 -4
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -8
- package/package.json +1 -1
- package/dist/Testing/getOfMsgParams.d.ts +0 -9
- package/dist/Testing/getOfMsgParams.js +0 -23
- package/dist/createCmd.d.ts +0 -88
- package/dist/createCmd.js +0 -78
package/README.md
CHANGED
|
@@ -33,6 +33,7 @@ This library brings the elmish pattern to react.
|
|
|
33
33
|
- [From v1.x to v2.x](#from-v1x-to-v2x)
|
|
34
34
|
- [From v2.x to v3.x](#from-v2x-to-v3x)
|
|
35
35
|
- [From v3.x to v4.x](#from-v3x-to-v4x)
|
|
36
|
+
- [From v6.x to v7.x](#from-v6x-to-v7x)
|
|
36
37
|
- [VS Code Snippets Extension](#vs-code-snippets-extension)
|
|
37
38
|
|
|
38
39
|
## Installation
|
|
@@ -851,17 +852,18 @@ To test your **update** handler you can use some helper functions in `react-elmi
|
|
|
851
852
|
|
|
852
853
|
| Function | Description |
|
|
853
854
|
| --- | --- |
|
|
854
|
-
| `execCmd` | Executes the provided command and returns an array of all messages. |
|
|
855
855
|
| `initAndExecCmd` | Calls the `init` function with the provided props and executes the returned commands. |
|
|
856
856
|
| `getUpdateFn` | Returns an `update` function for your update map object. |
|
|
857
857
|
| `getUpdateAndExecCmdFn` | Returns an `update` function for your update map object, which immediately executes the command. |
|
|
858
|
-
| `
|
|
859
|
-
| `
|
|
858
|
+
| `getCreateUpdateArgs` | Creates a factory function to create a message, a model, and props in a test. |
|
|
859
|
+
| `createUpdateArgsFactory` | This is an alternative for `getCreateUpdateArgs`. Creates a factory function to create a message, a model, and props in a test. |
|
|
860
|
+
| `execCmd` | Executes the provided command and returns an array of all messages. |
|
|
860
861
|
|
|
861
862
|
### Testing the init function
|
|
862
863
|
|
|
863
864
|
```ts
|
|
864
865
|
import { initAndExecCmd } from "react-elmish/dist/Testing";
|
|
866
|
+
import { init, Msg } from "./MyComponent";
|
|
865
867
|
|
|
866
868
|
it("initializes the model correctly", async () => {
|
|
867
869
|
// arrange
|
|
@@ -882,6 +884,7 @@ it("initializes the model correctly", async () => {
|
|
|
882
884
|
|
|
883
885
|
```ts
|
|
884
886
|
import { getUpdateFn } from "react-elmish/dist/Testing";
|
|
887
|
+
import { updateMap } from "./MyComponent";
|
|
885
888
|
|
|
886
889
|
const updateFn = getUpdateFn(updateMap);
|
|
887
890
|
|
|
@@ -892,11 +895,12 @@ const [model, cmd] = updateFn(msg, model, props);
|
|
|
892
895
|
A simple test:
|
|
893
896
|
|
|
894
897
|
```ts
|
|
895
|
-
import { createUpdateArgsFactory, execCmd } from "react-elmish/dist/Testing";
|
|
898
|
+
import { getCreateUpdateArgs, createUpdateArgsFactory, execCmd } from "react-elmish/dist/Testing";
|
|
899
|
+
import { init, Msg } from "./MyComponent";
|
|
896
900
|
|
|
897
|
-
const createUpdateArgs =
|
|
901
|
+
const createUpdateArgs = getCreateUpdateArgs(init, () => ({ /* initial props */ }));
|
|
902
|
+
// Or: const createUpdateArgs = createUpdateArgsFactory(() => ({ /* initial model */ }), () => ({ /* initial props */ }));
|
|
898
903
|
|
|
899
|
-
...
|
|
900
904
|
it("returns the correct model and cmd", async () => {
|
|
901
905
|
// arrange
|
|
902
906
|
const args = createUpdateArgs(Msg.test(), { /* optionally override model here */ }, { /* optionally override props here */ });
|
|
@@ -913,7 +917,6 @@ it("returns the correct model and cmd", async () => {
|
|
|
913
917
|
Msg.expectedMsg2(),
|
|
914
918
|
]);
|
|
915
919
|
});
|
|
916
|
-
...
|
|
917
920
|
```
|
|
918
921
|
|
|
919
922
|
With `execCmd` you can execute all commands in a test scenario. All functions are called and awaited. The function returns all new messages (success or error messages).
|
|
@@ -1013,6 +1016,12 @@ import { useElmishMap } from "react-elmish/dist/legacy/useElmishMap";
|
|
|
1013
1016
|
|
|
1014
1017
|
Because the legacy `useElmish` and `useElmishMap` have been removed, you have to convert all usages of `useElmish` to use the parameter object.
|
|
1015
1018
|
|
|
1019
|
+
### From v6.x to v7.x
|
|
1020
|
+
|
|
1021
|
+
The function `createCmd` has been removed. Instead, import the `cmd` object.
|
|
1022
|
+
|
|
1023
|
+
The test function `getOfMsgParams` has been removed. Use `execCmd` instead, or use the `getUpdateAndExecCmdFn` function and use the returned `update` function. To test the `init` function, use `initAndExecCmd`.
|
|
1024
|
+
|
|
1016
1025
|
## VS Code Snippets Extension
|
|
1017
1026
|
|
|
1018
1027
|
You can install a snippet extension to create common elmish boilerplate code:
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { InitFunction, Message } from "../Types";
|
|
2
|
+
import { UpdateArgsFactory } from "./createUpdateArgsFactory";
|
|
3
|
+
/**
|
|
4
|
+
* Creates a factory function to create a message, a model, and props which can be passed to an update function in tests.
|
|
5
|
+
* @param {InitFunction<TProps, TModel, TMessage>} init The init function which creates the model.
|
|
6
|
+
* @param {() => TProps} initProps A function to create initial props.
|
|
7
|
+
* @returns {UpdateArgsFactory<TProps, TModel, TMessage>} A function to create a message, a model, and props.
|
|
8
|
+
* @example
|
|
9
|
+
* // one time
|
|
10
|
+
* const createUpdateArgs = getCreateUpdateArgs(init, () => ({ ... }));
|
|
11
|
+
* // in tests
|
|
12
|
+
* const [msg, model, props] = createUpdateArgs(Msg.myMessage(), { ... }, , { ... });
|
|
13
|
+
*/
|
|
14
|
+
declare function getCreateUpdateArgs<TProps, TModel, TMessage extends Message>(init: InitFunction<TProps, TModel, TMessage>, initProps: () => TProps): UpdateArgsFactory<TProps, TModel, TMessage>;
|
|
15
|
+
export { getCreateUpdateArgs, };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getCreateUpdateArgs = getCreateUpdateArgs;
|
|
7
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
8
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
9
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
13
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
+
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; }
|
|
15
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
16
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
18
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
19
|
+
/**
|
|
20
|
+
* Creates a factory function to create a message, a model, and props which can be passed to an update function in tests.
|
|
21
|
+
* @param {InitFunction<TProps, TModel, TMessage>} init The init function which creates the model.
|
|
22
|
+
* @param {() => TProps} initProps A function to create initial props.
|
|
23
|
+
* @returns {UpdateArgsFactory<TProps, TModel, TMessage>} A function to create a message, a model, and props.
|
|
24
|
+
* @example
|
|
25
|
+
* // one time
|
|
26
|
+
* const createUpdateArgs = getCreateUpdateArgs(init, () => ({ ... }));
|
|
27
|
+
* // in tests
|
|
28
|
+
* const [msg, model, props] = createUpdateArgs(Msg.myMessage(), { ... }, , { ... });
|
|
29
|
+
*/
|
|
30
|
+
function getCreateUpdateArgs(init, initProps) {
|
|
31
|
+
return function (msg, modelTemplate, propsTemplate) {
|
|
32
|
+
var props = _objectSpread(_objectSpread({}, initProps()), propsTemplate);
|
|
33
|
+
var _init = init(props),
|
|
34
|
+
_init2 = _slicedToArray(_init, 1),
|
|
35
|
+
model = _init2[0];
|
|
36
|
+
return [msg, _objectSpread(_objectSpread({}, model), modelTemplate), props];
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDcmVhdGVVcGRhdGVBcmdzIiwiaW5pdCIsImluaXRQcm9wcyIsIm1zZyIsIm1vZGVsVGVtcGxhdGUiLCJwcm9wc1RlbXBsYXRlIiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwiX2luaXQiLCJfaW5pdDIiLCJfc2xpY2VkVG9BcnJheSIsIm1vZGVsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1Rlc3RpbmcvZ2V0Q3JlYXRlVXBkYXRlQXJncy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbml0RnVuY3Rpb24sIE1lc3NhZ2UgfSBmcm9tIFwiLi4vVHlwZXNcIjtcbmltcG9ydCB7IFVwZGF0ZUFyZ3NGYWN0b3J5IH0gZnJvbSBcIi4vY3JlYXRlVXBkYXRlQXJnc0ZhY3RvcnlcIjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBtZXNzYWdlLCBhIG1vZGVsLCBhbmQgcHJvcHMgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBhbiB1cGRhdGUgZnVuY3Rpb24gaW4gdGVzdHMuXG4gKiBAcGFyYW0ge0luaXRGdW5jdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+fSBpbml0IFRoZSBpbml0IGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgdGhlIG1vZGVsLlxuICogQHBhcmFtIHsoKSA9PiBUUHJvcHN9IGluaXRQcm9wcyBBIGZ1bmN0aW9uIHRvIGNyZWF0ZSBpbml0aWFsIHByb3BzLlxuICogQHJldHVybnMge1VwZGF0ZUFyZ3NGYWN0b3J5PFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT59IEEgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbWVzc2FnZSwgYSBtb2RlbCwgYW5kIHByb3BzLlxuICogQGV4YW1wbGVcbiAqIC8vIG9uZSB0aW1lXG4gKiBjb25zdCBjcmVhdGVVcGRhdGVBcmdzID0gZ2V0Q3JlYXRlVXBkYXRlQXJncyhpbml0LCAoKSA9PiAoeyAuLi4gfSkpO1xuICogLy8gaW4gdGVzdHNcbiAqIGNvbnN0IFttc2csIG1vZGVsLCBwcm9wc10gPSBjcmVhdGVVcGRhdGVBcmdzKE1zZy5teU1lc3NhZ2UoKSwgeyAuLi4gfSwgLCB7IC4uLiB9KTtcbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRlVXBkYXRlQXJnczxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlPiAoaW5pdDogSW5pdEZ1bmN0aW9uPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4sIGluaXRQcm9wczogKCkgPT4gVFByb3BzKTogVXBkYXRlQXJnc0ZhY3Rvcnk8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtc2c6IFRNZXNzYWdlLCBtb2RlbFRlbXBsYXRlPzogUGFydGlhbDxUTW9kZWw+LCBwcm9wc1RlbXBsYXRlPzogUGFydGlhbDxUUHJvcHM+KTogW1RNZXNzYWdlLCBUTW9kZWwsIFRQcm9wc10ge1xuICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLmluaXRQcm9wcygpLFxuICAgICAgICAgICAgLi4ucHJvcHNUZW1wbGF0ZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgW21vZGVsXSA9IGluaXQocHJvcHMpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtc2csXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgICAgICAgICAgLi4ubW9kZWxUZW1wbGF0ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgXTtcbiAgICB9O1xufVxuXG5leHBvcnQge1xuICAgIGdldENyZWF0ZVVwZGF0ZUFyZ3MsXG59OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLG1CQUFtQkEsQ0FBNENDLElBQTRDLEVBQUVDLFNBQXVCLEVBQStDO0VBQ3hMLE9BQU8sVUFBVUMsR0FBYSxFQUFFQyxhQUErQixFQUFFQyxhQUErQixFQUE4QjtJQUMxSCxJQUFNQyxLQUFLLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNKTCxTQUFTLEVBQUUsR0FDWEcsYUFBYSxDQUNuQjtJQUNELElBQUFHLEtBQUEsR0FBZ0JQLElBQUksQ0FBQ0ssS0FBSyxDQUFDO01BQUFHLE1BQUEsR0FBQUMsY0FBQSxDQUFBRixLQUFBO01BQXBCRyxLQUFLLEdBQUFGLE1BQUE7SUFFWixPQUFPLENBQ0hOLEdBQUcsRUFBQUksYUFBQSxDQUFBQSxhQUFBLEtBRUlJLEtBQUssR0FDTFAsYUFBYSxHQUVwQkUsS0FBSyxDQUNSO0VBQ0wsQ0FBQztBQUNMIn0=
|
package/dist/Testing/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createUpdateArgsFactory, UpdateArgsFactory } from "./createUpdateArgsFactory";
|
|
2
2
|
import { execCmd } from "./execCmd";
|
|
3
3
|
import { RenderWithModelOptions } from "./fakeOptions";
|
|
4
|
-
import {
|
|
4
|
+
import { getCreateUpdateArgs } from "./getCreateUpdateArgs";
|
|
5
5
|
import { getUpdateAndExecCmdFn, getUpdateFn } from "./getUpdateFn";
|
|
6
6
|
import { initAndExecCmd } from "./initAndExecCmd";
|
|
7
7
|
import { renderWithModel } from "./renderWithModel";
|
|
8
8
|
export type { UpdateArgsFactory, RenderWithModelOptions, };
|
|
9
|
-
export {
|
|
9
|
+
export { execCmd, initAndExecCmd, getUpdateFn, getUpdateAndExecCmdFn, createUpdateArgsFactory, getCreateUpdateArgs, renderWithModel, };
|
package/dist/Testing/index.js
CHANGED
|
@@ -15,10 +15,10 @@ Object.defineProperty(exports, "execCmd", {
|
|
|
15
15
|
return _execCmd.execCmd;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
|
-
Object.defineProperty(exports, "
|
|
18
|
+
Object.defineProperty(exports, "getCreateUpdateArgs", {
|
|
19
19
|
enumerable: true,
|
|
20
20
|
get: function get() {
|
|
21
|
-
return
|
|
21
|
+
return _getCreateUpdateArgs.getCreateUpdateArgs;
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "getUpdateAndExecCmdFn", {
|
|
@@ -47,8 +47,8 @@ Object.defineProperty(exports, "renderWithModel", {
|
|
|
47
47
|
});
|
|
48
48
|
var _createUpdateArgsFactory = require("./createUpdateArgsFactory");
|
|
49
49
|
var _execCmd = require("./execCmd");
|
|
50
|
-
var
|
|
50
|
+
var _getCreateUpdateArgs = require("./getCreateUpdateArgs");
|
|
51
51
|
var _getUpdateFn = require("./getUpdateFn");
|
|
52
52
|
var _initAndExecCmd = require("./initAndExecCmd");
|
|
53
53
|
var _renderWithModel = require("./renderWithModel");
|
|
54
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3JlYXRlVXBkYXRlQXJnc0ZhY3RvcnkiLCJyZXF1aXJlIiwiX2V4ZWNDbWQiLCJfZ2V0Q3JlYXRlVXBkYXRlQXJncyIsIl9nZXRVcGRhdGVGbiIsIl9pbml0QW5kRXhlY0NtZCIsIl9yZW5kZXJXaXRoTW9kZWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvVGVzdGluZy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVVcGRhdGVBcmdzRmFjdG9yeSwgVXBkYXRlQXJnc0ZhY3RvcnkgfSBmcm9tIFwiLi9jcmVhdGVVcGRhdGVBcmdzRmFjdG9yeVwiO1xuaW1wb3J0IHsgZXhlY0NtZCB9IGZyb20gXCIuL2V4ZWNDbWRcIjtcbmltcG9ydCB7IFJlbmRlcldpdGhNb2RlbE9wdGlvbnMgfSBmcm9tIFwiLi9mYWtlT3B0aW9uc1wiO1xuaW1wb3J0IHsgZ2V0Q3JlYXRlVXBkYXRlQXJncyB9IGZyb20gXCIuL2dldENyZWF0ZVVwZGF0ZUFyZ3NcIjtcbmltcG9ydCB7IGdldFVwZGF0ZUFuZEV4ZWNDbWRGbiwgZ2V0VXBkYXRlRm4gfSBmcm9tIFwiLi9nZXRVcGRhdGVGblwiO1xuaW1wb3J0IHsgaW5pdEFuZEV4ZWNDbWQgfSBmcm9tIFwiLi9pbml0QW5kRXhlY0NtZFwiO1xuaW1wb3J0IHsgcmVuZGVyV2l0aE1vZGVsIH0gZnJvbSBcIi4vcmVuZGVyV2l0aE1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIHtcbiAgICBVcGRhdGVBcmdzRmFjdG9yeSxcbiAgICBSZW5kZXJXaXRoTW9kZWxPcHRpb25zLFxufTtcblxuZXhwb3J0IHtcbiAgICBleGVjQ21kLFxuICAgIGluaXRBbmRFeGVjQ21kLFxuICAgIGdldFVwZGF0ZUZuLFxuICAgIGdldFVwZGF0ZUFuZEV4ZWNDbWRGbixcbiAgICBjcmVhdGVVcGRhdGVBcmdzRmFjdG9yeSxcbiAgICBnZXRDcmVhdGVVcGRhdGVBcmdzLFxuICAgIHJlbmRlcldpdGhNb2RlbCxcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLHdCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxvQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssZ0JBQUEsR0FBQUwsT0FBQSJ9
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { cmd } from "./cmd";
|
|
2
|
-
import { createCmd } from "./createCmd";
|
|
3
2
|
import { ElmComponent } from "./ElmComponent";
|
|
4
3
|
import { errorHandler, ErrorMessage, errorMsg, handleError } from "./ErrorHandling";
|
|
5
4
|
import { init, Logger } from "./Init";
|
|
6
5
|
import { Cmd, Dispatch, InitResult, Message, MsgSource, UpdateMap, UpdateReturnType } from "./Types";
|
|
7
6
|
import { SubscriptionResult, useElmish } from "./useElmish";
|
|
8
7
|
export type { Logger, Message, Cmd, Dispatch, InitResult, UpdateReturnType, SubscriptionResult, MsgSource, UpdateMap, ErrorMessage, };
|
|
9
|
-
export { init,
|
|
8
|
+
export { init, cmd, ElmComponent, errorMsg, errorHandler, handleError, useElmish, };
|
package/dist/index.js
CHANGED
|
@@ -15,12 +15,6 @@ Object.defineProperty(exports, "cmd", {
|
|
|
15
15
|
return _cmd.cmd;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
|
-
Object.defineProperty(exports, "createCmd", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function get() {
|
|
21
|
-
return _createCmd.createCmd;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
18
|
Object.defineProperty(exports, "errorHandler", {
|
|
25
19
|
enumerable: true,
|
|
26
20
|
get: function get() {
|
|
@@ -52,9 +46,8 @@ Object.defineProperty(exports, "useElmish", {
|
|
|
52
46
|
}
|
|
53
47
|
});
|
|
54
48
|
var _cmd = require("./cmd");
|
|
55
|
-
var _createCmd = require("./createCmd");
|
|
56
49
|
var _ElmComponent = require("./ElmComponent");
|
|
57
50
|
var _ErrorHandling = require("./ErrorHandling");
|
|
58
51
|
var _Init = require("./Init");
|
|
59
52
|
var _useElmish = require("./useElmish");
|
|
60
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY21kIiwicmVxdWlyZSIsIl9FbG1Db21wb25lbnQiLCJfRXJyb3JIYW5kbGluZyIsIl9Jbml0IiwiX3VzZUVsbWlzaCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbWQgfSBmcm9tIFwiLi9jbWRcIjtcbmltcG9ydCB7IEVsbUNvbXBvbmVudCB9IGZyb20gXCIuL0VsbUNvbXBvbmVudFwiO1xuaW1wb3J0IHsgZXJyb3JIYW5kbGVyLCBFcnJvck1lc3NhZ2UsIGVycm9yTXNnLCBoYW5kbGVFcnJvciB9IGZyb20gXCIuL0Vycm9ySGFuZGxpbmdcIjtcbmltcG9ydCB7IGluaXQsIExvZ2dlciB9IGZyb20gXCIuL0luaXRcIjtcbmltcG9ydCB7IENtZCwgRGlzcGF0Y2gsIEluaXRSZXN1bHQsIE1lc3NhZ2UsIE1zZ1NvdXJjZSwgVXBkYXRlTWFwLCBVcGRhdGVSZXR1cm5UeXBlIH0gZnJvbSBcIi4vVHlwZXNcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvblJlc3VsdCwgdXNlRWxtaXNoIH0gZnJvbSBcIi4vdXNlRWxtaXNoXCI7XG5cbmV4cG9ydCB0eXBlIHtcbiAgICBMb2dnZXIsXG4gICAgTWVzc2FnZSxcbiAgICBDbWQsXG4gICAgRGlzcGF0Y2gsXG4gICAgSW5pdFJlc3VsdCxcbiAgICBVcGRhdGVSZXR1cm5UeXBlLFxuICAgIFN1YnNjcmlwdGlvblJlc3VsdCxcbiAgICBNc2dTb3VyY2UsXG4gICAgVXBkYXRlTWFwLFxuICAgIEVycm9yTWVzc2FnZSxcbn07XG5cbmV4cG9ydCB7XG4gICAgaW5pdCxcbiAgICBjbWQsXG4gICAgRWxtQ29tcG9uZW50LFxuICAgIGVycm9yTXNnLFxuICAgIGVycm9ySGFuZGxlcixcbiAgICBoYW5kbGVFcnJvcixcbiAgICB1c2VFbG1pc2gsXG59OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxJQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxjQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUEifQ==
|
package/package.json
CHANGED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Cmd } from "../Types";
|
|
2
|
-
/**
|
|
3
|
-
* Extracts the messages out of a command.
|
|
4
|
-
* @param cmd The command to process.
|
|
5
|
-
* @returns The array of messages.
|
|
6
|
-
* @deprecated Use `execCmd` instead or create an update function by using `getUpdateAndExecCmdFn`.
|
|
7
|
-
*/
|
|
8
|
-
declare function getOfMsgParams<TMessage>(cmd?: Cmd<TMessage>): TMessage[];
|
|
9
|
-
export { getOfMsgParams, };
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getOfMsgParams = getOfMsgParams;
|
|
7
|
-
/**
|
|
8
|
-
* Extracts the messages out of a command.
|
|
9
|
-
* @param cmd The command to process.
|
|
10
|
-
* @returns The array of messages.
|
|
11
|
-
* @deprecated Use `execCmd` instead or create an update function by using `getUpdateAndExecCmdFn`.
|
|
12
|
-
*/
|
|
13
|
-
function getOfMsgParams(cmd) {
|
|
14
|
-
var msgNames = [];
|
|
15
|
-
var dispatch = function dispatch(msg) {
|
|
16
|
-
msgNames.push(msg);
|
|
17
|
-
};
|
|
18
|
-
cmd === null || cmd === void 0 ? void 0 : cmd.map(function (currentCmd) {
|
|
19
|
-
return currentCmd(dispatch);
|
|
20
|
-
});
|
|
21
|
-
return msgNames;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRPZk1zZ1BhcmFtcyIsImNtZCIsIm1zZ05hbWVzIiwiZGlzcGF0Y2giLCJtc2ciLCJwdXNoIiwibWFwIiwiY3VycmVudENtZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9UZXN0aW5nL2dldE9mTXNnUGFyYW1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENtZCB9IGZyb20gXCIuLi9UeXBlc1wiO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBtZXNzYWdlcyBvdXQgb2YgYSBjb21tYW5kLlxuICogQHBhcmFtIGNtZCBUaGUgY29tbWFuZCB0byBwcm9jZXNzLlxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIG1lc3NhZ2VzLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBleGVjQ21kYCBpbnN0ZWFkIG9yIGNyZWF0ZSBhbiB1cGRhdGUgZnVuY3Rpb24gYnkgdXNpbmcgYGdldFVwZGF0ZUFuZEV4ZWNDbWRGbmAuXG4gKi9cbmZ1bmN0aW9uIGdldE9mTXNnUGFyYW1zPFRNZXNzYWdlPiAoY21kPzogQ21kPFRNZXNzYWdlPik6IFRNZXNzYWdlIFtdIHtcbiAgICBjb25zdCBtc2dOYW1lczogVE1lc3NhZ2UgW10gPSBbXTtcblxuICAgIGNvbnN0IGRpc3BhdGNoID0gKG1zZzogVE1lc3NhZ2UpOiB2b2lkID0+IHtcbiAgICAgICAgbXNnTmFtZXMucHVzaChtc2cpO1xuICAgIH07XG5cbiAgICBjbWQ/Lm1hcChjdXJyZW50Q21kID0+IGN1cnJlbnRDbWQoZGlzcGF0Y2gpKTtcblxuICAgIHJldHVybiBtc2dOYW1lcztcbn1cblxuZXhwb3J0IHtcbiAgICBnZXRPZk1zZ1BhcmFtcyxcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxjQUFjQSxDQUFZQyxHQUFtQixFQUFlO0VBQ2pFLElBQU1DLFFBQXFCLEdBQUcsRUFBRTtFQUVoQyxJQUFNQyxRQUFRLEdBQUcsU0FBWEEsUUFBUUEsQ0FBSUMsR0FBYSxFQUFXO0lBQ3RDRixRQUFRLENBQUNHLElBQUksQ0FBQ0QsR0FBRyxDQUFDO0VBQ3RCLENBQUM7RUFFREgsR0FBRyxhQUFIQSxHQUFHLHVCQUFIQSxHQUFHLENBQUVLLEdBQUcsQ0FBQyxVQUFBQyxVQUFVO0lBQUEsT0FBSUEsVUFBVSxDQUFDSixRQUFRLENBQUM7RUFBQSxFQUFDO0VBRTVDLE9BQU9ELFFBQVE7QUFDbkIifQ==
|
package/dist/createCmd.d.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { Cmd, Message, Sub } from "./Types";
|
|
2
|
-
/**
|
|
3
|
-
* Contains functions to create commands.
|
|
4
|
-
* @template TMessage Type of the Message discriminated union.
|
|
5
|
-
*/
|
|
6
|
-
interface Command<TMessage> {
|
|
7
|
-
/**
|
|
8
|
-
* Represents an empty command.
|
|
9
|
-
* @deprecated Do return nothing (`undefined`) instead.
|
|
10
|
-
*/
|
|
11
|
-
none: [];
|
|
12
|
-
/**
|
|
13
|
-
* Creates a command out of a specific message.
|
|
14
|
-
* @param {TMessage} msg The specific message.
|
|
15
|
-
*/
|
|
16
|
-
ofMsg: (msg: TMessage) => Cmd<TMessage>;
|
|
17
|
-
/**
|
|
18
|
-
* Aggregates multiple commands.
|
|
19
|
-
* @param {Cmd<TMessage> []} commands Array of commands.
|
|
20
|
-
*/
|
|
21
|
-
batch: (...commands: (Cmd<TMessage> | undefined | null)[]) => Cmd<TMessage>;
|
|
22
|
-
/**
|
|
23
|
-
* Command to call the subscriber.
|
|
24
|
-
* @param {Sub<TMessage>} sub The subscriber function.
|
|
25
|
-
*/
|
|
26
|
-
ofSub: (sub: Sub<TMessage>) => Cmd<TMessage>;
|
|
27
|
-
/**
|
|
28
|
-
* Provides functionalities to create commands from simple functions.
|
|
29
|
-
*/
|
|
30
|
-
ofFunc: {
|
|
31
|
-
/**
|
|
32
|
-
* Creates a command out of a simple function and maps the result.
|
|
33
|
-
* @param task The function to call.
|
|
34
|
-
* @param ofSuccess Creates the message to dispatch after a successful call of the task.
|
|
35
|
-
* @param ofError Creates the message to dispatch when an error occurred.
|
|
36
|
-
* @param args The parameters of the task.
|
|
37
|
-
*/
|
|
38
|
-
either: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => TReturn, ofSuccess: (result: TReturn) => TMessage, ofError: (error: Error) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
39
|
-
/**
|
|
40
|
-
* Creates a command out of a simple function and ignores the error case.
|
|
41
|
-
* @param task The function to call.
|
|
42
|
-
* @param ofSuccess Creates the message to dispatch after a successful call of the task.
|
|
43
|
-
* @param args The parameters of the task.
|
|
44
|
-
*/
|
|
45
|
-
perform: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => TReturn, ofSuccess: (result: TReturn) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
46
|
-
/**
|
|
47
|
-
* Creates a command out of a simple function and ignores the success case.
|
|
48
|
-
* @param task The function to call.
|
|
49
|
-
* @param ofError Creates the message to dispatch when an error occurred.
|
|
50
|
-
* @param args The parameters of the task.
|
|
51
|
-
*/
|
|
52
|
-
attempt: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => TReturn, ofError: (error: Error) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Provides functionalities to create commands from async functions.
|
|
56
|
-
*/
|
|
57
|
-
ofPromise: {
|
|
58
|
-
/**
|
|
59
|
-
* Creates a command out of an async function and maps the result.
|
|
60
|
-
* @param task The async function to call.
|
|
61
|
-
* @param ofSuccess Creates the message to dispatch when the promise is resolved.
|
|
62
|
-
* @param ofError Creates the message to dispatch when the promise is rejected.
|
|
63
|
-
* @param args The parameters of the task.
|
|
64
|
-
*/
|
|
65
|
-
either: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => Promise<TReturn>, ofSuccess: (result: TReturn) => TMessage, ofError: (error: Error) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
66
|
-
/**
|
|
67
|
-
* Creates a command out of an async function and ignores the error case.
|
|
68
|
-
* @param task The async function to call.
|
|
69
|
-
* @param ofSuccess Creates the message to dispatch when the promise is resolved.
|
|
70
|
-
* @param args The parameters of the task.
|
|
71
|
-
*/
|
|
72
|
-
perform: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => Promise<TReturn>, ofSuccess: (result: TReturn) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
73
|
-
/**
|
|
74
|
-
* Creates a command out of an async function and ignores the success case.
|
|
75
|
-
* @param task The async function to call.
|
|
76
|
-
* @param ofError Creates the message to dispatch when the promise is rejected.
|
|
77
|
-
* @param args The parameters of the task.
|
|
78
|
-
*/
|
|
79
|
-
attempt: <TArgs extends unknown[], TReturn>(task: (...args: TArgs) => Promise<TReturn>, ofError: (error: Error) => TMessage, ...args: TArgs) => Cmd<TMessage>;
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Creates a typed instance of the Command class.
|
|
84
|
-
* @template TMessage The type of the Msg discriminated union.
|
|
85
|
-
* @deprecated Import the `cmd` object and use this instead.
|
|
86
|
-
*/
|
|
87
|
-
declare function createCmd<TMessage extends Message>(): Command<TMessage>;
|
|
88
|
-
export { createCmd, };
|
package/dist/createCmd.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createCmd = createCmd;
|
|
7
|
-
var _cmd = require("./cmd");
|
|
8
|
-
/**
|
|
9
|
-
* Contains functions to create commands.
|
|
10
|
-
* @template TMessage Type of the Message discriminated union.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Creates a typed instance of the Command class.
|
|
15
|
-
* @template TMessage The type of the Msg discriminated union.
|
|
16
|
-
* @deprecated Import the `cmd` object and use this instead.
|
|
17
|
-
*/
|
|
18
|
-
function createCmd() {
|
|
19
|
-
return {
|
|
20
|
-
none: [],
|
|
21
|
-
ofMsg: function ofMsg(msg) {
|
|
22
|
-
return _cmd.cmd.ofMsg(msg);
|
|
23
|
-
},
|
|
24
|
-
batch: function batch() {
|
|
25
|
-
return _cmd.cmd.batch.apply(_cmd.cmd, arguments);
|
|
26
|
-
},
|
|
27
|
-
ofSub: function ofSub(sub) {
|
|
28
|
-
return _cmd.cmd.ofSub(sub);
|
|
29
|
-
},
|
|
30
|
-
ofFunc: {
|
|
31
|
-
either: function either(task, ofSuccess, ofError) {
|
|
32
|
-
var _cmd$ofFunc;
|
|
33
|
-
for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
|
|
34
|
-
args[_key - 3] = arguments[_key];
|
|
35
|
-
}
|
|
36
|
-
return (_cmd$ofFunc = _cmd.cmd.ofFunc).either.apply(_cmd$ofFunc, [task, ofSuccess, ofError].concat(args));
|
|
37
|
-
},
|
|
38
|
-
perform: function perform(task, ofSuccess) {
|
|
39
|
-
var _cmd$ofFunc2;
|
|
40
|
-
for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
|
|
41
|
-
args[_key2 - 2] = arguments[_key2];
|
|
42
|
-
}
|
|
43
|
-
return (_cmd$ofFunc2 = _cmd.cmd.ofFunc).perform.apply(_cmd$ofFunc2, [task, ofSuccess].concat(args));
|
|
44
|
-
},
|
|
45
|
-
attempt: function attempt(task, ofError) {
|
|
46
|
-
var _cmd$ofFunc3;
|
|
47
|
-
for (var _len3 = arguments.length, args = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
|
|
48
|
-
args[_key3 - 2] = arguments[_key3];
|
|
49
|
-
}
|
|
50
|
-
return (_cmd$ofFunc3 = _cmd.cmd.ofFunc).attempt.apply(_cmd$ofFunc3, [task, ofError].concat(args));
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
ofPromise: {
|
|
54
|
-
either: function either(task, ofSuccess, ofError) {
|
|
55
|
-
var _cmd$ofPromise;
|
|
56
|
-
for (var _len4 = arguments.length, args = new Array(_len4 > 3 ? _len4 - 3 : 0), _key4 = 3; _key4 < _len4; _key4++) {
|
|
57
|
-
args[_key4 - 3] = arguments[_key4];
|
|
58
|
-
}
|
|
59
|
-
return (_cmd$ofPromise = _cmd.cmd.ofPromise).either.apply(_cmd$ofPromise, [task, ofSuccess, ofError].concat(args));
|
|
60
|
-
},
|
|
61
|
-
perform: function perform(task, ofSuccess) {
|
|
62
|
-
var _cmd$ofPromise2;
|
|
63
|
-
for (var _len5 = arguments.length, args = new Array(_len5 > 2 ? _len5 - 2 : 0), _key5 = 2; _key5 < _len5; _key5++) {
|
|
64
|
-
args[_key5 - 2] = arguments[_key5];
|
|
65
|
-
}
|
|
66
|
-
return (_cmd$ofPromise2 = _cmd.cmd.ofPromise).perform.apply(_cmd$ofPromise2, [task, ofSuccess].concat(args));
|
|
67
|
-
},
|
|
68
|
-
attempt: function attempt(task, ofError) {
|
|
69
|
-
var _cmd$ofPromise3;
|
|
70
|
-
for (var _len6 = arguments.length, args = new Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) {
|
|
71
|
-
args[_key6 - 2] = arguments[_key6];
|
|
72
|
-
}
|
|
73
|
-
return (_cmd$ofPromise3 = _cmd.cmd.ofPromise).attempt.apply(_cmd$ofPromise3, [task, ofError].concat(args));
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY21kIiwicmVxdWlyZSIsImNyZWF0ZUNtZCIsIm5vbmUiLCJvZk1zZyIsIm1zZyIsImNtZCIsImJhdGNoIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJvZlN1YiIsInN1YiIsIm9mRnVuYyIsImVpdGhlciIsInRhc2siLCJvZlN1Y2Nlc3MiLCJvZkVycm9yIiwiX2NtZCRvZkZ1bmMiLCJfbGVuIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsInBlcmZvcm0iLCJfY21kJG9mRnVuYzIiLCJfbGVuMiIsIl9rZXkyIiwiYXR0ZW1wdCIsIl9jbWQkb2ZGdW5jMyIsIl9sZW4zIiwiX2tleTMiLCJvZlByb21pc2UiLCJfY21kJG9mUHJvbWlzZSIsIl9sZW40IiwiX2tleTQiLCJfY21kJG9mUHJvbWlzZTIiLCJfbGVuNSIsIl9rZXk1IiwiX2NtZCRvZlByb21pc2UzIiwiX2xlbjYiLCJfa2V5NiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGVDbWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY21kIH0gZnJvbSBcIi4vY21kXCI7XG5pbXBvcnQgeyBDbWQsIE1lc3NhZ2UsIFN1YiB9IGZyb20gXCIuL1R5cGVzXCI7XG5cbi8qKlxuICogQ29udGFpbnMgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb21tYW5kcy5cbiAqIEB0ZW1wbGF0ZSBUTWVzc2FnZSBUeXBlIG9mIHRoZSBNZXNzYWdlIGRpc2NyaW1pbmF0ZWQgdW5pb24uXG4gKi9cbmludGVyZmFjZSBDb21tYW5kPFRNZXNzYWdlPiB7XG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBlbXB0eSBjb21tYW5kLlxuICAgICAqIEBkZXByZWNhdGVkIERvIHJldHVybiBub3RoaW5nIChgdW5kZWZpbmVkYCkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBub25lOiBbXSxcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYSBzcGVjaWZpYyBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSB7VE1lc3NhZ2V9IG1zZyBUaGUgc3BlY2lmaWMgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBvZk1zZzogKG1zZzogVE1lc3NhZ2UpID0+IENtZDxUTWVzc2FnZT4sXG4gICAgLyoqXG4gICAgICogQWdncmVnYXRlcyBtdWx0aXBsZSBjb21tYW5kcy5cbiAgICAgKiBAcGFyYW0ge0NtZDxUTWVzc2FnZT4gW119IGNvbW1hbmRzIEFycmF5IG9mIGNvbW1hbmRzLlxuICAgICAqL1xuICAgIGJhdGNoOiAoLi4uY29tbWFuZHM6IChDbWQ8VE1lc3NhZ2U+IHwgdW5kZWZpbmVkIHwgbnVsbCkgW10pID0+IENtZDxUTWVzc2FnZT4sXG4gICAgLyoqXG4gICAgICogQ29tbWFuZCB0byBjYWxsIHRoZSBzdWJzY3JpYmVyLlxuICAgICAqIEBwYXJhbSB7U3ViPFRNZXNzYWdlPn0gc3ViIFRoZSBzdWJzY3JpYmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIG9mU3ViOiAoc3ViOiBTdWI8VE1lc3NhZ2U+KSA9PiBDbWQ8VE1lc3NhZ2U+LFxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGZ1bmN0aW9uYWxpdGllcyB0byBjcmVhdGUgY29tbWFuZHMgZnJvbSBzaW1wbGUgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIG9mRnVuYzoge1xuICAgICAgICAvKipcbiAgICAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYSBzaW1wbGUgZnVuY3Rpb24gYW5kIG1hcHMgdGhlIHJlc3VsdC5cbiAgICAgICAgKiBAcGFyYW0gdGFzayBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgKiBAcGFyYW0gb2ZTdWNjZXNzIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgb2YgdGhlIHRhc2suXG4gICAgICAgICogQHBhcmFtIG9mRXJyb3IgQ3JlYXRlcyB0aGUgbWVzc2FnZSB0byBkaXNwYXRjaCB3aGVuIGFuIGVycm9yIG9jY3VycmVkLlxuICAgICAgICAqIEBwYXJhbSBhcmdzIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXNrLlxuICAgICAgICAqL1xuICAgICAgICBlaXRoZXI6IDxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybiwgb2ZTdWNjZXNzOiAocmVzdWx0OiBUUmV0dXJuKSA9PiBUTWVzc2FnZSwgb2ZFcnJvcjogKGVycm9yOiBFcnJvcikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKSA9PiBDbWQ8VE1lc3NhZ2U+LFxuICAgICAgICAvKipcbiAgICAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYSBzaW1wbGUgZnVuY3Rpb24gYW5kIGlnbm9yZXMgdGhlIGVycm9yIGNhc2UuXG4gICAgICAgICogQHBhcmFtIHRhc2sgVGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICAgICogQHBhcmFtIG9mU3VjY2VzcyBDcmVhdGVzIHRoZSBtZXNzYWdlIHRvIGRpc3BhdGNoIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIG9mIHRoZSB0YXNrLlxuICAgICAgICAqIEBwYXJhbSBhcmdzIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXNrLlxuICAgICAgICAqL1xuICAgICAgICBwZXJmb3JtOiA8VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm4sIG9mU3VjY2VzczogKHJlc3VsdDogVFJldHVybikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKSA9PiBDbWQ8VE1lc3NhZ2U+LFxuICAgICAgICAvKipcbiAgICAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYSBzaW1wbGUgZnVuY3Rpb24gYW5kIGlnbm9yZXMgdGhlIHN1Y2Nlc3MgY2FzZS5cbiAgICAgICAgKiBAcGFyYW0gdGFzayBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgICAgKiBAcGFyYW0gb2ZFcnJvciBDcmVhdGVzIHRoZSBtZXNzYWdlIHRvIGRpc3BhdGNoIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuXG4gICAgICAgICogQHBhcmFtIGFyZ3MgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHRhc2suXG4gICAgICAgICovXG4gICAgICAgIGF0dGVtcHQ6IDxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gVFJldHVybiwgb2ZFcnJvcjogKGVycm9yOiBFcnJvcikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKSA9PiBDbWQ8VE1lc3NhZ2U+LFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgZnVuY3Rpb25hbGl0aWVzIHRvIGNyZWF0ZSBjb21tYW5kcyBmcm9tIGFzeW5jIGZ1bmN0aW9ucy5cbiAgICAgKi9cbiAgICBvZlByb21pc2U6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICogQ3JlYXRlcyBhIGNvbW1hbmQgb3V0IG9mIGFuIGFzeW5jIGZ1bmN0aW9uIGFuZCBtYXBzIHRoZSByZXN1bHQuXG4gICAgICAgICogQHBhcmFtIHRhc2sgVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICAgICogQHBhcmFtIG9mU3VjY2VzcyBDcmVhdGVzIHRoZSBtZXNzYWdlIHRvIGRpc3BhdGNoIHdoZW4gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQuXG4gICAgICAgICogQHBhcmFtIG9mRXJyb3IgQ3JlYXRlcyB0aGUgbWVzc2FnZSB0byBkaXNwYXRjaCB3aGVuIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkLlxuICAgICAgICAqIEBwYXJhbSBhcmdzIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXNrLlxuICAgICAgICAqL1xuICAgICAgICBlaXRoZXI6IDxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gUHJvbWlzZTxUUmV0dXJuPiwgb2ZTdWNjZXNzOiAocmVzdWx0OiBUUmV0dXJuKSA9PiBUTWVzc2FnZSwgb2ZFcnJvcjogKGVycm9yOiBFcnJvcikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKSA9PiBDbWQ8VE1lc3NhZ2U+LFxuICAgICAgICAvKipcbiAgICAgICAgKiBDcmVhdGVzIGEgY29tbWFuZCBvdXQgb2YgYW4gYXN5bmMgZnVuY3Rpb24gYW5kIGlnbm9yZXMgdGhlIGVycm9yIGNhc2UuXG4gICAgICAgICogQHBhcmFtIHRhc2sgVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICAgICogQHBhcmFtIG9mU3VjY2VzcyBDcmVhdGVzIHRoZSBtZXNzYWdlIHRvIGRpc3BhdGNoIHdoZW4gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQuXG4gICAgICAgICogQHBhcmFtIGFyZ3MgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHRhc2suXG4gICAgICAgICovXG4gICAgICAgIHBlcmZvcm06IDxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gUHJvbWlzZTxUUmV0dXJuPiwgb2ZTdWNjZXNzOiAocmVzdWx0OiBUUmV0dXJuKSA9PiBUTWVzc2FnZSwgLi4uYXJnczogVEFyZ3MpID0+IENtZDxUTWVzc2FnZT4sXG4gICAgICAgIC8qKlxuICAgICAgICAqIENyZWF0ZXMgYSBjb21tYW5kIG91dCBvZiBhbiBhc3luYyBmdW5jdGlvbiBhbmQgaWdub3JlcyB0aGUgc3VjY2VzcyBjYXNlLlxuICAgICAgICAqIEBwYXJhbSB0YXNrIFRoZSBhc3luYyBmdW5jdGlvbiB0byBjYWxsLlxuICAgICAgICAqIEBwYXJhbSBvZkVycm9yIENyZWF0ZXMgdGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2ggd2hlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC5cbiAgICAgICAgKiBAcGFyYW0gYXJncyBUaGUgcGFyYW1ldGVycyBvZiB0aGUgdGFzay5cbiAgICAgICAgKi9cbiAgICAgICAgYXR0ZW1wdDogPFRBcmdzIGV4dGVuZHMgdW5rbm93biBbXSwgVFJldHVybj4odGFzazogKC4uLmFyZ3M6IFRBcmdzKSA9PiBQcm9taXNlPFRSZXR1cm4+LCBvZkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiBUTWVzc2FnZSwgLi4uYXJnczogVEFyZ3MpID0+IENtZDxUTWVzc2FnZT4sXG4gICAgfSxcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHlwZWQgaW5zdGFuY2Ugb2YgdGhlIENvbW1hbmQgY2xhc3MuXG4gKiBAdGVtcGxhdGUgVE1lc3NhZ2UgVGhlIHR5cGUgb2YgdGhlIE1zZyBkaXNjcmltaW5hdGVkIHVuaW9uLlxuICogQGRlcHJlY2F0ZWQgSW1wb3J0IHRoZSBgY21kYCBvYmplY3QgYW5kIHVzZSB0aGlzIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNtZDxUTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2U+ICgpOiBDb21tYW5kPFRNZXNzYWdlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbm9uZTogW10sXG4gICAgICAgIG9mTXNnIChtc2c6IFRNZXNzYWdlKTogQ21kPFRNZXNzYWdlPiB7XG4gICAgICAgICAgICByZXR1cm4gY21kLm9mTXNnKG1zZyk7XG4gICAgICAgIH0sXG4gICAgICAgIGJhdGNoICguLi5jb21tYW5kczogKENtZDxUTWVzc2FnZT4gfCB1bmRlZmluZWQgfCBudWxsKSBbXSk6IENtZDxUTWVzc2FnZT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNtZC5iYXRjaCguLi5jb21tYW5kcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9mU3ViIChzdWI6IFN1YjxUTWVzc2FnZT4pOiBDbWQ8VE1lc3NhZ2U+IHtcbiAgICAgICAgICAgIHJldHVybiBjbWQub2ZTdWIoc3ViKTtcbiAgICAgICAgfSxcbiAgICAgICAgb2ZGdW5jOiB7XG4gICAgICAgICAgICBlaXRoZXI8VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm4sIG9mU3VjY2VzczogKHJlc3VsdDogVFJldHVybikgPT4gVE1lc3NhZ2UsIG9mRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IFRNZXNzYWdlLCAuLi5hcmdzOiBUQXJncyk6IENtZDxUTWVzc2FnZT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbWQub2ZGdW5jLmVpdGhlcih0YXNrLCBvZlN1Y2Nlc3MsIG9mRXJyb3IsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBlcmZvcm08VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm4sIG9mU3VjY2VzczogKHJlc3VsdDogVFJldHVybikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNZXNzYWdlPiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNtZC5vZkZ1bmMucGVyZm9ybSh0YXNrLCBvZlN1Y2Nlc3MsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF0dGVtcHQ8VEFyZ3MgZXh0ZW5kcyB1bmtub3duIFtdLCBUUmV0dXJuPih0YXNrOiAoLi4uYXJnczogVEFyZ3MpID0+IFRSZXR1cm4sIG9mRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IFRNZXNzYWdlLCAuLi5hcmdzOiBUQXJncyk6IENtZDxUTWVzc2FnZT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbWQub2ZGdW5jLmF0dGVtcHQodGFzaywgb2ZFcnJvciwgLi4uYXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBvZlByb21pc2U6IHtcbiAgICAgICAgICAgIGVpdGhlcjxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gUHJvbWlzZTxUUmV0dXJuPiwgb2ZTdWNjZXNzOiAocmVzdWx0OiBUUmV0dXJuKSA9PiBUTWVzc2FnZSwgb2ZFcnJvcjogKGVycm9yOiBFcnJvcikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNZXNzYWdlPiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNtZC5vZlByb21pc2UuZWl0aGVyKHRhc2ssIG9mU3VjY2Vzcywgb2ZFcnJvciwgLi4uYXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGVyZm9ybTxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gUHJvbWlzZTxUUmV0dXJuPiwgb2ZTdWNjZXNzOiAocmVzdWx0OiBUUmV0dXJuKSA9PiBUTWVzc2FnZSwgLi4uYXJnczogVEFyZ3MpOiBDbWQ8VE1lc3NhZ2U+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY21kLm9mUHJvbWlzZS5wZXJmb3JtKHRhc2ssIG9mU3VjY2VzcywgLi4uYXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXR0ZW1wdDxUQXJncyBleHRlbmRzIHVua25vd24gW10sIFRSZXR1cm4+KHRhc2s6ICguLi5hcmdzOiBUQXJncykgPT4gUHJvbWlzZTxUUmV0dXJuPiwgb2ZFcnJvcjogKGVycm9yOiBFcnJvcikgPT4gVE1lc3NhZ2UsIC4uLmFyZ3M6IFRBcmdzKTogQ21kPFRNZXNzYWdlPiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNtZC5vZlByb21pc2UuYXR0ZW1wdCh0YXNrLCBvZkVycm9yLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IHtcbiAgICBjcmVhdGVDbWQsXG59OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsSUFBQSxHQUFBQyxPQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBOEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxTQUFTQSxDQUFBLEVBQWlEO0VBQy9ELE9BQU87SUFDSEMsSUFBSSxFQUFFLEVBQUU7SUFDUkMsS0FBSyxXQUFBQSxNQUFFQyxHQUFhLEVBQWlCO01BQ2pDLE9BQU9DLFFBQUcsQ0FB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
|