react-elmish 2.0.0 → 2.2.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.
@@ -1,42 +1,45 @@
1
- name: Publish
2
-
1
+ name: Release
3
2
  on:
4
3
  push:
5
- tags:
6
- - v*
4
+ branches:
5
+ - main
7
6
 
8
7
  jobs:
9
8
  test:
9
+ name: Test
10
10
  runs-on: ubuntu-latest
11
11
  steps:
12
12
  - name: Checkout
13
13
  uses: actions/checkout@v2
14
- - name: SetupNode
14
+ - name: Setup Node.js
15
15
  uses: actions/setup-node@v2
16
16
  with:
17
- node-version: 14
17
+ node-version: 'lts/*'
18
18
  - name: Test
19
19
  run: |
20
20
  npm install
21
+ npm run lint
21
22
  npm run test
22
23
 
23
- publish:
24
+ release:
25
+ name: Release
24
26
  needs: test
25
27
  runs-on: ubuntu-latest
26
28
  steps:
27
29
  - name: Checkout
28
30
  uses: actions/checkout@v2
29
- - name: SetupNode
31
+ with:
32
+ fetch-depth: 0
33
+ - name: Setup Node.js
30
34
  uses: actions/setup-node@v2
31
35
  with:
32
- node-version: 14
36
+ node-version: 'lts/*'
37
+ - name: Install dependencies
38
+ run: npm ci --ignore-scripts
33
39
  - name: Build
34
- run: |
35
- npm ci --ignore-scripts
36
- npm run build
37
- - name: Publish
38
- run: |
39
- npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}
40
- npm publish --ignore-scripts
40
+ run: npm run build
41
+ - name: Release
41
42
  env:
43
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
42
44
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
45
+ run: npx semantic-release
@@ -0,0 +1,3 @@
1
+ {
2
+ "branches": ["main"]
3
+ }
package/README.md CHANGED
@@ -164,6 +164,34 @@ You can use these components like any other React component.
164
164
  >
165
165
  > You can even split the contents of the **App.ts** into two files: **Types.ts** (`Message`, `Model`, and `Props`) and **State.ts** (`init` and `update`).
166
166
 
167
+ ## A new approach
168
+
169
+ Instead of `useElmish` you can use the `useElmishMap` hook. Then you have an `UpdateMap` instead of an `update` function:
170
+
171
+ ```ts
172
+ const updateMap: UpdateMap<Props, Model, Message> {
173
+ // Now the message is the first parameter, so it is easier to omit the model parameter.
174
+ Increment: (msg) => [{ value: model.value + 1 }],
175
+ Decrement: (msg) => [{ value: model.value - 1 }],
176
+ }
177
+ ```
178
+
179
+ Add your component looks like:
180
+
181
+ ```tsx
182
+ import { useElmishMap } from "react-elmish";
183
+
184
+ const App = (props: Shared.Props) => {
185
+ const [model, dispatch] = useElmishMap(props, init, updateMap, "App");
186
+
187
+ return (
188
+ <div>
189
+ ...
190
+ </div>
191
+ );
192
+ };
193
+ ```
194
+
167
195
  ## More on messages
168
196
 
169
197
  ### Message arguments
@@ -660,6 +688,19 @@ it("returns the correct cmd", () => {
660
688
  ...
661
689
  ```
662
690
 
691
+ ### Testing with an UpdateMap
692
+
693
+ To test your update map (when using `useElmishMap`), you can get your `update` function by calling `getUpdateFn`:
694
+
695
+ ```ts
696
+ import * as Testing from "react-elmish/dist/Testing";
697
+
698
+ const update = getUpdateFn(updateMap);
699
+
700
+ // in your test call update as usual
701
+ const [model, cmd] = update(msg, model, props);
702
+ ```
703
+
663
704
  ## Migration from v1.x to 2.x
664
705
 
665
706
  * Use `Logger` and `Message` instead of `ILogger` and `IMessage`.
@@ -61,8 +61,9 @@ export declare abstract class ElmComponent<TModel, TMsg extends Message, TProps>
61
61
  * @abstract
62
62
  * @memberof ElmComponent
63
63
  */
64
- abstract update: (model: TModel, msg: TMsg, props: TProps) => UpdateReturnType<TModel, TMsg>;
64
+ abstract update: UpdateFunction<TProps, TModel, TMsg>;
65
65
  }
66
+ export declare type UpdateFunction<TProps, TModel, TMsg> = (model: TModel, msg: TMsg, props: TProps) => UpdateReturnType<TModel, TMsg>;
66
67
  /**
67
68
  * Type for the return value of the update function.
68
69
  */
@@ -220,10 +220,6 @@ var ElmComponent = /*#__PURE__*/function (_React$Component) {
220
220
 
221
221
  return ElmComponent;
222
222
  }(_react["default"].Component);
223
- /**
224
- * Type for the return value of the update function.
225
- */
226
-
227
223
 
228
224
  exports.ElmComponent = ElmComponent;
229
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FbG1Db21wb25lbnQudHMiXSwibmFtZXMiOlsiRWxtQ29tcG9uZW50IiwicHJvcHMiLCJpbml0IiwibmFtZSIsIm1zZyIsIm1vZGVsSGFzQ2hhbmdlZCIsIm1vZGVsIiwiY3VycmVudE1vZGVsIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImxlbmd0aCIsImRpc3BhdGNoTWlkZGxld2FyZSIsInJlZW50ZXJlZCIsImJ1ZmZlciIsInB1c2giLCJuZXh0TXNnIiwibW9kaWZpZWQiLCJMb2dnZXJTZXJ2aWNlIiwiaW5mbyIsImNvbXBvbmVudE5hbWUiLCJkZWJ1ZyIsInVwZGF0ZSIsImNtZCIsImV4ZWNDbWQiLCJleCIsImVycm9yIiwic2hpZnQiLCJtb3VudGVkIiwiZm9yY2VVcGRhdGUiLCJpbml0Q21kIiwiZm9yRWFjaCIsImNhbGwiLCJkaXNwYXRjaCIsIlJlYWN0IiwiQ29tcG9uZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDc0JBLFk7Ozs7O0FBUWxCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0ksd0JBQW9CQyxLQUFwQixFQUFtQ0MsSUFBbkMsRUFBMkZDLElBQTNGLEVBQXlHO0FBQUE7O0FBQUE7O0FBQ3JHLDhCQUFNRixLQUFOOztBQURxRyw2REFadEUsRUFZc0U7O0FBQUEsZ0VBWHJGLEtBV3FGOztBQUFBLDhEQVZ2RixLQVV1Rjs7QUFBQSwrREEwRDlFLFVBQUNHLEdBQUQsRUFBcUI7QUFDNUMsVUFBTUMsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFDQyxLQUFEO0FBQUEsZUFBcUNBLEtBQUssS0FBSyxNQUFLQyxZQUFmLElBQStCQyxNQUFNLENBQUNDLG1CQUFQLENBQTJCSCxLQUEzQixFQUFrQ0ksTUFBbEMs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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztFQTlIaUYwQixrQkFBTUMsUztBQWtJdkY7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlzcGF0Y2hNaWRkbGV3YXJlLCBMb2dnZXJTZXJ2aWNlLCBNZXNzYWdlIH0gZnJvbSBcIi4vSW5pdFwiO1xuaW1wb3J0IHsgQ21kIH0gZnJvbSBcIi4vQ21kXCI7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gXCIuL0VsbVV0aWxpdGllc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIGZvciBhIHJlYWN0IGNsYXNzIGNvbXBvbmVudCB1c2luZyB0aGUgZWxtaXNoIHBhdHRlcm4uXG4gKiBAZXhwb3J0XG4gKiBAYWJzdHJhY3RcbiAqIEBjbGFzcyBFbG1Db21wb25lbnRcbiAqIEBleHRlbmRzIHtDb21wb25lbnQ8VFByb3BzLCBUTW9kZWw+fVxuICogQHRlbXBsYXRlIFRNb2RlbCBUaGUgdHlwZSBvZiB0aGUgbW9kZWwuXG4gKiBAdGVtcGxhdGUgVE1zZyBUaGUgdHlwZSBvZiB0aGUgbWVzc2FnZXMuXG4gKiBAdGVtcGxhdGUgVFByb3BzIFRoZSB0eXBlIG9mIHRoZSBwcm9wcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVsbUNvbXBvbmVudDxUTW9kZWwsIFRNc2cgZXh0ZW5kcyBNZXNzYWdlLCBUUHJvcHM+IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFRQcm9wcz4ge1xuICAgIHByaXZhdGUgaW5pdENtZDogTnVsbGFibGU8Q21kPFRNc2c+PiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1ZmZlcjogVE1zZyBbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVlbnRlcmVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBtb3VudGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjdXJyZW50TW9kZWw6IFRNb2RlbDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRWxtQ29tcG9uZW50LlxuICAgICAqIEBwYXJhbSB7VFByb3BzfSBwcm9wcyBUaGUgcHJvcHMgZm9yIHRoZSBjb21wb25lbnQuXG4gICAgICogQHBhcmFtIHsoKSA9PiBUTW9kZWx9IGluaXQgVGhlIGluaXRpYWxpemVyIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQG1lbWJlcm9mIEVsbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAocHJvcHM6IFRQcm9wcywgaW5pdDogKGFyZzogVFByb3BzKSA9PiBbVE1vZGVsLCBDbWQ8VE1zZz4gfCB1bmRlZmluZWRdLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIGNvbnN0IFttb2RlbCwgY21kXSA9IGluaXQodGhpcy5wcm9wcyk7XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnROYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5pbml0Q21kID0gY21kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgICAqIFdoZW4gaW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kLCB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBoYXMgdG8gYmUgY2FsbGVkLlxuICAgICAqIEBtZW1iZXJvZiBFbG1Db21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmluaXRDbWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY0NtZCh0aGlzLmluaXRDbWQpO1xuICAgICAgICAgICAgdGhpcy5pbml0Q21kID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCBiZWZvcmUgdW5sb2FkaW5nIHRoZSBjb21wb25lbnQuXG4gICAgICogV2hlbiBpbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QsIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uIGhhcyB0byBiZSBjYWxsZWQuXG4gICAgICogQG1lbWJlcm9mIEVsbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhlY0NtZCAoY21kOiBDbWQ8VE1zZz4pOiB2b2lkIHtcbiAgICAgICAgY21kLmZvckVhY2goY2FsbCA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNhbGwodGhpcy5kaXNwYXRjaCk7XG4gICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2U/LmVycm9yKGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBtb2RlbC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7UmVhZG9ubHk8VE1vZGVsPn1cbiAgICAgKiBAbWVtYmVyb2YgRWxtQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBtb2RlbCAoKTogUmVhZG9ubHk8VE1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwYXRjaGVzIGEgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ge1RNc2d9IG1zZyBUaGUgbWVzc2FnZSB0byBkaXNwYXRjaC5cbiAgICAgKiBAbWVtYmVyb2YgRWxtQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc3BhdGNoID0gKG1zZzogVE1zZyk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBtb2RlbEhhc0NoYW5nZWQgPSAobW9kZWw6IFBhcnRpYWw8VE1vZGVsPik6IGJvb2xlYW4gPT4gbW9kZWwgIT09IHRoaXMuY3VycmVudE1vZGVsICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1vZGVsKS5sZW5ndGggPiAwO1xuXG4gICAgICAgIGlmIChkaXNwYXRjaE1pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoTWlkZGxld2FyZShtc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVlbnRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKG1zZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlZW50ZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGxldCBuZXh0TXNnOiBUTXNnIHwgdW5kZWZpbmVkID0gbXNnO1xuICAgICAgICAgICAgbGV0IG1vZGlmaWVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHdoaWxlIChuZXh0TXNnKSB7XG4gICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uaW5mbyhcIkVsbVwiLCBcIm1lc3NhZ2UgZnJvbVwiLCB0aGlzLmNvbXBvbmVudE5hbWUsIG5leHRNc2cubmFtZSk7XG4gICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZGVidWcoXCJFbG1cIiwgXCJtZXNzYWdlIGZyb21cIiwgdGhpcy5jb21wb25lbnROYW1lLCBuZXh0TXNnKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFttb2RlbCwgY21kXSA9IHRoaXMudXBkYXRlKHRoaXMuY3VycmVudE1vZGVsLCBuZXh0TXNnLCB0aGlzLnByb3BzKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZWxIYXNDaGFuZ2VkKG1vZGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TW9kZWwgPSB7IC4uLnRoaXMuY3VycmVudE1vZGVsLCAuLi5tb2RlbCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjQ21kKGNtZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5lcnJvcihleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV4dE1zZyA9IHRoaXMuYnVmZmVyLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlZW50ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5tb3VudGVkICYmIG1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZGVidWcoXCJFbG1cIiwgXCJ1cGRhdGUgbW9kZWwgZm9yXCIsIHRoaXMuY29tcG9uZW50TmFtZSwgdGhpcy5jdXJyZW50TW9kZWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBtb2RpZnkgdGhlIG1vZGVsIGJhc2VkIG9uIGEgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ge1RNb2RlbH0gbW9kZWwgVGhlIGN1cnJlbnQgbW9kZWwuXG4gICAgICogQHBhcmFtIHtUTXNnfSBtc2cgVGhlIG1lc3NhZ2UgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge1RQcm9wc30gcHJvcHMgVGhlIHByb3BzIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBtb2RlbCAoY2FuIGFsc28gYmUgYW4gZW1wdHkgb2JqZWN0IHt9KSBhbmQgYW4gb3B0aW9uYWwgbmV3IG1lc3NhZ2UgdG8gZGlzcGF0Y2guXG4gICAgICogQGFic3RyYWN0XG4gICAgICogQG1lbWJlcm9mIEVsbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCB1cGRhdGU6IChtb2RlbDogVE1vZGVsLCBtc2c6IFRNc2csIHByb3BzOiBUUHJvcHMpID0+IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTXNnPjtcbn1cblxuLyoqXG4gKiBUeXBlIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB1cGRhdGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTXNnPiA9IFtQYXJ0aWFsPFRNb2RlbD4sIENtZDxUTXNnPj9dOyJdfQ==
225
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FbG1Db21wb25lbnQudHMiXSwibmFtZXMiOlsiRWxtQ29tcG9uZW50IiwicHJvcHMiLCJpbml0IiwibmFtZSIsIm1zZyIsIm1vZGVsSGFzQ2hhbmdlZCIsIm1vZGVsIiwiY3VycmVudE1vZGVsIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImxlbmd0aCIsImRpc3BhdGNoTWlkZGxld2FyZSIsInJlZW50ZXJlZCIsImJ1ZmZlciIsInB1c2giLCJuZXh0TXNnIiwibW9kaWZpZWQiLCJMb2dnZXJTZXJ2aWNlIiwiaW5mbyIsImNvbXBvbmVudE5hbWUiLCJkZWJ1ZyIsInVwZGF0ZSIsImNtZCIsImV4ZWNDbWQiLCJleCIsImVycm9yIiwic2hpZnQiLCJtb3VudGVkIiwiZm9yY2VVcGRhdGUiLCJpbml0Q21kIiwiZm9yRWFjaCIsImNhbGwiLCJkaXNwYXRjaCIsIlJlYWN0IiwiQ29tcG9uZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDc0JBLFk7Ozs7O0FBUWxCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0ksd0JBQW9CQyxLQUFwQixFQUFtQ0MsSUFBbkMsRUFBMkZDLElBQTNGLEVBQXlHO0FBQUE7O0FBQUE7O0FBQ3JHLDhCQUFNRixLQUFOOztBQURxRyw2REFadEUsRUFZc0U7O0FBQUEsZ0VBWHJGLEtBV3FGOztBQUFBLDhEQVZ2RixLQVV1Rjs7QUFBQSwrREEwRDlFLFVBQUNHLEdBQUQsRUFBcUI7QUFDNUMsVUFBTUMsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFDQyxLQUFEO0FBQUEsZUFBcUNBLEtBQUssS0FBSyxNQUFLQyxZQUFmLElBQStCQyxNQUFNLENBQUNDLG1CQUFQLENBQTJCSCxLQUEzQixFQUFrQ0ksTUFBbEMs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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztFQTlIaUYwQixrQkFBTUMsUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpc3BhdGNoTWlkZGxld2FyZSwgTG9nZ2VyU2VydmljZSwgTWVzc2FnZSB9IGZyb20gXCIuL0luaXRcIjtcbmltcG9ydCB7IENtZCB9IGZyb20gXCIuL0NtZFwiO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tIFwiLi9FbG1VdGlsaXRpZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBmb3IgYSByZWFjdCBjbGFzcyBjb21wb25lbnQgdXNpbmcgdGhlIGVsbWlzaCBwYXR0ZXJuLlxuICogQGV4cG9ydFxuICogQGFic3RyYWN0XG4gKiBAY2xhc3MgRWxtQ29tcG9uZW50XG4gKiBAZXh0ZW5kcyB7Q29tcG9uZW50PFRQcm9wcywgVE1vZGVsPn1cbiAqIEB0ZW1wbGF0ZSBUTW9kZWwgVGhlIHR5cGUgb2YgdGhlIG1vZGVsLlxuICogQHRlbXBsYXRlIFRNc2cgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2VzLlxuICogQHRlbXBsYXRlIFRQcm9wcyBUaGUgdHlwZSBvZiB0aGUgcHJvcHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbG1Db21wb25lbnQ8VE1vZGVsLCBUTXNnIGV4dGVuZHMgTWVzc2FnZSwgVFByb3BzPiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxUUHJvcHM+IHtcbiAgICBwcml2YXRlIGluaXRDbWQ6IE51bGxhYmxlPENtZDxUTXNnPj4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnROYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBidWZmZXI6IFRNc2cgW10gPSBbXTtcbiAgICBwcml2YXRlIHJlZW50ZXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgbW91bnRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgY3VycmVudE1vZGVsOiBUTW9kZWw7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEVsbUNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0ge1RQcm9wc30gcHJvcHMgVGhlIHByb3BzIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSB7KCkgPT4gVE1vZGVsfSBpbml0IFRoZSBpbml0aWFsaXplciBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBtZW1iZXJvZiBFbG1Db21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHByb3BzOiBUUHJvcHMsIGluaXQ6IChhcmc6IFRQcm9wcykgPT4gW1RNb2RlbCwgQ21kPFRNc2c+IHwgdW5kZWZpbmVkXSwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBjb25zdCBbbW9kZWwsIGNtZF0gPSBpbml0KHRoaXMucHJvcHMpO1xuXG4gICAgICAgIHRoaXMuY29tcG9uZW50TmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuY3VycmVudE1vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuaW5pdENtZCA9IGNtZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZC5cbiAgICAgKiBXaGVuIGltcGxlbWVudGluZyB0aGlzIG1ldGhvZCwgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gaGFzIHRvIGJlIGNhbGxlZC5cbiAgICAgKiBAbWVtYmVyb2YgRWxtQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGNvbXBvbmVudERpZE1vdW50ICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5pbml0Q21kKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWNDbWQodGhpcy5pbml0Q21kKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdENtZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgYmVmb3JlIHVubG9hZGluZyB0aGUgY29tcG9uZW50LlxuICAgICAqIFdoZW4gaW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kLCB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBoYXMgdG8gYmUgY2FsbGVkLlxuICAgICAqIEBtZW1iZXJvZiBFbG1Db21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgY29tcG9uZW50V2lsbFVubW91bnQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4ZWNDbWQgKGNtZDogQ21kPFRNc2c+KTogdm9pZCB7XG4gICAgICAgIGNtZC5mb3JFYWNoKGNhbGwgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjYWxsKHRoaXMuZGlzcGF0Y2gpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5lcnJvcihleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbW9kZWwuXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge1JlYWRvbmx5PFRNb2RlbD59XG4gICAgICogQG1lbWJlcm9mIEVsbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbW9kZWwgKCk6IFJlYWRvbmx5PFRNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGF0Y2hlcyBhIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIHtUTXNnfSBtc2cgVGhlIG1lc3NhZ2UgdG8gZGlzcGF0Y2guXG4gICAgICogQG1lbWJlcm9mIEVsbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkaXNwYXRjaCA9IChtc2c6IFRNc2cpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbW9kZWxIYXNDaGFuZ2VkID0gKG1vZGVsOiBQYXJ0aWFsPFRNb2RlbD4pOiBib29sZWFuID0+IG1vZGVsICE9PSB0aGlzLmN1cnJlbnRNb2RlbCAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtb2RlbCkubGVuZ3RoID4gMDtcblxuICAgICAgICBpZiAoZGlzcGF0Y2hNaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICBkaXNwYXRjaE1pZGRsZXdhcmUobXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlZW50ZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIucHVzaChtc2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWVudGVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBsZXQgbmV4dE1zZzogVE1zZyB8IHVuZGVmaW5lZCA9IG1zZztcbiAgICAgICAgICAgIGxldCBtb2RpZmllZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICB3aGlsZSAobmV4dE1zZykge1xuICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2U/LmluZm8oXCJFbG1cIiwgXCJtZXNzYWdlIGZyb21cIiwgdGhpcy5jb21wb25lbnROYW1lLCBuZXh0TXNnLm5hbWUpO1xuICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2U/LmRlYnVnKFwiRWxtXCIsIFwibWVzc2FnZSBmcm9tXCIsIHRoaXMuY29tcG9uZW50TmFtZSwgbmV4dE1zZyk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbW9kZWwsIGNtZF0gPSB0aGlzLnVwZGF0ZSh0aGlzLmN1cnJlbnRNb2RlbCwgbmV4dE1zZywgdGhpcy5wcm9wcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsSGFzQ2hhbmdlZChtb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1vZGVsID0geyAuLi50aGlzLmN1cnJlbnRNb2RlbCwgLi4ubW9kZWwgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY0NtZChjbWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZXJyb3IoZXgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5leHRNc2cgPSB0aGlzLmJ1ZmZlci5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWVudGVyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubW91bnRlZCAmJiBtb2RpZmllZCkge1xuICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2U/LmRlYnVnKFwiRWxtXCIsIFwidXBkYXRlIG1vZGVsIGZvclwiLCB0aGlzLmNvbXBvbmVudE5hbWUsIHRoaXMuY3VycmVudE1vZGVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBtb2RlbCBiYXNlZCBvbiBhIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIHtUTW9kZWx9IG1vZGVsIFRoZSBjdXJyZW50IG1vZGVsLlxuICAgICAqIEBwYXJhbSB7VE1zZ30gbXNnIFRoZSBtZXNzYWdlIHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtUUHJvcHN9IHByb3BzIFRoZSBwcm9wcyBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgbW9kZWwgKGNhbiBhbHNvIGJlIGFuIGVtcHR5IG9iamVjdCB7fSkgYW5kIGFuIG9wdGlvbmFsIG5ldyBtZXNzYWdlIHRvIGRpc3BhdGNoLlxuICAgICAqIEBhYnN0cmFjdFxuICAgICAqIEBtZW1iZXJvZiBFbG1Db21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgdXBkYXRlOiBVcGRhdGVGdW5jdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1zZz47XG59XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZUZ1bmN0aW9uPFRQcm9wcywgVE1vZGVsLCBUTXNnPiA9IChtb2RlbDogVE1vZGVsLCBtc2c6IFRNc2csIHByb3BzOiBUUHJvcHMpID0+IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTXNnPjtcblxuLyoqXG4gKiBUeXBlIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB1cGRhdGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTXNnPiA9IFtQYXJ0aWFsPFRNb2RlbD4sIENtZDxUTXNnPj9dOyJdfQ==
@@ -7,9 +7,23 @@ import { UpdateReturnType } from "./ElmComponent";
7
7
  */
8
8
  export declare const handleError: <TModel, TMsg>(error: Error) => UpdateReturnType<TModel, TMsg>;
9
9
  export declare type Nullable<T> = T | null;
10
+ export interface MessageBase {
11
+ name: string | symbol;
12
+ }
10
13
  /**
11
14
  * Creates a MsgSource type.
12
15
  */
13
16
  export interface MsgSource<T extends string> {
14
17
  source: T;
15
18
  }
19
+ /**
20
+ * Type for mapping messages to functions.
21
+ * Use this type to create your update logic for the useElmishMap hook.
22
+ */
23
+ export declare type UpdateMap<TProps, TModel, TMsg extends MessageBase> = {
24
+ [M in TMsg as M["name"]]: (msg: M, model: TModel, props: TProps) => UpdateReturnType<TModel, TMsg>;
25
+ };
26
+ export interface ErrorMessage {
27
+ name: "error";
28
+ error: Error;
29
+ }
@@ -23,4 +23,4 @@ var handleError = function handleError(error) {
23
23
  };
24
24
 
25
25
  exports.handleError = handleError;
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FbG1VdGlsaXRpZXMudHMiXSwibmFtZXMiOlsiaGFuZGxlRXJyb3IiLCJlcnJvciIsImVycm9yTWlkZGxld2FyZSIsIkxvZ2dlclNlcnZpY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQSxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFlQyxLQUFmLEVBQWdFO0FBQ3ZGLE1BQUlDLHFCQUFKLEVBQXFCO0FBQ2pCLCtCQUFnQkQsS0FBaEI7QUFDSDs7QUFDREUsZ0dBQWVGLEtBQWYsQ0FBcUJBLEtBQXJCO0FBRUEsU0FBTyxDQUFDLEVBQUQsQ0FBUDtBQUNILENBUE0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlcnJvck1pZGRsZXdhcmUsIExvZ2dlclNlcnZpY2UgfSBmcm9tIFwiLi9Jbml0XCI7XG5pbXBvcnQgeyBVcGRhdGVSZXR1cm5UeXBlIH0gZnJvbSBcIi4vRWxtQ29tcG9uZW50XCI7XG5cbi8qKlxuICogSGFuZGxlcyBhbiBlcnJvci5cbiAqIExvZ3MgdGhlIGVycm9yIGlmIGEgTG9nZ2VyIHdhcyBzcGVjaWZpZWQuXG4gKiBDYWxscyB0aGUgZXJyb3IgaGFuZGxpbmcgbWlkZGxld2FyZSBpZiBzcGVjaWZpZWQuXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVFcnJvciA9IDxUTW9kZWwsIFRNc2c+KGVycm9yOiBFcnJvcik6IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTXNnPiA9PiB7XG4gICAgaWYgKGVycm9yTWlkZGxld2FyZSkge1xuICAgICAgICBlcnJvck1pZGRsZXdhcmUoZXJyb3IpO1xuICAgIH1cbiAgICBMb2dnZXJTZXJ2aWNlPy5lcnJvcihlcnJvcik7XG5cbiAgICByZXR1cm4gW3t9XTtcbn07XG5cbmV4cG9ydCB0eXBlIE51bGxhYmxlPFQ+ID0gVCB8IG51bGw7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1zZ1NvdXJjZSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1zZ1NvdXJjZTxUIGV4dGVuZHMgc3RyaW5nPiB7XG4gICAgc291cmNlOiBULFxufSJdfQ==
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FbG1VdGlsaXRpZXMudHMiXSwibmFtZXMiOlsiaGFuZGxlRXJyb3IiLCJlcnJvciIsImVycm9yTWlkZGxld2FyZSIsIkxvZ2dlclNlcnZpY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQSxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFlQyxLQUFmLEVBQWdFO0FBQ3ZGLE1BQUlDLHFCQUFKLEVBQXFCO0FBQ2pCLCtCQUFnQkQsS0FBaEI7QUFDSDs7QUFDREUsZ0dBQWVGLEtBQWYsQ0FBcUJBLEtBQXJCO0FBRUEsU0FBTyxDQUFDLEVBQUQsQ0FBUDtBQUNILENBUE0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlcnJvck1pZGRsZXdhcmUsIExvZ2dlclNlcnZpY2UgfSBmcm9tIFwiLi9Jbml0XCI7XG5pbXBvcnQgeyBVcGRhdGVSZXR1cm5UeXBlIH0gZnJvbSBcIi4vRWxtQ29tcG9uZW50XCI7XG5cbi8qKlxuICogSGFuZGxlcyBhbiBlcnJvci5cbiAqIExvZ3MgdGhlIGVycm9yIGlmIGEgTG9nZ2VyIHdhcyBzcGVjaWZpZWQuXG4gKiBDYWxscyB0aGUgZXJyb3IgaGFuZGxpbmcgbWlkZGxld2FyZSBpZiBzcGVjaWZpZWQuXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVFcnJvciA9IDxUTW9kZWwsIFRNc2c+KGVycm9yOiBFcnJvcik6IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTXNnPiA9PiB7XG4gICAgaWYgKGVycm9yTWlkZGxld2FyZSkge1xuICAgICAgICBlcnJvck1pZGRsZXdhcmUoZXJyb3IpO1xuICAgIH1cbiAgICBMb2dnZXJTZXJ2aWNlPy5lcnJvcihlcnJvcik7XG5cbiAgICByZXR1cm4gW3t9XTtcbn07XG5cbmV4cG9ydCB0eXBlIE51bGxhYmxlPFQ+ID0gVCB8IG51bGw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUJhc2Uge1xuICAgIG5hbWU6IHN0cmluZyB8IHN5bWJvbCxcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgTXNnU291cmNlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXNnU291cmNlPFQgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgICBzb3VyY2U6IFQsXG59XG5cbi8qKlxuICogVHlwZSBmb3IgbWFwcGluZyBtZXNzYWdlcyB0byBmdW5jdGlvbnMuXG4gKiBVc2UgdGhpcyB0eXBlIHRvIGNyZWF0ZSB5b3VyIHVwZGF0ZSBsb2dpYyBmb3IgdGhlIHVzZUVsbWlzaE1hcCBob29rLlxuICovXG5leHBvcnQgdHlwZSBVcGRhdGVNYXA8VFByb3BzLCBUTW9kZWwsIFRNc2cgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gPSB7XG4gICAgW00gaW4gVE1zZyBhcyBNW1wibmFtZVwiXV06IChtc2c6IE0sIG1vZGVsOiBUTW9kZWwsIHByb3BzOiBUUHJvcHMpID0+IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTXNnPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNZXNzYWdlIHtcbiAgICBuYW1lOiBcImVycm9yXCIsXG4gICAgZXJyb3I6IEVycm9yLFxufSJdfQ==
@@ -1,5 +1,6 @@
1
+ import { MessageBase, Nullable, UpdateMap } from "../ElmUtilities";
1
2
  import { Cmd } from "../Cmd";
2
- import { Nullable } from "../ElmUtilities";
3
+ import { UpdateReturnType } from "../ElmComponent";
3
4
  /**
4
5
  * Executes a single command created by one of the ofPromise functions.
5
6
  * @param cmd The command to process.
@@ -18,3 +19,4 @@ export declare function getOfMsgParams<TMsg>(cmd?: Cmd<TMsg>): TMsg[];
18
19
  * @returns The array of processed messages.
19
20
  */
20
21
  export declare function execCmd<TMsg>(cmd?: Cmd<TMsg>): Promise<Nullable<TMsg>[]>;
22
+ export declare function getUpdateFn<TProps, TModel, TMessage extends MessageBase>(updateMap: UpdateMap<TProps, TModel, TMessage>): (msg: TMessage, model: TModel, props: TProps) => UpdateReturnType<TModel, TMessage>;
@@ -5,8 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.execCmd = execCmd;
7
7
  exports.getOfMsgParams = getOfMsgParams;
8
+ exports.getUpdateFn = getUpdateFn;
8
9
  exports.runSingleOfPromiseCmd = runSingleOfPromiseCmd;
9
10
 
11
+ var _useElmishMap = require("../useElmishMap");
12
+
10
13
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
11
14
 
12
15
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
@@ -136,4 +139,10 @@ function _execCmd() {
136
139
  }));
137
140
  return _execCmd.apply(this, arguments);
138
141
  }
139
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9UZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbInJ1blNpbmdsZU9mUHJvbWlzZUNtZCIsImNtZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZGlzcGF0Y2giLCJnZXRPZk1zZ1BhcmFtcyIsIm1zZ05hbWVzIiwibXNnIiwicHVzaCIsIm1hcCIsImN1cnJlbnRDbWQiLCJleGVjQ21kIiwiY2FsbGVycyIsInJlamVjdCIsImVycm9yIiwiYWxsIiwicmVzdWx0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7U0FDc0JBLHFCOzs7QUFRdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzttRkFaTyxpQkFBNENDLEdBQTVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw2Q0FDSSxJQUFJQyxPQUFKLENBQWtCLFVBQUFDLE9BQU8sRUFBSTtBQUNoQyxrQkFBTUMsUUFBUSxHQUFHLFNBQVhBLFFBQVc7QUFBQSx1QkFBWUQsT0FBTyxFQUFuQjtBQUFBLGVBQWpCOztBQUVBRixjQUFBQSxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU9HLFFBQVA7QUFDSCxhQUpNLENBREo7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRzs7OztBQWFBLFNBQVNDLGNBQVQsQ0FBK0JKLEdBQS9CLEVBQXlEO0FBQzVELE1BQU1LLFFBQWlCLEdBQUcsRUFBMUI7O0FBRUEsTUFBTUYsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBQ0csR0FBRCxFQUFxQjtBQUNsQ0QsSUFBQUEsUUFBUSxDQUFDRSxJQUFULENBQWNELEdBQWQ7QUFDSCxHQUZEOztBQUlBTixFQUFBQSxHQUFHLFNBQUgsSUFBQUEsR0FBRyxXQUFILFlBQUFBLEdBQUcsQ0FBRVEsR0FBTCxDQUFTLFVBQUFDLFVBQVU7QUFBQSxXQUFJQSxVQUFVLENBQUNOLFFBQUQsQ0FBZDtBQUFBLEdBQW5CO0FBRUEsU0FBT0UsUUFBUDtBQUNIO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1NBQ3NCSyxPOzs7OztxRUFBZixrQkFBOEJWLEdBQTlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUNFQSxHQURGO0FBQUE7QUFBQTtBQUFBOztBQUFBLDhDQUVRLEVBRlI7O0FBQUE7QUFLR1csWUFBQUEsT0FMSCxHQUthWCxHQUFHLENBQUNRLEdBQUo7QUFBQSxpRkFBUSxrQkFBTUMsVUFBTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMERBQW9CLElBQUlSLE9BQUosQ0FBNEIsVUFBQ0MsT0FBRCxFQUFVVSxNQUFWLEVBQXFCO0FBQ3pGLDhCQUFNVCxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFDRyxHQUFEO0FBQUEsbUNBQXFCSixPQUFPLENBQUNJLEdBQUQsQ0FBNUI7QUFBQSwyQkFBakI7O0FBRUFHLDBCQUFBQSxVQUFVLENBQUNOLFFBQUQsRUFBVyxVQUFBVSxLQUFLLEVBQUk7QUFDMUIsZ0NBQUlBLEtBQUosRUFBVztBQUNQRCw4QkFBQUEsTUFBTSxDQUFDQyxLQUFELENBQU47QUFDSCw2QkFGRCxNQUVPO0FBQ0hYLDhCQUFBQSxPQUFPLENBQUMsSUFBRCxDQUFQO0FBQ0g7QUFDSiwyQkFOUyxDQUFWO0FBT0gseUJBVjJDLENBQXBCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQVI7O0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBTGI7QUFBQTtBQUFBLG1CQWlCbUJELE9BQU8sQ0FBQ2EsR0FBUixDQUFZSCxPQUFaLENBakJuQjs7QUFBQTtBQWlCR0ksWUFBQUEsT0FqQkg7QUFBQSw4Q0FtQklBLE9BbkJKOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbWQgfSBmcm9tIFwiLi4vQ21kXCI7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gXCIuLi9FbG1VdGlsaXRpZXNcIjtcblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNpbmdsZSBjb21tYW5kIGNyZWF0ZWQgYnkgb25lIG9mIHRoZSBvZlByb21pc2UgZnVuY3Rpb25zLlxuICogQHBhcmFtIGNtZCBUaGUgY29tbWFuZCB0byBwcm9jZXNzLlxuICogQGRlcHJlY2F0ZWQgVXNlIGV4ZWNDbWQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNpbmdsZU9mUHJvbWlzZUNtZDxUTXNnPiAoY21kOiBDbWQ8VE1zZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoID0gKCk6IHZvaWQgPT4gcmVzb2x2ZSgpO1xuXG4gICAgICAgIGNtZFswXShkaXNwYXRjaCk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIG1lc3NhZ2VzIG91dCBvZiBhIGNvbW1hbmQuXG4gKiBAcGFyYW0gY21kIFRoZSBjb21tYW5kIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZk1zZ1BhcmFtczxUTXNnPiAoY21kPzogQ21kPFRNc2c+KTogVE1zZyBbXSB7XG4gICAgY29uc3QgbXNnTmFtZXM6IFRNc2cgW10gPSBbXTtcblxuICAgIGNvbnN0IGRpc3BhdGNoID0gKG1zZzogVE1zZyk6IHZvaWQgPT4ge1xuICAgICAgICBtc2dOYW1lcy5wdXNoKG1zZyk7XG4gICAgfTtcblxuICAgIGNtZD8ubWFwKGN1cnJlbnRDbWQgPT4gY3VycmVudENtZChkaXNwYXRjaCkpO1xuXG4gICAgcmV0dXJuIG1zZ05hbWVzO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGFsbCBjb21tYW5kcyBhbmQgcmVzb2x2ZXMgdGhlIG1lc3NhZ2VzLlxuICogQHBhcmFtIGNtZCBUaGUgY29tbWFuZCB0byBwcm9jZXNzLlxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIHByb2Nlc3NlZCBtZXNzYWdlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWNDbWQ8VE1zZz4gKGNtZD86IENtZDxUTXNnPik6IFByb21pc2U8TnVsbGFibGU8VE1zZz4gW10+IHtcbiAgICBpZiAoIWNtZCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgY2FsbGVycyA9IGNtZC5tYXAoYXN5bmMgY3VycmVudENtZCA9PiBuZXcgUHJvbWlzZTxOdWxsYWJsZTxUTXNnPj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkaXNwYXRjaCA9IChtc2c6IFRNc2cpOiB2b2lkID0+IHJlc29sdmUobXNnKTtcblxuICAgICAgICBjdXJyZW50Q21kKGRpc3BhdGNoLCBlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2FsbGVycyk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbn0iXX0=
142
+
143
+ function getUpdateFn(updateMap) {
144
+ return function (msg, model, props) {
145
+ return (0, _useElmishMap.callUpdateMap)(updateMap, msg, model, props);
146
+ };
147
+ }
148
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9UZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbInJ1blNpbmdsZU9mUHJvbWlzZUNtZCIsImNtZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZGlzcGF0Y2giLCJnZXRPZk1zZ1BhcmFtcyIsIm1zZ05hbWVzIiwibXNnIiwicHVzaCIsIm1hcCIsImN1cnJlbnRDbWQiLCJleGVjQ21kIiwiY2FsbGVycyIsInJlamVjdCIsImVycm9yIiwiYWxsIiwicmVzdWx0cyIsImdldFVwZGF0ZUZuIiwidXBkYXRlTWFwIiwibW9kZWwiLCJwcm9wcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUNBOzs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO1NBQ3NCQSxxQjs7O0FBUXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7bUZBWk8saUJBQTRDQyxHQUE1QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkNBQ0ksSUFBSUMsT0FBSixDQUFrQixVQUFBQyxPQUFPLEVBQUk7QUFDaEMsa0JBQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFXO0FBQUEsdUJBQVlELE9BQU8sRUFBbkI7QUFBQSxlQUFqQjs7QUFFQUYsY0FBQUEsR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPRyxRQUFQO0FBQ0gsYUFKTSxDQURKOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEc7Ozs7QUFhQSxTQUFTQyxjQUFULENBQStCSixHQUEvQixFQUF5RDtBQUM1RCxNQUFNSyxRQUFpQixHQUFHLEVBQTFCOztBQUVBLE1BQU1GLFFBQVEsR0FBRyxTQUFYQSxRQUFXLENBQUNHLEdBQUQsRUFBcUI7QUFDbENELElBQUFBLFFBQVEsQ0FBQ0UsSUFBVCxDQUFjRCxHQUFkO0FBQ0gsR0FGRDs7QUFJQU4sRUFBQUEsR0FBRyxTQUFILElBQUFBLEdBQUcsV0FBSCxZQUFBQSxHQUFHLENBQUVRLEdBQUwsQ0FBUyxVQUFBQyxVQUFVO0FBQUEsV0FBSUEsVUFBVSxDQUFDTixRQUFELENBQWQ7QUFBQSxHQUFuQjtBQUVBLFNBQU9FLFFBQVA7QUFDSDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztTQUNzQkssTzs7Ozs7cUVBQWYsa0JBQThCVixHQUE5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFDRUEsR0FERjtBQUFBO0FBQUE7QUFBQTs7QUFBQSw4Q0FFUSxFQUZSOztBQUFBO0FBS0dXLFlBQUFBLE9BTEgsR0FLYVgsR0FBRyxDQUFDUSxHQUFKO0FBQUEsaUZBQVEsa0JBQU1DLFVBQU47QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDBEQUFvQixJQUFJUixPQUFKLENBQTRCLFVBQUNDLE9BQUQsRUFBVVUsTUFBVixFQUFxQjtBQUN6Riw4QkFBTVQsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBQ0csR0FBRDtBQUFBLG1DQUFxQkosT0FBTyxDQUFDSSxHQUFELENBQTVCO0FBQUEsMkJBQWpCOztBQUVBRywwQkFBQUEsVUFBVSxDQUFDTixRQUFELEVBQVcsVUFBQVUsS0FBSyxFQUFJO0FBQzFCLGdDQUFJQSxLQUFKLEVBQVc7QUFDUEQsOEJBQUFBLE1BQU0sQ0FBQ0MsS0FBRCxDQUFOO0FBQ0gsNkJBRkQsTUFFTztBQUNIWCw4QkFBQUEsT0FBTyxDQUFDLElBQUQsQ0FBUDtBQUNIO0FBQ0osMkJBTlMsQ0FBVjtBQU9ILHlCQVYyQyxDQUFwQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFSOztBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUxiO0FBQUE7QUFBQSxtQkFpQm1CRCxPQUFPLENBQUNhLEdBQVIsQ0FBWUgsT0FBWixDQWpCbkI7O0FBQUE7QUFpQkdJLFlBQUFBLE9BakJIO0FBQUEsOENBbUJJQSxPQW5CSjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHOzs7O0FBc0JBLFNBQVNDLFdBQVQsQ0FBb0VDLFNBQXBFLEVBQXlNO0FBQzVNLFNBQU8sVUFBVVgsR0FBVixFQUF5QlksS0FBekIsRUFBd0NDLEtBQXhDLEVBQTJGO0FBQzlGLFdBQU8saUNBQWNGLFNBQWQsRUFBeUJYLEdBQXpCLEVBQThCWSxLQUE5QixFQUFxQ0MsS0FBckMsQ0FBUDtBQUNILEdBRkQ7QUFHSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lc3NhZ2VCYXNlLCBOdWxsYWJsZSwgVXBkYXRlTWFwIH0gZnJvbSBcIi4uL0VsbVV0aWxpdGllc1wiO1xuaW1wb3J0IHsgY2FsbFVwZGF0ZU1hcCB9IGZyb20gXCIuLi91c2VFbG1pc2hNYXBcIjtcbmltcG9ydCB7IENtZCB9IGZyb20gXCIuLi9DbWRcIjtcbmltcG9ydCB7IFVwZGF0ZVJldHVyblR5cGUgfSBmcm9tIFwiLi4vRWxtQ29tcG9uZW50XCI7XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBzaW5nbGUgY29tbWFuZCBjcmVhdGVkIGJ5IG9uZSBvZiB0aGUgb2ZQcm9taXNlIGZ1bmN0aW9ucy5cbiAqIEBwYXJhbSBjbWQgVGhlIGNvbW1hbmQgdG8gcHJvY2Vzcy5cbiAqIEBkZXByZWNhdGVkIFVzZSBleGVjQ21kIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TaW5nbGVPZlByb21pc2VDbWQ8VE1zZz4gKGNtZDogQ21kPFRNc2c+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICBjb25zdCBkaXNwYXRjaCA9ICgpOiB2b2lkID0+IHJlc29sdmUoKTtcblxuICAgICAgICBjbWRbMF0oZGlzcGF0Y2gpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBtZXNzYWdlcyBvdXQgb2YgYSBjb21tYW5kLlxuICogQHBhcmFtIGNtZCBUaGUgY29tbWFuZCB0byBwcm9jZXNzLlxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2ZNc2dQYXJhbXM8VE1zZz4gKGNtZD86IENtZDxUTXNnPik6IFRNc2cgW10ge1xuICAgIGNvbnN0IG1zZ05hbWVzOiBUTXNnIFtdID0gW107XG5cbiAgICBjb25zdCBkaXNwYXRjaCA9IChtc2c6IFRNc2cpOiB2b2lkID0+IHtcbiAgICAgICAgbXNnTmFtZXMucHVzaChtc2cpO1xuICAgIH07XG5cbiAgICBjbWQ/Lm1hcChjdXJyZW50Q21kID0+IGN1cnJlbnRDbWQoZGlzcGF0Y2gpKTtcblxuICAgIHJldHVybiBtc2dOYW1lcztcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhbGwgY29tbWFuZHMgYW5kIHJlc29sdmVzIHRoZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBjbWQgVGhlIGNvbW1hbmQgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBwcm9jZXNzZWQgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjQ21kPFRNc2c+IChjbWQ/OiBDbWQ8VE1zZz4pOiBQcm9taXNlPE51bGxhYmxlPFRNc2c+IFtdPiB7XG4gICAgaWYgKCFjbWQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxlcnMgPSBjbWQubWFwKGFzeW5jIGN1cnJlbnRDbWQgPT4gbmV3IFByb21pc2U8TnVsbGFibGU8VE1zZz4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2ggPSAobXNnOiBUTXNnKTogdm9pZCA9PiByZXNvbHZlKG1zZyk7XG5cbiAgICAgICAgY3VycmVudENtZChkaXNwYXRjaCwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSkpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNhbGxlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVGbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gKHVwZGF0ZU1hcDogVXBkYXRlTWFwPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4pOiAobXNnOiBUTWVzc2FnZSwgbW9kZWw6IFRNb2RlbCwgcHJvcHM6IFRQcm9wcykgPT4gVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNZXNzYWdlPiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtc2c6IFRNZXNzYWdlLCBtb2RlbDogVE1vZGVsLCBwcm9wczogVFByb3BzKTogVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNZXNzYWdlPiB7XG4gICAgICAgIHJldHVybiBjYWxsVXBkYXRlTWFwKHVwZGF0ZU1hcCwgbXNnLCBtb2RlbCwgcHJvcHMpO1xuICAgIH07XG59Il19
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { Cmd, createCmd, Dispatch } from "./Cmd";
2
2
  import { ElmComponent, UpdateReturnType } from "./ElmComponent";
3
- import { handleError, MsgSource } from "./ElmUtilities";
3
+ import { ErrorMessage, handleError, MsgSource, UpdateMap } from "./ElmUtilities";
4
4
  import { init, Logger, Message } from "./Init";
5
- import { useElmish } from "./Hooks";
6
- export type { Logger, Message, Cmd, Dispatch, UpdateReturnType, MsgSource, };
7
- export { init, createCmd, ElmComponent, handleError, useElmish, };
5
+ import { useElmish } from "./useElmish";
6
+ import { useElmishMap } from "./useElmishMap";
7
+ export type { Logger, Message, Cmd, Dispatch, UpdateReturnType, MsgSource, UpdateMap, ErrorMessage, };
8
+ export { init, createCmd, ElmComponent, handleError, useElmish, useElmishMap, };
package/dist/index.js CHANGED
@@ -30,7 +30,13 @@ Object.defineProperty(exports, "init", {
30
30
  Object.defineProperty(exports, "useElmish", {
31
31
  enumerable: true,
32
32
  get: function get() {
33
- return _Hooks.useElmish;
33
+ return _useElmish.useElmish;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "useElmishMap", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _useElmishMap.useElmishMap;
34
40
  }
35
41
  });
36
42
 
@@ -42,5 +48,7 @@ var _ElmUtilities = require("./ElmUtilities");
42
48
 
43
49
  var _Init = require("./Init");
44
50
 
45
- var _Hooks = require("./Hooks");
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENtZCwgY3JlYXRlQ21kLCBEaXNwYXRjaCB9IGZyb20gXCIuL0NtZFwiO1xuaW1wb3J0IHsgRWxtQ29tcG9uZW50LCBVcGRhdGVSZXR1cm5UeXBlIH0gZnJvbSBcIi4vRWxtQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciwgTXNnU291cmNlIH0gZnJvbSBcIi4vRWxtVXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBpbml0LCBMb2dnZXIsIE1lc3NhZ2UgfSBmcm9tIFwiLi9Jbml0XCI7XG5pbXBvcnQgeyB1c2VFbG1pc2ggfSBmcm9tIFwiLi9Ib29rc1wiO1xuXG5leHBvcnQgdHlwZSB7XG4gICAgTG9nZ2VyLFxuICAgIE1lc3NhZ2UsXG4gICAgQ21kLFxuICAgIERpc3BhdGNoLFxuICAgIFVwZGF0ZVJldHVyblR5cGUsXG4gICAgTXNnU291cmNlLFxufTtcblxuZXhwb3J0IHtcbiAgICBpbml0LFxuICAgIGNyZWF0ZUNtZCxcbiAgICBFbG1Db21wb25lbnQsXG4gICAgaGFuZGxlRXJyb3IsXG4gICAgdXNlRWxtaXNoLFxufTsiXX0=
51
+ var _useElmish = require("./useElmish");
52
+
53
+ var _useElmishMap = require("./useElmishMap");
54
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENtZCwgY3JlYXRlQ21kLCBEaXNwYXRjaCB9IGZyb20gXCIuL0NtZFwiO1xuaW1wb3J0IHsgRWxtQ29tcG9uZW50LCBVcGRhdGVSZXR1cm5UeXBlIH0gZnJvbSBcIi4vRWxtQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UsIGhhbmRsZUVycm9yLCBNc2dTb3VyY2UsIFVwZGF0ZU1hcCB9IGZyb20gXCIuL0VsbVV0aWxpdGllc1wiO1xuaW1wb3J0IHsgaW5pdCwgTG9nZ2VyLCBNZXNzYWdlIH0gZnJvbSBcIi4vSW5pdFwiO1xuaW1wb3J0IHsgdXNlRWxtaXNoIH0gZnJvbSBcIi4vdXNlRWxtaXNoXCI7XG5pbXBvcnQgeyB1c2VFbG1pc2hNYXAgfSBmcm9tIFwiLi91c2VFbG1pc2hNYXBcIjtcblxuZXhwb3J0IHR5cGUge1xuICAgIExvZ2dlcixcbiAgICBNZXNzYWdlLFxuICAgIENtZCxcbiAgICBEaXNwYXRjaCxcbiAgICBVcGRhdGVSZXR1cm5UeXBlLFxuICAgIE1zZ1NvdXJjZSxcbiAgICBVcGRhdGVNYXAsXG4gICAgRXJyb3JNZXNzYWdlLFxufTtcblxuZXhwb3J0IHtcbiAgICBpbml0LFxuICAgIGNyZWF0ZUNtZCxcbiAgICBFbG1Db21wb25lbnQsXG4gICAgaGFuZGxlRXJyb3IsXG4gICAgdXNlRWxtaXNoLFxuICAgIHVzZUVsbWlzaE1hcCxcbn07Il19
@@ -0,0 +1,4 @@
1
+ import { Cmd, Dispatch } from "./Cmd";
2
+ import { MessageBase } from "./ElmUtilities";
3
+ import { UpdateFunction } from "./ElmComponent";
4
+ export declare function useElmish<TProps, TModel, TMsg extends MessageBase>(props: TProps, init: (props: TProps) => [TModel, Cmd<TMsg>], update: UpdateFunction<TProps, TModel, TMsg>, name: string): [TModel, Dispatch<TMsg>];
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useElmish = useElmish;
7
+
8
+ var _Init = require("./Init");
9
+
10
+ var _react = require("react");
11
+
12
+ 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; }
13
+
14
+ 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; }
15
+
16
+ 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; }
17
+
18
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
19
+
20
+ 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."); }
21
+
22
+ 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); }
23
+
24
+ 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; }
25
+
26
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
27
+
28
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
29
+
30
+ function useElmish(props, init, update, name) {
31
+ var reentered = false;
32
+ var buffer = [];
33
+ var currentModel = {};
34
+
35
+ var _useState = (0, _react.useState)(null),
36
+ _useState2 = _slicedToArray(_useState, 2),
37
+ model = _useState2[0],
38
+ setModel = _useState2[1];
39
+
40
+ var initializedModel = model;
41
+ var execCmd = (0, _react.useCallback)(function (cmd) {
42
+ cmd.forEach(function (call) {
43
+ try {
44
+ call(dispatch);
45
+ } catch (ex) {
46
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.error(ex);
47
+ }
48
+ });
49
+ }, []);
50
+ var dispatch = (0, _react.useCallback)(function (msg) {
51
+ if (!initializedModel) {
52
+ return;
53
+ }
54
+
55
+ var modelHasChanged = function modelHasChanged(updatedModel) {
56
+ return updatedModel !== initializedModel && Object.getOwnPropertyNames(updatedModel).length > 0;
57
+ };
58
+
59
+ if (_Init.dispatchMiddleware) {
60
+ (0, _Init.dispatchMiddleware)(msg);
61
+ }
62
+
63
+ if (reentered) {
64
+ buffer.push(msg);
65
+ } else {
66
+ reentered = true;
67
+ var nextMsg = msg;
68
+ var modified = false;
69
+
70
+ while (nextMsg) {
71
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.info("Elm", "message from", name, nextMsg.name);
72
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.debug("Elm", "message from", name, nextMsg);
73
+
74
+ try {
75
+ var _update = update(_objectSpread(_objectSpread({}, initializedModel), currentModel), nextMsg, props),
76
+ _update2 = _slicedToArray(_update, 2),
77
+ newModel = _update2[0],
78
+ cmd = _update2[1];
79
+
80
+ if (modelHasChanged(newModel)) {
81
+ currentModel = _objectSpread(_objectSpread({}, currentModel), newModel);
82
+ modified = true;
83
+ }
84
+
85
+ if (cmd) {
86
+ execCmd(cmd);
87
+ }
88
+ } catch (ex) {
89
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.error(ex);
90
+ }
91
+
92
+ nextMsg = buffer.shift();
93
+ }
94
+
95
+ reentered = false;
96
+
97
+ if (modified) {
98
+ setModel(function (prevModel) {
99
+ var updatedModel = _objectSpread(_objectSpread({}, prevModel), currentModel);
100
+
101
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.debug("Elm", "update model for", name, updatedModel);
102
+ return updatedModel;
103
+ });
104
+ }
105
+ }
106
+ }, []);
107
+
108
+ if (!initializedModel) {
109
+ var _init = init(props),
110
+ _init2 = _slicedToArray(_init, 2),
111
+ initModel = _init2[0],
112
+ initCmd = _init2[1];
113
+
114
+ initializedModel = initModel;
115
+ setModel(initializedModel);
116
+ execCmd(initCmd);
117
+ }
118
+
119
+ return [initializedModel, dispatch];
120
+ }
121
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VFbG1pc2gudHMiXSwibmFtZXMiOlsidXNlRWxtaXNoIiwicHJvcHMiLCJpbml0IiwidXBkYXRlIiwibmFtZSIsInJlZW50ZXJlZCIsImJ1ZmZlciIsImN1cnJlbnRNb2RlbCIsIm1vZGVsIiwic2V0TW9kZWwiLCJpbml0aWFsaXplZE1vZGVsIiwiZXhlY0NtZCIsImNtZCIsImZvckVhY2giLCJjYWxsIiwiZGlzcGF0Y2giLCJleCIsIkxvZ2dlclNlcnZpY2UiLCJlcnJvciIsIm1zZyIsIm1vZGVsSGFzQ2hhbmdlZCIsInVwZGF0ZWRNb2RlbCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW5ndGgiLCJkaXNwYXRjaE1pZGRsZXdhcmUiLCJwdXNoIiwibmV4dE1zZyIsIm1vZGlmaWVkIiwiaW5mbyIsImRlYnVnIiwibmV3TW9kZWwiLCJzaGlmdCIsInByZXZNb2RlbCIsImluaXRNb2RlbCIsImluaXRDbWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHTyxTQUFTQSxTQUFULENBQThEQyxLQUE5RCxFQUE2RUMsSUFBN0UsRUFBMkhDLE1BQTNILEVBQXlLQyxJQUF6SyxFQUFpTjtBQUNwTixNQUFJQyxTQUFTLEdBQUcsS0FBaEI7QUFDQSxNQUFNQyxNQUFlLEdBQUcsRUFBeEI7QUFDQSxNQUFJQyxZQUE2QixHQUFHLEVBQXBDOztBQUVBLGtCQUEwQixxQkFBMkIsSUFBM0IsQ0FBMUI7QUFBQTtBQUFBLE1BQU9DLEtBQVA7QUFBQSxNQUFjQyxRQUFkOztBQUNBLE1BQUlDLGdCQUFnQixHQUFHRixLQUF2QjtBQUVBLE1BQU1HLE9BQU8sR0FBRyx3QkFBWSxVQUFDQyxHQUFELEVBQTBCO0FBQ2xEQSxJQUFBQSxHQUFHLENBQUNDLE9BQUosQ0FBWSxVQUFBQyxJQUFJLEVBQUk7QUFDaEIsVUFBSTtBQUNBQSxRQUFBQSxJQUFJLENBQUNDLFFBQUQsQ0FBSjtBQUNILE9BRkQsQ0FFRSxPQUFPQyxFQUFQLEVBQW9CO0FBQ2xCQyxzR0FBZUMsS0FBZixDQUFxQkYsRUFBckI7QUFDSDtBQUNKLEtBTkQ7QUFPSCxHQVJlLEVBUWIsRUFSYSxDQUFoQjtBQVVBLE1BQU1ELFFBQVEsR0FBRyx3QkFBWSxVQUFDSSxHQUFELEVBQXFCO0FBQzlDLFFBQUksQ0FBQ1QsZ0JBQUwsRUFBdUI7QUFDbkI7QUFDSDs7QUFFRCxRQUFNVSxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUNDLFlBQUQ7QUFBQSxhQUE0Q0EsWUFBWSxLQUFLWCxnQkFBakIsSUFBcUNZLE1BQU0sQ0FBQ0MsbUJBQVAsQ0FBMkJGLFlBQTNCLEVBQXlDRyxNQUF6QyxHQUFrRCxDQUFuSTtBQUFBLEtBQXhCOztBQUVBLFFBQUlDLHdCQUFKLEVBQXdCO0FBQ3BCLG9DQUFtQk4sR0FBbkI7QUFDSDs7QUFFRCxRQUFJZCxTQUFKLEVBQWU7QUFDWEMsTUFBQUEsTUFBTSxDQUFDb0IsSUFBUCxDQUFZUCxHQUFaO0FBQ0gsS0FGRCxNQUVPO0FBQ0hkLE1BQUFBLFNBQVMsR0FBRyxJQUFaO0FBRUEsVUFBSXNCLE9BQXlCLEdBQUdSLEdBQWhDO0FBQ0EsVUFBSVMsUUFBUSxHQUFHLEtBQWY7O0FBRUEsYUFBT0QsT0FBUCxFQUFnQjtBQUNaVixzR0FBZVksSUFBZixDQUFvQixLQUFwQixFQUEyQixjQUEzQixFQUEyQ3pCLElBQTNDLEVBQWlEdUIsT0FBTyxDQUFDdkIsSUFBekQ7QUFDQWEsc0dBQWVhLEtBQWYsQ0FBcUIsS0FBckIsRUFBNEIsY0FBNUIsRUFBNEMxQixJQUE1QyxFQUFrRHVCLE9BQWxEOztBQUVBLFlBQUk7QUFDQSx3QkFBd0J4QixNQUFNLGlDQUFNTyxnQkFBTixHQUEyQkgsWUFBM0IsR0FBMkNvQixPQUEzQyxFQUFvRDFCLEtBQXBELENBQTlCO0FBQUE7QUFBQSxjQUFPOEIsUUFBUDtBQUFBLGNBQWlCbkIsR0FBakI7O0FBRUEsY0FBSVEsZUFBZSxDQUFDVyxRQUFELENBQW5CLEVBQStCO0FBQzNCeEIsWUFBQUEsWUFBWSxtQ0FBUUEsWUFBUixHQUF5QndCLFFBQXpCLENBQVo7QUFFQUgsWUFBQUEsUUFBUSxHQUFHLElBQVg7QUFDSDs7QUFFRCxjQUFJaEIsR0FBSixFQUFTO0FBQ0xELFlBQUFBLE9BQU8sQ0FBQ0MsR0FBRCxDQUFQO0FBQ0g7QUFDSixTQVpELENBWUUsT0FBT0ksRUFBUCxFQUFvQjtBQUNsQkMsd0dBQWVDLEtBQWYsQ0FBcUJGLEVBQXJCO0FBQ0g7O0FBRURXLFFBQUFBLE9BQU8sR0FBR3JCLE1BQU0sQ0FBQzBCLEtBQVAsRUFBVjtBQUNIOztBQUNEM0IsTUFBQUEsU0FBUyxHQUFHLEtBQVo7O0FBRUEsVUFBSXVCLFFBQUosRUFBYztBQUNWbkIsUUFBQUEsUUFBUSxDQUFDLFVBQUF3QixTQUFTLEVBQUk7QUFDbEIsY0FBTVosWUFBWSxtQ0FBUVksU0FBUixHQUFnQzFCLFlBQWhDLENBQWxCOztBQUVBVSx3R0FBZWEsS0FBZixDQUFxQixLQUFyQixFQUE0QixrQkFBNUIsRUFBZ0QxQixJQUFoRCxFQUFzRGlCLFlBQXREO0FBRUEsaUJBQU9BLFlBQVA7QUFDSCxTQU5PLENBQVI7QUFPSDtBQUNKO0FBQ0osR0FyRGdCLEVBcURkLEVBckRjLENBQWpCOztBQXVEQSxNQUFJLENBQUNYLGdCQUFMLEVBQXVCO0FBQ25CLGdCQUE2QlIsSUFBSSxDQUFDRCxLQUFELENBQWpDO0FBQUE7QUFBQSxRQUFPaUMsU0FBUDtBQUFBLFFBQWtCQyxPQUFsQjs7QUFFQXpCLElBQUFBLGdCQUFnQixHQUFHd0IsU0FBbkI7QUFDQXpCLElBQUFBLFFBQVEsQ0FBQ0MsZ0JBQUQsQ0FBUjtBQUVBQyxJQUFBQSxPQUFPLENBQUN3QixPQUFELENBQVA7QUFDSDs7QUFFRCxTQUFPLENBQUN6QixnQkFBRCxFQUFtQkssUUFBbkIsQ0FBUDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ21kLCBEaXNwYXRjaCB9IGZyb20gXCIuL0NtZFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hNaWRkbGV3YXJlLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSBcIi4vSW5pdFwiO1xuaW1wb3J0IHsgTWVzc2FnZUJhc2UsIE51bGxhYmxlIH0gZnJvbSBcIi4vRWxtVXRpbGl0aWVzXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSBcIi4vRWxtQ29tcG9uZW50XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VFbG1pc2g8VFByb3BzLCBUTW9kZWwsIFRNc2cgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gKHByb3BzOiBUUHJvcHMsIGluaXQ6IChwcm9wczogVFByb3BzKSA9PiBbVE1vZGVsLCBDbWQ8VE1zZz5dLCB1cGRhdGU6IFVwZGF0ZUZ1bmN0aW9uPFRQcm9wcywgVE1vZGVsLCBUTXNnPiwgbmFtZTogc3RyaW5nKTogW1RNb2RlbCwgRGlzcGF0Y2g8VE1zZz5dIHtcbiAgICBsZXQgcmVlbnRlcmVkID0gZmFsc2U7XG4gICAgY29uc3QgYnVmZmVyOiBUTXNnIFtdID0gW107XG4gICAgbGV0IGN1cnJlbnRNb2RlbDogUGFydGlhbDxUTW9kZWw+ID0ge307XG5cbiAgICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IHVzZVN0YXRlPE51bGxhYmxlPFRNb2RlbD4+KG51bGwpO1xuICAgIGxldCBpbml0aWFsaXplZE1vZGVsID0gbW9kZWw7XG5cbiAgICBjb25zdCBleGVjQ21kID0gdXNlQ2FsbGJhY2soKGNtZDogQ21kPFRNc2c+KTogdm9pZCA9PiB7XG4gICAgICAgIGNtZC5mb3JFYWNoKGNhbGwgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjYWxsKGRpc3BhdGNoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4OiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZXJyb3IoZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZUNhbGxiYWNrKChtc2c6IFRNc2cpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCFpbml0aWFsaXplZE1vZGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RlbEhhc0NoYW5nZWQgPSAodXBkYXRlZE1vZGVsOiBQYXJ0aWFsPFRNb2RlbD4pOiBib29sZWFuID0+IHVwZGF0ZWRNb2RlbCAhPT0gaW5pdGlhbGl6ZWRNb2RlbCAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh1cGRhdGVkTW9kZWwpLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgaWYgKGRpc3BhdGNoTWlkZGxld2FyZSkge1xuICAgICAgICAgICAgZGlzcGF0Y2hNaWRkbGV3YXJlKG1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVlbnRlcmVkKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChtc2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVlbnRlcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgbGV0IG5leHRNc2c6IFRNc2cgfCB1bmRlZmluZWQgPSBtc2c7XG4gICAgICAgICAgICBsZXQgbW9kaWZpZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgd2hpbGUgKG5leHRNc2cpIHtcbiAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5pbmZvKFwiRWxtXCIsIFwibWVzc2FnZSBmcm9tXCIsIG5hbWUsIG5leHRNc2cubmFtZSk7XG4gICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZGVidWcoXCJFbG1cIiwgXCJtZXNzYWdlIGZyb21cIiwgbmFtZSwgbmV4dE1zZyk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbmV3TW9kZWwsIGNtZF0gPSB1cGRhdGUoeyAuLi5pbml0aWFsaXplZE1vZGVsLCAuLi5jdXJyZW50TW9kZWwgfSwgbmV4dE1zZywgcHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RlbEhhc0NoYW5nZWQobmV3TW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kZWwgPSB7IC4uLmN1cnJlbnRNb2RlbCwgLi4ubmV3TW9kZWwgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0NtZChjbWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZXJyb3IoZXgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5leHRNc2cgPSBidWZmZXIuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZW50ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAobW9kaWZpZWQpIHtcbiAgICAgICAgICAgICAgICBzZXRNb2RlbChwcmV2TW9kZWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkTW9kZWwgPSB7IC4uLnByZXZNb2RlbCBhcyBUTW9kZWwsIC4uLmN1cnJlbnRNb2RlbCB9O1xuXG4gICAgICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2U/LmRlYnVnKFwiRWxtXCIsIFwidXBkYXRlIG1vZGVsIGZvclwiLCBuYW1lLCB1cGRhdGVkTW9kZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkTW9kZWw7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG5cbiAgICBpZiAoIWluaXRpYWxpemVkTW9kZWwpIHtcbiAgICAgICAgY29uc3QgW2luaXRNb2RlbCwgaW5pdENtZF0gPSBpbml0KHByb3BzKTtcblxuICAgICAgICBpbml0aWFsaXplZE1vZGVsID0gaW5pdE1vZGVsO1xuICAgICAgICBzZXRNb2RlbChpbml0aWFsaXplZE1vZGVsKTtcblxuICAgICAgICBleGVjQ21kKGluaXRDbWQpO1xuICAgIH1cblxuICAgIHJldHVybiBbaW5pdGlhbGl6ZWRNb2RlbCwgZGlzcGF0Y2hdO1xufSJdfQ==
@@ -0,0 +1,5 @@
1
+ import { Cmd, Dispatch } from "./Cmd";
2
+ import { MessageBase, UpdateMap } from "./ElmUtilities";
3
+ import { UpdateReturnType } from "./ElmComponent";
4
+ export declare function useElmishMap<TProps, TModel, TMsg extends MessageBase>(props: TProps, init: (props: TProps) => [TModel, Cmd<TMsg>], updateMap: UpdateMap<TProps, TModel, TMsg>, name: string): [TModel, Dispatch<TMsg>];
5
+ export declare function callUpdateMap<TProps, TModel, TMessage extends MessageBase>(updateMap: UpdateMap<TProps, TModel, TMessage>, msg: TMessage, model: TModel, props: TProps): UpdateReturnType<TModel, TMessage>;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.callUpdateMap = callUpdateMap;
7
+ exports.useElmishMap = useElmishMap;
8
+
9
+ var _Init = require("./Init");
10
+
11
+ var _react = require("react");
12
+
13
+ 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; }
14
+
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
+
17
+ 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; }
18
+
19
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
20
+
21
+ 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."); }
22
+
23
+ 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); }
24
+
25
+ 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; }
26
+
27
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
28
+
29
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
30
+
31
+ function useElmishMap(props, init, updateMap, name) {
32
+ var reentered = false;
33
+ var buffer = [];
34
+ var currentModel = {};
35
+
36
+ var _useState = (0, _react.useState)(null),
37
+ _useState2 = _slicedToArray(_useState, 2),
38
+ model = _useState2[0],
39
+ setModel = _useState2[1];
40
+
41
+ var initializedModel = model;
42
+ var execCmd = (0, _react.useCallback)(function (cmd) {
43
+ cmd.forEach(function (call) {
44
+ try {
45
+ call(dispatch);
46
+ } catch (ex) {
47
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.error(ex);
48
+ }
49
+ });
50
+ }, []);
51
+ var dispatch = (0, _react.useCallback)(function (msg) {
52
+ if (!initializedModel) {
53
+ return;
54
+ }
55
+
56
+ var modelHasChanged = function modelHasChanged(updatedModel) {
57
+ return updatedModel !== initializedModel && Object.getOwnPropertyNames(updatedModel).length > 0;
58
+ };
59
+
60
+ if (_Init.dispatchMiddleware) {
61
+ (0, _Init.dispatchMiddleware)(msg);
62
+ }
63
+
64
+ if (reentered) {
65
+ buffer.push(msg);
66
+ } else {
67
+ reentered = true;
68
+ var nextMsg = msg;
69
+ var modified = false;
70
+
71
+ while (nextMsg) {
72
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.info("Elm", "message from", name, nextMsg.name);
73
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.debug("Elm", "message from", name, nextMsg);
74
+
75
+ try {
76
+ var _callUpdateMap = callUpdateMap(updateMap, nextMsg, _objectSpread(_objectSpread({}, initializedModel), currentModel), props),
77
+ _callUpdateMap2 = _slicedToArray(_callUpdateMap, 2),
78
+ newModel = _callUpdateMap2[0],
79
+ cmd = _callUpdateMap2[1];
80
+
81
+ if (modelHasChanged(newModel)) {
82
+ currentModel = _objectSpread(_objectSpread({}, currentModel), newModel);
83
+ modified = true;
84
+ }
85
+
86
+ if (cmd) {
87
+ execCmd(cmd);
88
+ }
89
+ } catch (ex) {
90
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.error(ex);
91
+ }
92
+
93
+ nextMsg = buffer.shift();
94
+ }
95
+
96
+ reentered = false;
97
+
98
+ if (modified) {
99
+ setModel(function (prevModel) {
100
+ var updatedModel = _objectSpread(_objectSpread({}, prevModel), currentModel);
101
+
102
+ _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.debug("Elm", "update model for", name, updatedModel);
103
+ return updatedModel;
104
+ });
105
+ }
106
+ }
107
+ }, []);
108
+
109
+ if (!initializedModel) {
110
+ var _init = init(props),
111
+ _init2 = _slicedToArray(_init, 2),
112
+ initModel = _init2[0],
113
+ initCmd = _init2[1];
114
+
115
+ initializedModel = initModel;
116
+ setModel(initializedModel);
117
+ execCmd(initCmd);
118
+ }
119
+
120
+ return [initializedModel, dispatch];
121
+ }
122
+
123
+ function callUpdateMap(updateMap, msg, model, props) {
124
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
125
+ // @ts-expect-error -- We know that nextMsg fits
126
+ return updateMap[msg.name](msg, model, props);
127
+ }
128
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VFbG1pc2hNYXAudHMiXSwibmFtZXMiOlsidXNlRWxtaXNoTWFwIiwicHJvcHMiLCJpbml0IiwidXBkYXRlTWFwIiwibmFtZSIsInJlZW50ZXJlZCIsImJ1ZmZlciIsImN1cnJlbnRNb2RlbCIsIm1vZGVsIiwic2V0TW9kZWwiLCJpbml0aWFsaXplZE1vZGVsIiwiZXhlY0NtZCIsImNtZCIsImZvckVhY2giLCJjYWxsIiwiZGlzcGF0Y2giLCJleCIsIkxvZ2dlclNlcnZpY2UiLCJlcnJvciIsIm1zZyIsIm1vZGVsSGFzQ2hhbmdlZCIsInVwZGF0ZWRNb2RlbCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW5ndGgiLCJkaXNwYXRjaE1pZGRsZXdhcmUiLCJwdXNoIiwibmV4dE1zZyIsIm1vZGlmaWVkIiwiaW5mbyIsImRlYnVnIiwiY2FsbFVwZGF0ZU1hcCIsIm5ld01vZGVsIiwic2hpZnQiLCJwcmV2TW9kZWwiLCJpbml0TW9kZWwiLCJpbml0Q21kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdPLFNBQVNBLFlBQVQsQ0FBaUVDLEtBQWpFLEVBQWdGQyxJQUFoRixFQUE4SEMsU0FBOUgsRUFBMEtDLElBQTFLLEVBQWtOO0FBQ3JOLE1BQUlDLFNBQVMsR0FBRyxLQUFoQjtBQUNBLE1BQU1DLE1BQWUsR0FBRyxFQUF4QjtBQUNBLE1BQUlDLFlBQTZCLEdBQUcsRUFBcEM7O0FBRUEsa0JBQTBCLHFCQUEyQixJQUEzQixDQUExQjtBQUFBO0FBQUEsTUFBT0MsS0FBUDtBQUFBLE1BQWNDLFFBQWQ7O0FBQ0EsTUFBSUMsZ0JBQWdCLEdBQUdGLEtBQXZCO0FBRUEsTUFBTUcsT0FBTyxHQUFHLHdCQUFZLFVBQUNDLEdBQUQsRUFBMEI7QUFDbERBLElBQUFBLEdBQUcsQ0FBQ0MsT0FBSixDQUFZLFVBQUFDLElBQUksRUFBSTtBQUNoQixVQUFJO0FBQ0FBLFFBQUFBLElBQUksQ0FB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QUF1TTtBQUMxTTtBQUNBO0FBQ0EsU0FBT0UsU0FBUyxDQUFDZ0IsR0FBRyxDQUFDZixJQUFMLENBQVQsQ0FBd0NlLEdBQXhDLEVBQTZDWCxLQUE3QyxFQUFvRFAsS0FBcEQsQ0FBUDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ21kLCBEaXNwYXRjaCB9IGZyb20gXCIuL0NtZFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hNaWRkbGV3YXJlLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSBcIi4vSW5pdFwiO1xuaW1wb3J0IHsgTWVzc2FnZUJhc2UsIE51bGxhYmxlLCBVcGRhdGVNYXAgfSBmcm9tIFwiLi9FbG1VdGlsaXRpZXNcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgVXBkYXRlUmV0dXJuVHlwZSB9IGZyb20gXCIuL0VsbUNvbXBvbmVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRWxtaXNoTWFwPFRQcm9wcywgVE1vZGVsLCBUTXNnIGV4dGVuZHMgTWVzc2FnZUJhc2U+IChwcm9wczogVFByb3BzLCBpbml0OiAocHJvcHM6IFRQcm9wcykgPT4gW1RNb2RlbCwgQ21kPFRNc2c+XSwgdXBkYXRlTWFwOiBVcGRhdGVNYXA8VFByb3BzLCBUTW9kZWwsIFRNc2c+LCBuYW1lOiBzdHJpbmcpOiBbVE1vZGVsLCBEaXNwYXRjaDxUTXNnPl0ge1xuICAgIGxldCByZWVudGVyZWQgPSBmYWxzZTtcbiAgICBjb25zdCBidWZmZXI6IFRNc2cgW10gPSBbXTtcbiAgICBsZXQgY3VycmVudE1vZGVsOiBQYXJ0aWFsPFRNb2RlbD4gPSB7fTtcblxuICAgIGNvbnN0IFttb2RlbCwgc2V0TW9kZWxdID0gdXNlU3RhdGU8TnVsbGFibGU8VE1vZGVsPj4obnVsbCk7XG4gICAgbGV0IGluaXRpYWxpemVkTW9kZWwgPSBtb2RlbDtcblxuICAgIGNvbnN0IGV4ZWNDbWQgPSB1c2VDYWxsYmFjaygoY21kOiBDbWQ8VE1zZz4pOiB2b2lkID0+IHtcbiAgICAgICAgY21kLmZvckVhY2goY2FsbCA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNhbGwoZGlzcGF0Y2gpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5lcnJvcihleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlQ2FsbGJhY2soKG1zZzogVE1zZyk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWluaXRpYWxpemVkTW9kZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsSGFzQ2hhbmdlZCA9ICh1cGRhdGVkTW9kZWw6IFBhcnRpYWw8VE1vZGVsPik6IGJvb2xlYW4gPT4gdXBkYXRlZE1vZGVsICE9PSBpbml0aWFsaXplZE1vZGVsICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHVwZGF0ZWRNb2RlbCkubGVuZ3RoID4gMDtcblxuICAgICAgICBpZiAoZGlzcGF0Y2hNaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICBkaXNwYXRjaE1pZGRsZXdhcmUobXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWVudGVyZWQpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKG1zZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWVudGVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBsZXQgbmV4dE1zZzogVE1zZyB8IHVuZGVmaW5lZCA9IG1zZztcbiAgICAgICAgICAgIGxldCBtb2RpZmllZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICB3aGlsZSAobmV4dE1zZykge1xuICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2U/LmluZm8oXCJFbG1cIiwgXCJtZXNzYWdlIGZyb21cIiwgbmFtZSwgbmV4dE1zZy5uYW1lKTtcbiAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5kZWJ1ZyhcIkVsbVwiLCBcIm1lc3NhZ2UgZnJvbVwiLCBuYW1lLCBuZXh0TXNnKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtuZXdNb2RlbCwgY21kXSA9IGNhbGxVcGRhdGVNYXAodXBkYXRlTWFwLCBuZXh0TXNnLCB7IC4uLmluaXRpYWxpemVkTW9kZWwsIC4uLmN1cnJlbnRNb2RlbCB9LCBwcm9wcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsSGFzQ2hhbmdlZChuZXdNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2RlbCA9IHsgLi4uY3VycmVudE1vZGVsLCAuLi5uZXdNb2RlbCB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjQ21kKGNtZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5lcnJvcihleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV4dE1zZyA9IGJ1ZmZlci5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVlbnRlcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChtb2RpZmllZCkge1xuICAgICAgICAgICAgICAgIHNldE1vZGVsKHByZXZNb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRNb2RlbCA9IHsgLi4ucHJldk1vZGVsIGFzIFRNb2RlbCwgLi4uY3VycmVudE1vZGVsIH07XG5cbiAgICAgICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZGVidWcoXCJFbG1cIiwgXCJ1cGRhdGUgbW9kZWwgZm9yXCIsIG5hbWUsIHVwZGF0ZWRNb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRNb2RlbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIGlmICghaW5pdGlhbGl6ZWRNb2RlbCkge1xuICAgICAgICBjb25zdCBbaW5pdE1vZGVsLCBpbml0Q21kXSA9IGluaXQocHJvcHMpO1xuXG4gICAgICAgIGluaXRpYWxpemVkTW9kZWwgPSBpbml0TW9kZWw7XG4gICAgICAgIHNldE1vZGVsKGluaXRpYWxpemVkTW9kZWwpO1xuXG4gICAgICAgIGV4ZWNDbWQoaW5pdENtZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtpbml0aWFsaXplZE1vZGVsLCBkaXNwYXRjaF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxsVXBkYXRlTWFwPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2VCYXNlPiAodXBkYXRlTWFwOiBVcGRhdGVNYXA8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPiwgbXNnOiBUTWVzc2FnZSwgbW9kZWw6IFRNb2RlbCwgcHJvcHM6IFRQcm9wcyk6IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTWVzc2FnZT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFdlIGtub3cgdGhhdCBuZXh0TXNnIGZpdHNcbiAgICByZXR1cm4gdXBkYXRlTWFwW21zZy5uYW1lIGFzIFRNZXNzYWdlW1wibmFtZVwiXV0obXNnLCBtb2RlbCwgcHJvcHMpO1xufSJdfQ==
package/package.json CHANGED
@@ -1,35 +1,37 @@
1
1
  {
2
2
  "name": "react-elmish",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "Elmish for React using Typescript",
5
5
  "author": "atheck",
6
6
  "license": "MIT",
7
- "dependencies": {},
8
7
  "peerDependencies": {
9
8
  "react": ">=16.8.0"
10
9
  },
11
10
  "devDependencies": {
12
- "@babel/cli": "7.16.8",
13
- "@babel/core": "7.16.12",
11
+ "@babel/cli": "7.17.6",
12
+ "@babel/core": "7.17.8",
14
13
  "@babel/plugin-proposal-class-properties": "7.16.7",
15
14
  "@babel/preset-env": "7.16.11",
16
15
  "@babel/preset-react": "7.16.7",
17
16
  "@babel/preset-typescript": "7.16.7",
18
- "@types/jest": "27.4.0",
19
- "@types/react": "17.0.38",
20
- "eslint": "8.8.0",
21
- "eslint-config-heck": "1.3.1",
22
- "jest": "27.4.7",
23
- "ts-jest": "27.1.3",
24
- "typescript": "4.5.5"
17
+ "@testing-library/react": "12.1.4",
18
+ "@types/jest": "27.4.1",
19
+ "@types/react": "17.0.43",
20
+ "eslint": "8.12.0",
21
+ "eslint-config-heck": "1.5.2",
22
+ "jest": "27.5.1",
23
+ "semantic-release": "19.0.2",
24
+ "ts-jest": "27.1.4",
25
+ "typescript": "4.6.3"
25
26
  },
26
27
  "scripts": {
27
28
  "build": "npm run build:types && npm run build:js",
28
29
  "build:types": "tsc --emitDeclarationOnly --project ./src",
29
30
  "build:js": "babel src --out-dir dist --extensions \".ts,.tsx\" --source-maps inline",
30
- "test": "jest",
31
- "test:watch": "jest --watch",
32
- "lint": "npx eslint --ext .ts,.tsx ./src"
31
+ "test": "jest --coverage",
32
+ "test:watch": "jest --watch --coverage",
33
+ "lint": "npx eslint --ext .ts,.tsx ./src",
34
+ "semantic-release": "semantic-release"
33
35
  },
34
36
  "homepage": "https://github.com/atheck/react-elmish",
35
37
  "repository": {
@@ -1,41 +0,0 @@
1
- name: Build
2
-
3
- on:
4
- push:
5
- branches: [ main ]
6
- pull_request:
7
- branches: [ main ]
8
-
9
- # Allows you to run this workflow manually from the Actions tab
10
- workflow_dispatch:
11
-
12
- jobs:
13
- test:
14
- runs-on: ubuntu-latest
15
- steps:
16
- - name: Checkout
17
- uses: actions/checkout@v2
18
- - name: SetupNode
19
- uses: actions/setup-node@v2
20
- with:
21
- node-version: 14
22
- - name: Test
23
- run: |
24
- npm install
25
- npm run lint
26
- npm run test
27
-
28
- build:
29
- needs: test
30
- runs-on: ubuntu-latest
31
- steps:
32
- - name: Checkout
33
- uses: actions/checkout@v2
34
- - name: SetupNode
35
- uses: actions/setup-node@v2
36
- with:
37
- node-version: 14
38
- - name: Build
39
- run: |
40
- npm ci
41
- npm run build
package/dist/Hooks.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import { Cmd, Dispatch } from "./Cmd";
2
- import { UpdateReturnType } from ".";
3
- export declare function useElmish<TProps, TModel, TMsg extends {
4
- name: string | symbol;
5
- }>(props: TProps, init: (props: TProps) => [TModel, Cmd<TMsg>], update: (model: TModel, msg: TMsg, props: TProps) => UpdateReturnType<TModel, TMsg>, name: string): [TModel, Dispatch<TMsg>];
package/dist/Hooks.js DELETED
@@ -1,119 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useElmish = useElmish;
7
-
8
- var _Init = require("./Init");
9
-
10
- var _react = require("react");
11
-
12
- 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; }
13
-
14
- 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; }
15
-
16
- 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; }
17
-
18
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
19
-
20
- 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."); }
21
-
22
- 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); }
23
-
24
- 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; }
25
-
26
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
27
-
28
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
29
-
30
- function useElmish(props, init, update, name) {
31
- var reentered = false;
32
- var buffer = [];
33
- var currentModel = {};
34
- var state = (0, _react.useState)(null);
35
- var model = state[0];
36
- var setModel = state[1];
37
-
38
- var execCmd = function execCmd(cmd) {
39
- cmd.forEach(function (call) {
40
- try {
41
- call(dispatch);
42
- } catch (ex) {
43
- _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.error(ex);
44
- }
45
- });
46
- };
47
-
48
- var dispatch = function dispatch(msg) {
49
- if (!model) {
50
- return;
51
- }
52
-
53
- var modelHasChanged = function modelHasChanged(updatedModel) {
54
- return updatedModel !== model && Object.getOwnPropertyNames(updatedModel).length > 0;
55
- };
56
-
57
- if (_Init.dispatchMiddleware) {
58
- (0, _Init.dispatchMiddleware)(msg);
59
- }
60
-
61
- if (reentered) {
62
- buffer.push(msg);
63
- } else {
64
- reentered = true;
65
- var nextMsg = msg;
66
- var modified = false;
67
-
68
- while (nextMsg) {
69
- _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.info("Elm", "message from", name, nextMsg.name);
70
- _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.debug("Elm", "message from", name, nextMsg);
71
-
72
- try {
73
- var _update = update(_objectSpread(_objectSpread({}, model), currentModel), nextMsg, props),
74
- _update2 = _slicedToArray(_update, 2),
75
- newModel = _update2[0],
76
- cmd = _update2[1];
77
-
78
- if (modelHasChanged(newModel)) {
79
- currentModel = _objectSpread(_objectSpread({}, currentModel), newModel);
80
- modified = true;
81
- }
82
-
83
- if (cmd) {
84
- execCmd(cmd);
85
- }
86
- } catch (ex) {
87
- _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.error(ex);
88
- }
89
-
90
- nextMsg = buffer.shift();
91
- }
92
-
93
- reentered = false;
94
-
95
- if (modified) {
96
- setModel(function (prevModel) {
97
- var updatedModel = _objectSpread(_objectSpread({}, prevModel), currentModel);
98
-
99
- _Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.debug("Elm", "update model for", name, updatedModel);
100
- return updatedModel;
101
- });
102
- }
103
- }
104
- };
105
-
106
- if (!model) {
107
- var _init = init(props),
108
- _init2 = _slicedToArray(_init, 2),
109
- initModel = _init2[0],
110
- initCmd = _init2[1];
111
-
112
- model = initModel;
113
- setModel(model);
114
- execCmd(initCmd);
115
- }
116
-
117
- return [model, dispatch];
118
- }
119
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Ib29rcy50cyJdLCJuYW1lcyI6WyJ1c2VFbG1pc2giLCJwcm9wcyIsImluaXQiLCJ1cGRhdGUiLCJuYW1lIiwicmVlbnRlcmVkIiwiYnVmZmVyIiwiY3VycmVudE1vZGVsIiwic3RhdGUiLCJtb2RlbCIsInNldE1vZGVsIiwiZXhlY0NtZCIsImNtZCIsImZvckVhY2giLCJjYWxsIiwiZGlzcGF0Y2giLCJleCIsIkxvZ2dlclNlcnZpY2UiLCJlcnJvciIsIm1zZyIsIm1vZGVsSGFzQ2hhbmdlZCIsInVwZGF0ZWRNb2RlbCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW5ndGgiLCJkaXNwYXRjaE1pZGRsZXdhcmUiLCJwdXNoIiwibmV4dE1zZyIsIm1vZGlmaWVkIiwiaW5mbyIsImRlYnVnIiwibmV3TW9kZWwiLCJzaGlmdCIsInByZXZNb2RlbCIsImluaXRNb2RlbCIsImluaXRDbWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxTQUFULENBQTRFQyxLQUE1RSxFQUEyRkMsSUFBM0YsRUFBeUlDLE1BQXpJLEVBQThOQyxJQUE5TixFQUFzUTtBQUN6USxNQUFJQyxTQUFTLEdBQUcsS0FBaEI7QUFDQSxNQUFNQyxNQUFlLEdBQUcsRUFBeEI7QUFDQSxNQUFJQyxZQUE2QixHQUFHLEVBQXBDO0FBRUEsTUFBTUMsS0FBSyxHQUFHLHFCQUEyQixJQUEzQixDQUFkO0FBQ0EsTUFBSUMsS0FBSyxHQUFHRCxLQUFLLENBQUMsQ0FBRCxDQUFqQjtBQUNBLE1BQU1FLFFBQVEsR0FBR0YsS0FBSyxDQUFDLENBQUQsQ0FBdEI7O0FBRUEsTUFBTUcsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBQ0MsR0FBRCxFQUEwQjtBQUN0Q0EsSUFBQUEsR0FBRyxDQUFDQyxPQUFKLENBQVksVUFBQUMsSUFBSSxFQUFJO0FBQ2hCLFVBQUk7QUFDQUEsUUFBQUEsSUFBSSxDQUFDQyxRQUFELENBQUo7QUFDSCxPQUZELENBRUUsT0FBT0MsRUFBUCxFQUFvQjtBQUNsQkMsc0dBQWVDLEtBQWYsQ0FBcUJGLEVBQXJCO0FBQ0g7QUFDSixLQU5EO0FBT0gsR0FSRDs7QUFVQSxNQUFNRCxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFDSSxHQUFELEVBQXFCO0FBQ2xDLFFBQUksQ0FBQ1YsS0FBTCxFQUFZO0FBQ1I7QUFDSDs7QUFFRCxRQUFNVyxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUNDLFlBQUQ7QUFBQSxhQUE0Q0EsWUFBWSxLQUFLWixLQUFqQixJQUEwQmEsTUFBTSxDQUFDQyxtQkFBUCxDQUEyQkYsWUFBM0IsRUFBeUNHLE1BQXpDLEdBQWtELENBQXhIO0FBQUEsS0FBeEI7O0FBRUEsUUFBSUMsd0JBQUosRUFBd0I7QUFDcEIsb0NBQW1CTixHQUFuQjtBQUNIOztBQUVELFFBQUlkLFNBQUosRUFBZTtBQUNYQyxNQUFBQSxNQUFNLENBQUNvQixJQUFQLENBQVlQLEdBQVo7QUFDSCxLQUZELE1BRU87QUFDSGQsTUFBQUEsU0FBUyxHQUFHLElBQVo7QUFFQSxVQUFJc0IsT0FBeUIsR0FBR1IsR0FBaEM7QUFDQSxVQUFJUyxRQUFRLEdBQUcsS0FBZjs7QUFFQSxhQUFPRCxPQUFQLEVBQWdCO0FBQ1pWLHNHQUFlWSxJQUFmLENBQW9CLEtBQXBCLEVBQTJCLGNBQTNCLEVBQTJDekIsSUFBM0MsRUFBaUR1QixPQUFPLENBQUN2QixJQUF6RDtBQUNBYSxzR0FBZWEsS0FBZixDQUFxQixLQUFyQixFQUE0QixjQUE1QixFQUE0QzFCLElBQTVDLEVBQWtEdUIsT0FBbEQ7O0FBRUEsWUFBSTtBQUNBLHdCQUF3QnhCLE1BQU0saUNBQU1NLEtBQU4sR0FBZ0JGLFlBQWhCLEdBQWdDb0IsT0FBaEMsRUFBeUMxQixLQUF6QyxDQUE5QjtBQUFBO0FBQUEsY0FBTzhCLFFBQVA7QUFBQSxjQUFpQm5CLEdBQWpCOztBQUVBLGNBQUlRLGVBQWUsQ0FBQ1csUUFBRCxDQUFuQixFQUErQjtBQUMzQnhCLFlBQUFBLFlBQVksbUNBQVFBLFlBQVIsR0FBeUJ3QixRQUF6QixDQUFaO0FBRUFILFlBQUFBLFFBQVEsR0FBRyxJQUFYO0FBQ0g7O0FBRUQsY0FBSWhCLEdBQUosRUFBUztBQUNMRCxZQUFBQSxPQUFPLENBQUNDLEdBQUQsQ0FBUDtBQUNIO0FBQ0osU0FaRCxDQVlFLE9BQU9JLEVBQVAsRUFBb0I7QUFDbEJDLHdHQUFlQyxLQUFmLENBQXFCRixFQUFyQjtBQUNIOztBQUVEVyxRQUFBQSxPQUFPLEdBQUdyQixNQUFNLENBQUMwQixLQUFQLEVBQVY7QUFDSDs7QUFDRDNCLE1BQUFBLFNBQVMsR0FBRyxLQUFaOztBQUVBLFVBQUl1QixRQUFKLEVBQWM7QUFDVmxCLFFBQUFBLFFBQVEsQ0FBQyxVQUFBdUIsU0FBUyxFQUFJO0FBQ2xCLGNBQU1aLFlBQVksbUNBQVFZLFNBQVIsR0FBZ0MxQixZQUFoQyxDQUFsQjs7QUFFQVUsd0dBQWVhLEtBQWYsQ0FBcUIsS0FBckIsRUFBNEIsa0JBQTVCLEVBQWdEMUIsSUFBaEQsRUFBc0RpQixZQUF0RDtBQUVBLGlCQUFPQSxZQUFQO0FBQ0gsU0FOTyxDQUFSO0FBT0g7QUFDSjtBQUNKLEdBckREOztBQXVEQSxNQUFJLENBQUNaLEtBQUwsRUFBWTtBQUNSLGdCQUE2QlAsSUFBSSxDQUFDRCxLQUFELENBQWpDO0FBQUE7QUFBQSxRQUFPaUMsU0FBUDtBQUFBLFFBQWtCQyxPQUFsQjs7QUFFQTFCLElBQUFBLEtBQUssR0FBR3lCLFNBQVI7QUFDQXhCLElBQUFBLFFBQVEsQ0FBQ0QsS0FBRCxDQUFSO0FBRUFFLElBQUFBLE9BQU8sQ0FBQ3dCLE9BQUQsQ0FBUDtBQUNIOztBQUVELFNBQU8sQ0FBQzFCLEtBQUQsRUFBUU0sUUFBUixDQUFQO0FBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbWQsIERpc3BhdGNoIH0gZnJvbSBcIi4vQ21kXCI7XG5pbXBvcnQgeyBkaXNwYXRjaE1pZGRsZXdhcmUsIExvZ2dlclNlcnZpY2UgfSBmcm9tIFwiLi9Jbml0XCI7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gXCIuL0VsbVV0aWxpdGllc1wiO1xuaW1wb3J0IHsgVXBkYXRlUmV0dXJuVHlwZSB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRWxtaXNoPFRQcm9wcywgVE1vZGVsLCBUTXNnIGV4dGVuZHMgeyBuYW1lOiBzdHJpbmcgfCBzeW1ib2wgfT4gKHByb3BzOiBUUHJvcHMsIGluaXQ6IChwcm9wczogVFByb3BzKSA9PiBbVE1vZGVsLCBDbWQ8VE1zZz5dLCB1cGRhdGU6IChtb2RlbDogVE1vZGVsLCBtc2c6IFRNc2csIHByb3BzOiBUUHJvcHMpID0+IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTXNnPiwgbmFtZTogc3RyaW5nKTogW1RNb2RlbCwgRGlzcGF0Y2g8VE1zZz5dIHtcbiAgICBsZXQgcmVlbnRlcmVkID0gZmFsc2U7XG4gICAgY29uc3QgYnVmZmVyOiBUTXNnIFtdID0gW107XG4gICAgbGV0IGN1cnJlbnRNb2RlbDogUGFydGlhbDxUTW9kZWw+ID0ge307XG5cbiAgICBjb25zdCBzdGF0ZSA9IHVzZVN0YXRlPE51bGxhYmxlPFRNb2RlbD4+KG51bGwpO1xuICAgIGxldCBtb2RlbCA9IHN0YXRlWzBdO1xuICAgIGNvbnN0IHNldE1vZGVsID0gc3RhdGVbMV07XG5cbiAgICBjb25zdCBleGVjQ21kID0gKGNtZDogQ21kPFRNc2c+KTogdm9pZCA9PiB7XG4gICAgICAgIGNtZC5mb3JFYWNoKGNhbGwgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjYWxsKGRpc3BhdGNoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4OiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZXJyb3IoZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGlzcGF0Y2ggPSAobXNnOiBUTXNnKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghbW9kZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsSGFzQ2hhbmdlZCA9ICh1cGRhdGVkTW9kZWw6IFBhcnRpYWw8VE1vZGVsPik6IGJvb2xlYW4gPT4gdXBkYXRlZE1vZGVsICE9PSBtb2RlbCAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh1cGRhdGVkTW9kZWwpLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgaWYgKGRpc3BhdGNoTWlkZGxld2FyZSkge1xuICAgICAgICAgICAgZGlzcGF0Y2hNaWRkbGV3YXJlKG1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVlbnRlcmVkKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChtc2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVlbnRlcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgbGV0IG5leHRNc2c6IFRNc2cgfCB1bmRlZmluZWQgPSBtc2c7XG4gICAgICAgICAgICBsZXQgbW9kaWZpZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgd2hpbGUgKG5leHRNc2cpIHtcbiAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5pbmZvKFwiRWxtXCIsIFwibWVzc2FnZSBmcm9tXCIsIG5hbWUsIG5leHRNc2cubmFtZSk7XG4gICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZGVidWcoXCJFbG1cIiwgXCJtZXNzYWdlIGZyb21cIiwgbmFtZSwgbmV4dE1zZyk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbmV3TW9kZWwsIGNtZF0gPSB1cGRhdGUoeyAuLi5tb2RlbCwgLi4uY3VycmVudE1vZGVsIH0sIG5leHRNc2csIHByb3BzKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZWxIYXNDaGFuZ2VkKG5ld01vZGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vZGVsID0geyAuLi5jdXJyZW50TW9kZWwsIC4uLm5ld01vZGVsIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNDbWQoY21kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4OiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2U/LmVycm9yKGV4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXh0TXNnID0gYnVmZmVyLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWVudGVyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKG1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgc2V0TW9kZWwocHJldk1vZGVsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZE1vZGVsID0geyAuLi5wcmV2TW9kZWwgYXMgVE1vZGVsLCAuLi5jdXJyZW50TW9kZWwgfTtcblxuICAgICAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5kZWJ1ZyhcIkVsbVwiLCBcInVwZGF0ZSBtb2RlbCBmb3JcIiwgbmFtZSwgdXBkYXRlZE1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZE1vZGVsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGlmICghbW9kZWwpIHtcbiAgICAgICAgY29uc3QgW2luaXRNb2RlbCwgaW5pdENtZF0gPSBpbml0KHByb3BzKTtcblxuICAgICAgICBtb2RlbCA9IGluaXRNb2RlbDtcbiAgICAgICAgc2V0TW9kZWwobW9kZWwpO1xuXG4gICAgICAgIGV4ZWNDbWQoaW5pdENtZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFttb2RlbCwgZGlzcGF0Y2hdO1xufSJdfQ==