react-elmish 4.2.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,164 +1,46 @@
1
1
  "use strict";
2
2
 
3
- 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); }
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
- exports.createUpdateArgsFactory = createUpdateArgsFactory;
9
- exports.execCmd = execCmd;
10
- exports.getOfMsgParams = getOfMsgParams;
11
- exports.getUpdateFn = getUpdateFn;
12
- exports.renderWithModel = renderWithModel;
13
-
14
- var _fakeOptions = require("./fakeOptions");
15
-
16
- var _useElmish = require("../useElmish");
17
-
18
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
19
-
20
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
-
22
- 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; }
23
-
24
- 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; }
25
-
26
- 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); } }
27
-
28
- 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); }); }; }
29
-
30
- /**
31
- * Extracts the messages out of a command.
32
- * @param cmd The command to process.
33
- * @returns The array of messages.
34
- */
35
- function getOfMsgParams(cmd) {
36
- var msgNames = [];
37
-
38
- var dispatch = function dispatch(msg) {
39
- msgNames.push(msg);
40
- };
41
-
42
- cmd === null || cmd === void 0 ? void 0 : cmd.map(function (currentCmd) {
43
- return currentCmd(dispatch);
44
- });
45
- return msgNames;
46
- }
47
- /**
48
- * Executes all commands and resolves the messages.
49
- * @param cmd The command to process.
50
- * @returns The array of processed messages.
51
- */
52
-
53
-
54
- function execCmd(_x) {
55
- return _execCmd.apply(this, arguments);
56
- }
57
- /**
58
- * Creates an update function out of an UpdateMap.
59
- * @param {UpdateMap<TProps, TModel, TMessage>} updateMap The UpdateMap.
60
- * @returns {(msg: TMessage, model: TModel, props: TProps) => UpdateReturnType<TModel, TMessage>} The created update function which can be used in tests.
61
- */
62
-
63
-
64
- function _execCmd() {
65
- _execCmd = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(cmd) {
66
- var callers, results;
67
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
68
- while (1) {
69
- switch (_context2.prev = _context2.next) {
70
- case 0:
71
- if (cmd) {
72
- _context2.next = 2;
73
- break;
74
- }
75
-
76
- return _context2.abrupt("return", []);
77
-
78
- case 2:
79
- callers = cmd.map( /*#__PURE__*/function () {
80
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(currentCmd) {
81
- return _regeneratorRuntime().wrap(function _callee$(_context) {
82
- while (1) {
83
- switch (_context.prev = _context.next) {
84
- case 0:
85
- return _context.abrupt("return", new Promise(function (resolve, reject) {
86
- var dispatch = function dispatch(msg) {
87
- return resolve(msg);
88
- };
89
-
90
- currentCmd(dispatch, function (error) {
91
- if (error) {
92
- reject(error);
93
- } else {
94
- resolve(null);
95
- }
96
- });
97
- }));
98
-
99
- case 1:
100
- case "end":
101
- return _context.stop();
102
- }
103
- }
104
- }, _callee);
105
- }));
106
-
107
- return function (_x2) {
108
- return _ref.apply(this, arguments);
109
- };
110
- }());
111
- _context2.next = 5;
112
- return Promise.all(callers);
113
-
114
- case 5:
115
- results = _context2.sent;
116
- return _context2.abrupt("return", results);
6
+ Object.defineProperty(exports, "createUpdateArgsFactory", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _createUpdateArgsFactory.createUpdateArgsFactory;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "execCmd", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _execCmd.execCmd;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "getOfMsgParams", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _getOfMsgParams.getOfMsgParams;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "getUpdateFn", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _getUpdateFn.getUpdateFn;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "renderWithModel", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _renderWithModel.renderWithModel;
34
+ }
35
+ });
117
36
 
118
- case 7:
119
- case "end":
120
- return _context2.stop();
121
- }
122
- }
123
- }, _callee2);
124
- }));
125
- return _execCmd.apply(this, arguments);
126
- }
37
+ var _createUpdateArgsFactory = require("./createUpdateArgsFactory");
127
38
 
128
- function getUpdateFn(updateMap) {
129
- return function (msg, model, props) {
130
- return (0, _useElmish.callUpdateMap)(updateMap, msg, model, props);
131
- };
132
- }
39
+ var _execCmd = require("./execCmd");
133
40
 
134
- /**
135
- * Creates a factory function to create a message, a model, and props which can be passed to an update function in tests.
136
- * @param {() => TModel} initModel A function to create an initial model.
137
- * @param {() => TProps} initProps A function to create initial props.
138
- * @returns {UpdateArgsFactory<TProps, TModel, TMessage>} A function to create a message, a model, and props.
139
- * @example
140
- * // one time
141
- * const createUpdateArgs = createUpdateArgsFactory(() => ({ ... }), () => ({ ... }));
142
- * // in tests
143
- * const [msg, model, props] = createUpdateArgs(Msg.myMessage(), { ... }, , { ... });
144
- */
145
- function createUpdateArgsFactory(initModel, initProps) {
146
- return function (msg, modelTemplate, propsTemplate) {
147
- return [msg, _objectSpread(_objectSpread({}, initModel()), modelTemplate), _objectSpread(_objectSpread({}, initProps()), propsTemplate)];
148
- };
149
- }
41
+ var _getOfMsgParams = require("./getOfMsgParams");
150
42
 
151
- function renderWithModel(render, options) {
152
- if ("model" in options && "dispatch" in options) {
153
- (0, _fakeOptions.setFakeOptions)(options);
154
- } else {
155
- (0, _fakeOptions.setFakeOptions)({
156
- model: options
157
- });
158
- }
43
+ var _getUpdateFn = require("./getUpdateFn");
159
44
 
160
- var result = render();
161
- (0, _fakeOptions.setFakeOptions)(null);
162
- return result;
163
- }
164
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRPZk1zZ1BhcmFtcyIsImNtZCIsIm1zZ05hbWVzIiwiZGlzcGF0Y2giLCJtc2ciLCJwdXNoIiwibWFwIiwiY3VycmVudENtZCIsImV4ZWNDbWQiLCJjYWxsZXJzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJlcnJvciIsImFsbCIsInJlc3VsdHMiLCJnZXRVcGRhdGVGbiIsInVwZGF0ZU1hcCIsIm1vZGVsIiwicHJvcHMiLCJjYWxsVXBkYXRlTWFwIiwiY3JlYXRlVXBkYXRlQXJnc0ZhY3RvcnkiLCJpbml0TW9kZWwiLCJpbml0UHJvcHMiLCJtb2RlbFRlbXBsYXRlIiwicHJvcHNUZW1wbGF0ZSIsInJlbmRlcldpdGhNb2RlbCIsInJlbmRlciIsIm9wdGlvbnMiLCJzZXRGYWtlT3B0aW9ucyIsInJlc3VsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9UZXN0aW5nL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lc3NhZ2VCYXNlLCBOdWxsYWJsZSwgVXBkYXRlTWFwLCBVcGRhdGVSZXR1cm5UeXBlIH0gZnJvbSBcIi4uL1R5cGVzXCI7XG5pbXBvcnQgeyBSZW5kZXJXaXRoTW9kZWxPcHRpb25zLCBzZXRGYWtlT3B0aW9ucyB9IGZyb20gXCIuL2Zha2VPcHRpb25zXCI7XG5pbXBvcnQgeyBjYWxsVXBkYXRlTWFwIH0gZnJvbSBcIi4uL3VzZUVsbWlzaFwiO1xuaW1wb3J0IHsgQ21kIH0gZnJvbSBcIi4uL0NtZFwiO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBtZXNzYWdlcyBvdXQgb2YgYSBjb21tYW5kLlxuICogQHBhcmFtIGNtZCBUaGUgY29tbWFuZCB0byBwcm9jZXNzLlxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBnZXRPZk1zZ1BhcmFtczxUTXNnPiAoY21kPzogQ21kPFRNc2c+KTogVE1zZyBbXSB7XG4gICAgY29uc3QgbXNnTmFtZXM6IFRNc2cgW10gPSBbXTtcblxuICAgIGNvbnN0IGRpc3BhdGNoID0gKG1zZzogVE1zZyk6IHZvaWQgPT4ge1xuICAgICAgICBtc2dOYW1lcy5wdXNoKG1zZyk7XG4gICAgfTtcblxuICAgIGNtZD8ubWFwKGN1cnJlbnRDbWQgPT4gY3VycmVudENtZChkaXNwYXRjaCkpO1xuXG4gICAgcmV0dXJuIG1zZ05hbWVzO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGFsbCBjb21tYW5kcyBhbmQgcmVzb2x2ZXMgdGhlIG1lc3NhZ2VzLlxuICogQHBhcmFtIGNtZCBUaGUgY29tbWFuZCB0byBwcm9jZXNzLlxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIHByb2Nlc3NlZCBtZXNzYWdlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY0NtZDxUTXNnPiAoY21kPzogQ21kPFRNc2c+KTogUHJvbWlzZTxOdWxsYWJsZTxUTXNnPiBbXT4ge1xuICAgIGlmICghY21kKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBjYWxsZXJzID0gY21kLm1hcChhc3luYyBjdXJyZW50Q21kID0+IG5ldyBQcm9taXNlPE51bGxhYmxlPFRNc2c+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoID0gKG1zZzogVE1zZyk6IHZvaWQgPT4gcmVzb2x2ZShtc2cpO1xuXG4gICAgICAgIGN1cnJlbnRDbWQoZGlzcGF0Y2gsIGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pKTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjYWxsZXJzKTtcblxuICAgIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gdXBkYXRlIGZ1bmN0aW9uIG91dCBvZiBhbiBVcGRhdGVNYXAuXG4gKiBAcGFyYW0ge1VwZGF0ZU1hcDxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+fSB1cGRhdGVNYXAgVGhlIFVwZGF0ZU1hcC5cbiAqIEByZXR1cm5zIHsobXNnOiBUTWVzc2FnZSwgbW9kZWw6IFRNb2RlbCwgcHJvcHM6IFRQcm9wcykgPT4gVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNZXNzYWdlPn0gVGhlIGNyZWF0ZWQgdXBkYXRlIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRlc3RzLlxuICovXG5mdW5jdGlvbiBnZXRVcGRhdGVGbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gKHVwZGF0ZU1hcDogVXBkYXRlTWFwPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4pOiAobXNnOiBUTWVzc2FnZSwgbW9kZWw6IFRNb2RlbCwgcHJvcHM6IFRQcm9wcykgPT4gVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNZXNzYWdlPiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtc2c6IFRNZXNzYWdlLCBtb2RlbDogVE1vZGVsLCBwcm9wczogVFByb3BzKTogVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNZXNzYWdlPiB7XG4gICAgICAgIHJldHVybiBjYWxsVXBkYXRlTWFwKHVwZGF0ZU1hcCwgbXNnLCBtb2RlbCwgcHJvcHMpO1xuICAgIH07XG59XG5cbnR5cGUgVXBkYXRlQXJnc0ZhY3Rvcnk8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZUJhc2U+ID0gKG1zZzogVE1lc3NhZ2UsIG1vZGVsVGVtcGxhdGU/OiBQYXJ0aWFsPFRNb2RlbD4sIHByb3BzVGVtcGxhdGU/OiBQYXJ0aWFsPFRQcm9wcz4pID0+IFtUTWVzc2FnZSwgVE1vZGVsLCBUUHJvcHNdO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG1lc3NhZ2UsIGEgbW9kZWwsIGFuZCBwcm9wcyB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIGFuIHVwZGF0ZSBmdW5jdGlvbiBpbiB0ZXN0cy5cbiAqIEBwYXJhbSB7KCkgPT4gVE1vZGVsfSBpbml0TW9kZWwgQSBmdW5jdGlvbiB0byBjcmVhdGUgYW4gaW5pdGlhbCBtb2RlbC5cbiAqIEBwYXJhbSB7KCkgPT4gVFByb3BzfSBpbml0UHJvcHMgQSBmdW5jdGlvbiB0byBjcmVhdGUgaW5pdGlhbCBwcm9wcy5cbiAqIEByZXR1cm5zIHtVcGRhdGVBcmdzRmFjdG9yeTxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+fSBBIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG1lc3NhZ2UsIGEgbW9kZWwsIGFuZCBwcm9wcy5cbiAqIEBleGFtcGxlXG4gKiAvLyBvbmUgdGltZVxuICogY29uc3QgY3JlYXRlVXBkYXRlQXJncyA9IGNyZWF0ZVVwZGF0ZUFyZ3NGYWN0b3J5KCgpID0+ICh7IC4uLiB9KSwgKCkgPT4gKHsgLi4uIH0pKTtcbiAqIC8vIGluIHRlc3RzXG4gKiBjb25zdCBbbXNnLCBtb2RlbCwgcHJvcHNdID0gY3JlYXRlVXBkYXRlQXJncyhNc2cubXlNZXNzYWdlKCksIHsgLi4uIH0sICwgeyAuLi4gfSk7XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZUFyZ3NGYWN0b3J5IDxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gKGluaXRNb2RlbDogKCkgPT4gVE1vZGVsLCBpbml0UHJvcHM6ICgpID0+IFRQcm9wcyk6IFVwZGF0ZUFyZ3NGYWN0b3J5PFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiAobXNnOiBUTWVzc2FnZSwgbW9kZWxUZW1wbGF0ZT86IFBhcnRpYWw8VE1vZGVsPiwgcHJvcHNUZW1wbGF0ZT86IFBhcnRpYWw8VFByb3BzPik6IFtUTWVzc2FnZSwgVE1vZGVsLCBUUHJvcHNdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG1zZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5pbml0TW9kZWwoKSxcbiAgICAgICAgICAgICAgICAuLi5tb2RlbFRlbXBsYXRlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5pbml0UHJvcHMoKSxcbiAgICAgICAgICAgICAgICAuLi5wcm9wc1RlbXBsYXRlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiByZW5kZXJXaXRoTW9kZWw8VE1vZGVsLCBUTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2VCYXNlLCBUUmVzdWx0PiAocmVuZGVyOiAoKSA9PiBUUmVzdWx0LCBvcHRpb25zOiBUTW9kZWwgfCBSZW5kZXJXaXRoTW9kZWxPcHRpb25zPFRNb2RlbCwgVE1lc3NhZ2U+KTogVFJlc3VsdCB7XG4gICAgaWYgKFwibW9kZWxcIiBpbiBvcHRpb25zICYmIFwiZGlzcGF0Y2hcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgIHNldEZha2VPcHRpb25zKG9wdGlvbnMgYXMgUmVuZGVyV2l0aE1vZGVsT3B0aW9uczx1bmtub3duLCBNZXNzYWdlQmFzZT4pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEZha2VPcHRpb25zKHtcbiAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXIoKTtcblxuICAgIHNldEZha2VPcHRpb25zKG51bGwpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHR5cGUge1xuICAgIFVwZGF0ZUFyZ3NGYWN0b3J5LFxuICAgIFJlbmRlcldpdGhNb2RlbE9wdGlvbnMsXG59O1xuXG5leHBvcnQge1xuICAgIGdldE9mTXNnUGFyYW1zLFxuICAgIGV4ZWNDbWQsXG4gICAgZ2V0VXBkYXRlRm4sXG4gICAgY3JlYXRlVXBkYXRlQXJnc0ZhY3RvcnksXG4gICAgcmVuZGVyV2l0aE1vZGVsLFxufTsiXSwibWFw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
45
+ var _renderWithModel = require("./renderWithModel");
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1Rlc3RpbmcvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlVXBkYXRlQXJnc0ZhY3RvcnksIFVwZGF0ZUFyZ3NGYWN0b3J5IH0gZnJvbSBcIi4vY3JlYXRlVXBkYXRlQXJnc0ZhY3RvcnlcIjtcbmltcG9ydCB7IGV4ZWNDbWQgfSBmcm9tIFwiLi9leGVjQ21kXCI7XG5pbXBvcnQgeyBSZW5kZXJXaXRoTW9kZWxPcHRpb25zIH0gZnJvbSBcIi4vZmFrZU9wdGlvbnNcIjtcbmltcG9ydCB7IGdldE9mTXNnUGFyYW1zIH0gZnJvbSBcIi4vZ2V0T2ZNc2dQYXJhbXNcIjtcbmltcG9ydCB7IGdldFVwZGF0ZUZuIH0gZnJvbSBcIi4vZ2V0VXBkYXRlRm5cIjtcbmltcG9ydCB7IHJlbmRlcldpdGhNb2RlbCB9IGZyb20gXCIuL3JlbmRlcldpdGhNb2RlbFwiO1xuXG5leHBvcnQgdHlwZSB7XG4gICAgVXBkYXRlQXJnc0ZhY3RvcnksXG4gICAgUmVuZGVyV2l0aE1vZGVsT3B0aW9ucyxcbn07XG5cbmV4cG9ydCB7XG4gICAgZ2V0T2ZNc2dQYXJhbXMsXG4gICAgZXhlY0NtZCxcbiAgICBnZXRVcGRhdGVGbixcbiAgICBjcmVhdGVVcGRhdGVBcmdzRmFjdG9yeSxcbiAgICByZW5kZXJXaXRoTW9kZWwsXG59OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0EifQ==
@@ -0,0 +1,13 @@
1
+ import { MessageBase } from "../Types";
2
+ import { RenderWithModelOptions } from "./fakeOptions";
3
+ /**
4
+ * Renders a component with a provided model.
5
+ * @template TModel The type of the model.
6
+ * @template TMessage The type of the message discriminated union.
7
+ * @template TResult The return type of the render function.
8
+ * @param {() => TResult} render A function to render the component. Use the `render` function of the used testing library.
9
+ * @param {(TModel | RenderWithModelOptions<TModel, TMessage>)} options The model or an options object.
10
+ * @returns {TResult} The returned value of the `render` function.
11
+ */
12
+ declare function renderWithModel<TModel, TMessage extends MessageBase, TResult>(render: () => TResult, options: TModel | RenderWithModelOptions<TModel, TMessage>): TResult;
13
+ export { renderWithModel, };
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.renderWithModel = renderWithModel;
7
+
8
+ var _fakeOptions = require("./fakeOptions");
9
+
10
+ /**
11
+ * Renders a component with a provided model.
12
+ * @template TModel The type of the model.
13
+ * @template TMessage The type of the message discriminated union.
14
+ * @template TResult The return type of the render function.
15
+ * @param {() => TResult} render A function to render the component. Use the `render` function of the used testing library.
16
+ * @param {(TModel | RenderWithModelOptions<TModel, TMessage>)} options The model or an options object.
17
+ * @returns {TResult} The returned value of the `render` function.
18
+ */
19
+ function renderWithModel(render, options) {
20
+ if ("model" in options && "dispatch" in options) {
21
+ (0, _fakeOptions.setFakeOptions)(options);
22
+ } else {
23
+ (0, _fakeOptions.setFakeOptions)({
24
+ model: options
25
+ });
26
+ }
27
+
28
+ var result = render();
29
+ (0, _fakeOptions.setFakeOptions)(null);
30
+ return result;
31
+ }
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZW5kZXJXaXRoTW9kZWwiLCJyZW5kZXIiLCJvcHRpb25zIiwic2V0RmFrZU9wdGlvbnMiLCJtb2RlbCIsInJlc3VsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9UZXN0aW5nL3JlbmRlcldpdGhNb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlQmFzZSB9IGZyb20gXCIuLi9UeXBlc1wiO1xuaW1wb3J0IHsgUmVuZGVyV2l0aE1vZGVsT3B0aW9ucywgc2V0RmFrZU9wdGlvbnMgfSBmcm9tIFwiLi9mYWtlT3B0aW9uc1wiO1xuXG4vKipcbiAqIFJlbmRlcnMgYSBjb21wb25lbnQgd2l0aCBhIHByb3ZpZGVkIG1vZGVsLlxuICogQHRlbXBsYXRlIFRNb2RlbCBUaGUgdHlwZSBvZiB0aGUgbW9kZWwuXG4gKiBAdGVtcGxhdGUgVE1lc3NhZ2UgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UgZGlzY3JpbWluYXRlZCB1bmlvbi5cbiAqIEB0ZW1wbGF0ZSBUUmVzdWx0IFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgcmVuZGVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsoKSA9PiBUUmVzdWx0fSByZW5kZXIgQSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIGNvbXBvbmVudC4gVXNlIHRoZSBgcmVuZGVyYCBmdW5jdGlvbiBvZiB0aGUgdXNlZCB0ZXN0aW5nIGxpYnJhcnkuXG4gKiBAcGFyYW0geyhUTW9kZWwgfCBSZW5kZXJXaXRoTW9kZWxPcHRpb25zPFRNb2RlbCwgVE1lc3NhZ2U+KX0gb3B0aW9ucyBUaGUgbW9kZWwgb3IgYW4gb3B0aW9ucyBvYmplY3QuXG4gKiBAcmV0dXJucyB7VFJlc3VsdH0gVGhlIHJldHVybmVkIHZhbHVlIG9mIHRoZSBgcmVuZGVyYCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyV2l0aE1vZGVsPFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlQmFzZSwgVFJlc3VsdD4gKHJlbmRlcjogKCkgPT4gVFJlc3VsdCwgb3B0aW9uczogVE1vZGVsIHwgUmVuZGVyV2l0aE1vZGVsT3B0aW9uczxUTW9kZWwsIFRNZXNzYWdlPik6IFRSZXN1bHQge1xuICAgIGlmIChcIm1vZGVsXCIgaW4gb3B0aW9ucyAmJiBcImRpc3BhdGNoXCIgaW4gb3B0aW9ucykge1xuICAgICAgICBzZXRGYWtlT3B0aW9ucyhvcHRpb25zIGFzIFJlbmRlcldpdGhNb2RlbE9wdGlvbnM8dW5rbm93biwgTWVzc2FnZUJhc2U+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzZXRGYWtlT3B0aW9ucyh7XG4gICAgICAgICAgICBtb2RlbDogb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcmVuZGVyKCk7XG5cbiAgICBzZXRGYWtlT3B0aW9ucyhudWxsKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7XG4gICAgcmVuZGVyV2l0aE1vZGVsLFxufTsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxlQUFULENBQXlFQyxNQUF6RSxFQUFnR0MsT0FBaEcsRUFBcUs7RUFDakssSUFBSSxXQUFXQSxPQUFYLElBQXNCLGNBQWNBLE9BQXhDLEVBQWlEO0lBQzdDLElBQUFDLDJCQUFBLEVBQWVELE9BQWY7RUFDSCxDQUZELE1BRU87SUFDSCxJQUFBQywyQkFBQSxFQUFlO01BQ1hDLEtBQUssRUFBRUY7SUFESSxDQUFmO0VBR0g7O0VBRUQsSUFBTUcsTUFBTSxHQUFHSixNQUFNLEVBQXJCO0VBRUEsSUFBQUUsMkJBQUEsRUFBZSxJQUFmO0VBRUEsT0FBT0UsTUFBUDtBQUNIIn0=
@@ -0,0 +1 @@
1
+ export {};
package/dist/Types.d.ts CHANGED
@@ -9,18 +9,21 @@ interface MessageBase {
9
9
  interface MsgSource<T extends string> {
10
10
  source: T;
11
11
  }
12
+ /**
13
+ * The return type of the `init` function.
14
+ */
12
15
  declare type InitResult<TModel, TMessage> = [TModel, Cmd<TMessage>?];
13
16
  declare type InitFunction<TProps, TModel, TMessage> = (props: TProps) => InitResult<TModel, TMessage>;
14
17
  /**
15
- * Type for the return value of the update function.
18
+ * Type for the return value of the `update` function.
16
19
  */
17
- declare type UpdateReturnType<TModel, TMsg> = [Partial<TModel>, Cmd<TMsg>?];
18
- declare type UpdateFunction<TProps, TModel, TMsg> = (model: TModel, msg: TMsg, props: TProps) => UpdateReturnType<TModel, TMsg>;
20
+ declare type UpdateReturnType<TModel, TMessage> = [Partial<TModel>, Cmd<TMessage>?];
21
+ declare type UpdateFunction<TProps, TModel, TMessage> = (model: TModel, msg: TMessage, props: TProps) => UpdateReturnType<TModel, TMessage>;
19
22
  /**
20
23
  * Type for mapping messages to functions.
21
24
  * Use this type to create your update logic for the useElmish hook.
22
25
  */
23
- declare type UpdateMap<TProps, TModel, TMsg extends MessageBase> = {
24
- [M in TMsg as M["name"]]: (msg: M, model: TModel, props: TProps) => UpdateReturnType<TModel, TMsg>;
26
+ declare type UpdateMap<TProps, TModel, TMessage extends MessageBase> = {
27
+ [M in TMessage as M["name"]]: (msg: M, model: TModel, props: TProps) => UpdateReturnType<TModel, TMessage>;
25
28
  };
26
29
  export type { Nullable, MessageBase, MsgSource, InitResult, InitFunction, UpdateReturnType, UpdateFunction, UpdateMap, };
package/dist/Types.js CHANGED
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENtZCB9IGZyb20gXCIuL0NtZFwiO1xuXG50eXBlIE51bGxhYmxlPFQ+ID0gVCB8IG51bGw7XG5cbmludGVyZmFjZSBNZXNzYWdlQmFzZSB7XG4gICAgbmFtZTogc3RyaW5nIHwgc3ltYm9sLFxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBNc2dTb3VyY2UgdHlwZS5cbiAqL1xuaW50ZXJmYWNlIE1zZ1NvdXJjZTxUIGV4dGVuZHMgc3RyaW5nPiB7XG4gICAgc291cmNlOiBULFxufVxuXG50eXBlIEluaXRSZXN1bHQ8VE1vZGVsLCBUTWVzc2FnZT4gPSBbVE1vZGVsLCBDbWQ8VE1lc3NhZ2U+P107XG5cbnR5cGUgSW5pdEZ1bmN0aW9uPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4gPSAocHJvcHM6IFRQcm9wcykgPT4gSW5pdFJlc3VsdDxUTW9kZWwsIFRNZXNzYWdlPjtcblxuLyoqXG4gKiBUeXBlIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB1cGRhdGUgZnVuY3Rpb24uXG4gKi9cbnR5cGUgVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNc2c+ID0gW1BhcnRpYWw8VE1vZGVsPiwgQ21kPFRNc2c+P107XG5cbnR5cGUgVXBkYXRlRnVuY3Rpb248VFByb3BzLCBUTW9kZWwsIFRNc2c+ID0gKG1vZGVsOiBUTW9kZWwsIG1zZzogVE1zZywgcHJvcHM6IFRQcm9wcykgPT4gVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNc2c+O1xuXG4vKipcbiAqIFR5cGUgZm9yIG1hcHBpbmcgbWVzc2FnZXMgdG8gZnVuY3Rpb25zLlxuICogVXNlIHRoaXMgdHlwZSB0byBjcmVhdGUgeW91ciB1cGRhdGUgbG9naWMgZm9yIHRoZSB1c2VFbG1pc2ggaG9vay5cbiAqL1xudHlwZSBVcGRhdGVNYXA8VFByb3BzLCBUTW9kZWwsIFRNc2cgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gPSB7XG4gICAgW00gaW4gVE1zZyBhcyBNW1wibmFtZVwiXV06IChtc2c6IE0sIG1vZGVsOiBUTW9kZWwsIHByb3BzOiBUUHJvcHMpID0+IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTXNnPjtcbn07XG5cbmV4cG9ydCB0eXBlIHtcbiAgICBOdWxsYWJsZSxcbiAgICBNZXNzYWdlQmFzZSxcbiAgICBNc2dTb3VyY2UsXG4gICAgSW5pdFJlc3VsdCxcbiAgICBJbml0RnVuY3Rpb24sXG4gICAgVXBkYXRlUmV0dXJuVHlwZSxcbiAgICBVcGRhdGVGdW5jdGlvbixcbiAgICBVcGRhdGVNYXAsXG59OyJdLCJtYXBwaW5ncyI6IiJ9
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENtZCB9IGZyb20gXCIuL0NtZFwiO1xuXG50eXBlIE51bGxhYmxlPFQ+ID0gVCB8IG51bGw7XG5cbmludGVyZmFjZSBNZXNzYWdlQmFzZSB7XG4gICAgbmFtZTogc3RyaW5nIHwgc3ltYm9sLFxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBNc2dTb3VyY2UgdHlwZS5cbiAqL1xuaW50ZXJmYWNlIE1zZ1NvdXJjZTxUIGV4dGVuZHMgc3RyaW5nPiB7XG4gICAgc291cmNlOiBULFxufVxuXG4vKipcbiAqIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYGluaXRgIGZ1bmN0aW9uLlxuICovXG50eXBlIEluaXRSZXN1bHQ8VE1vZGVsLCBUTWVzc2FnZT4gPSBbVE1vZGVsLCBDbWQ8VE1lc3NhZ2U+P107XG5cbnR5cGUgSW5pdEZ1bmN0aW9uPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4gPSAocHJvcHM6IFRQcm9wcykgPT4gSW5pdFJlc3VsdDxUTW9kZWwsIFRNZXNzYWdlPjtcblxuLyoqXG4gKiBUeXBlIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgdXBkYXRlYCBmdW5jdGlvbi5cbiAqL1xudHlwZSBVcGRhdGVSZXR1cm5UeXBlPFRNb2RlbCwgVE1lc3NhZ2U+ID0gW1BhcnRpYWw8VE1vZGVsPiwgQ21kPFRNZXNzYWdlPj9dO1xuXG50eXBlIFVwZGF0ZUZ1bmN0aW9uPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4gPSAobW9kZWw6IFRNb2RlbCwgbXNnOiBUTWVzc2FnZSwgcHJvcHM6IFRQcm9wcykgPT4gVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNZXNzYWdlPjtcblxuLyoqXG4gKiBUeXBlIGZvciBtYXBwaW5nIG1lc3NhZ2VzIHRvIGZ1bmN0aW9ucy5cbiAqIFVzZSB0aGlzIHR5cGUgdG8gY3JlYXRlIHlvdXIgdXBkYXRlIGxvZ2ljIGZvciB0aGUgdXNlRWxtaXNoIGhvb2suXG4gKi9cbnR5cGUgVXBkYXRlTWFwPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2VCYXNlPiA9IHtcbiAgICBbTSBpbiBUTWVzc2FnZSBhcyBNW1wibmFtZVwiXV06IChtc2c6IE0sIG1vZGVsOiBUTW9kZWwsIHByb3BzOiBUUHJvcHMpID0+IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTWVzc2FnZT47XG59O1xuXG5leHBvcnQgdHlwZSB7XG4gICAgTnVsbGFibGUsXG4gICAgTWVzc2FnZUJhc2UsXG4gICAgTXNnU291cmNlLFxuICAgIEluaXRSZXN1bHQsXG4gICAgSW5pdEZ1bmN0aW9uLFxuICAgIFVwZGF0ZVJldHVyblR5cGUsXG4gICAgVXBkYXRlRnVuY3Rpb24sXG4gICAgVXBkYXRlTWFwLFxufTsiXSwibWFwcGluZ3MiOiIifQ==
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { Cmd, createCmd, Dispatch } from "./Cmd";
2
+ import { ElmComponent } from "./ElmComponent";
2
3
  import { errorHandler, ErrorMessage, errorMsg, handleError } from "./ErrorHandling";
3
4
  import { init, Logger, Message } from "./Init";
4
5
  import { InitResult, MsgSource, UpdateMap, UpdateReturnType } from "./Types";
5
6
  import { SubscriptionResult, useElmish } from "./useElmish";
6
- import { ElmComponent } from "./ElmComponent";
7
7
  export type { Logger, Message, Cmd, Dispatch, InitResult, UpdateReturnType, SubscriptionResult, MsgSource, UpdateMap, ErrorMessage, };
8
8
  export { init, createCmd, ElmComponent, errorMsg, errorHandler, handleError, useElmish, };
package/dist/index.js CHANGED
@@ -48,11 +48,11 @@ Object.defineProperty(exports, "useElmish", {
48
48
 
49
49
  var _Cmd = require("./Cmd");
50
50
 
51
+ var _ElmComponent = require("./ElmComponent");
52
+
51
53
  var _ErrorHandling = require("./ErrorHandling");
52
54
 
53
55
  var _Init = require("./Init");
54
56
 
55
57
  var _useElmish = require("./useElmish");
56
-
57
- var _ElmComponent = require("./ElmComponent");
58
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENtZCwgY3JlYXRlQ21kLCBEaXNwYXRjaCB9IGZyb20gXCIuL0NtZFwiO1xuaW1wb3J0IHsgZXJyb3JIYW5kbGVyLCBFcnJvck1lc3NhZ2UsIGVycm9yTXNnLCBoYW5kbGVFcnJvciB9IGZyb20gXCIuL0Vycm9ySGFuZGxpbmdcIjtcbmltcG9ydCB7IGluaXQsIExvZ2dlciwgTWVzc2FnZSB9IGZyb20gXCIuL0luaXRcIjtcbmltcG9ydCB7IEluaXRSZXN1bHQsIE1zZ1NvdXJjZSwgVXBkYXRlTWFwLCBVcGRhdGVSZXR1cm5UeXBlIH0gZnJvbSBcIi4vVHlwZXNcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvblJlc3VsdCwgdXNlRWxtaXNoIH0gZnJvbSBcIi4vdXNlRWxtaXNoXCI7XG5pbXBvcnQgeyBFbG1Db21wb25lbnQgfSBmcm9tIFwiLi9FbG1Db21wb25lbnRcIjtcblxuZXhwb3J0IHR5cGUge1xuICAgIExvZ2dlcixcbiAgICBNZXNzYWdlLFxuICAgIENtZCxcbiAgICBEaXNwYXRjaCxcbiAgICBJbml0UmVzdWx0LFxuICAgIFVwZGF0ZVJldHVyblR5cGUsXG4gICAgU3Vic2NyaXB0aW9uUmVzdWx0LFxuICAgIE1zZ1NvdXJjZSxcbiAgICBVcGRhdGVNYXAsXG4gICAgRXJyb3JNZXNzYWdlLFxufTtcblxuZXhwb3J0IHtcbiAgICBpbml0LFxuICAgIGNyZWF0ZUNtZCxcbiAgICBFbG1Db21wb25lbnQsXG4gICAgZXJyb3JNc2csXG4gICAgZXJyb3JIYW5kbGVyLFxuICAgIGhhbmRsZUVycm9yLFxuICAgIHVzZUVsbWlzaCxcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQSJ9
58
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENtZCwgY3JlYXRlQ21kLCBEaXNwYXRjaCB9IGZyb20gXCIuL0NtZFwiO1xuaW1wb3J0IHsgRWxtQ29tcG9uZW50IH0gZnJvbSBcIi4vRWxtQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBlcnJvckhhbmRsZXIsIEVycm9yTWVzc2FnZSwgZXJyb3JNc2csIGhhbmRsZUVycm9yIH0gZnJvbSBcIi4vRXJyb3JIYW5kbGluZ1wiO1xuaW1wb3J0IHsgaW5pdCwgTG9nZ2VyLCBNZXNzYWdlIH0gZnJvbSBcIi4vSW5pdFwiO1xuaW1wb3J0IHsgSW5pdFJlc3VsdCwgTXNnU291cmNlLCBVcGRhdGVNYXAsIFVwZGF0ZVJldHVyblR5cGUgfSBmcm9tIFwiLi9UeXBlc1wiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uUmVzdWx0LCB1c2VFbG1pc2ggfSBmcm9tIFwiLi91c2VFbG1pc2hcIjtcblxuZXhwb3J0IHR5cGUge1xuICAgIExvZ2dlcixcbiAgICBNZXNzYWdlLFxuICAgIENtZCxcbiAgICBEaXNwYXRjaCxcbiAgICBJbml0UmVzdWx0LFxuICAgIFVwZGF0ZVJldHVyblR5cGUsXG4gICAgU3Vic2NyaXB0aW9uUmVzdWx0LFxuICAgIE1zZ1NvdXJjZSxcbiAgICBVcGRhdGVNYXAsXG4gICAgRXJyb3JNZXNzYWdlLFxufTtcblxuZXhwb3J0IHtcbiAgICBpbml0LFxuICAgIGNyZWF0ZUNtZCxcbiAgICBFbG1Db21wb25lbnQsXG4gICAgZXJyb3JNc2csXG4gICAgZXJyb3JIYW5kbGVyLFxuICAgIGhhbmRsZUVycm9yLFxuICAgIHVzZUVsbWlzaCxcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSJ9
@@ -1,12 +1,43 @@
1
1
  import { Cmd, Dispatch } from "./Cmd";
2
2
  import { InitFunction, MessageBase, UpdateFunction, UpdateMap, UpdateReturnType } from "./Types";
3
+ /**
4
+ * The return type of the `subscription` function.
5
+ * @template TMessage The type of the messages discriminated union.
6
+ */
3
7
  declare type SubscriptionResult<TMessage> = [Cmd<TMessage>, (() => void)?];
4
8
  declare type Subscription<TProps, TModel, TMessage> = (model: TModel, props: TProps) => SubscriptionResult<TMessage>;
9
+ /**
10
+ * Options for the `useElmish` hook.
11
+ * @interface UseElmishOptions
12
+ * @template TProps The type of the props.
13
+ * @template TModel The type of the model.
14
+ * @template TMessage The type of the messages discriminated union.
15
+ */
5
16
  interface UseElmishOptions<TProps, TModel, TMessage extends MessageBase> {
17
+ /**
18
+ * The name of the component. This is used for logging only.
19
+ * @type {string}
20
+ */
6
21
  name: string;
22
+ /**
23
+ * The props passed to the component.
24
+ * @type {TProps}
25
+ */
7
26
  props: TProps;
27
+ /**
28
+ * The function to initialize the components model. This function is only called once.
29
+ * @type {InitFunction<TProps, TModel, TMessage>}
30
+ */
8
31
  init: InitFunction<TProps, TModel, TMessage>;
32
+ /**
33
+ * The `update` function or update map object.
34
+ * @type {(UpdateFunction<TProps, TModel, TMessage> | UpdateMap<TProps, TModel, TMessage>)}
35
+ */
9
36
  update: UpdateFunction<TProps, TModel, TMessage> | UpdateMap<TProps, TModel, TMessage>;
37
+ /**
38
+ * The optional `subscription` function. This function is only called once.
39
+ * @type {(UpdateFunction<TProps, TModel, TMessage> | UpdateMap<TProps, TModel, TMessage>)}
40
+ */
10
41
  subscription?: Subscription<TProps, TModel, TMessage>;
11
42
  }
12
43
  /**
package/dist/useElmish.js CHANGED
@@ -9,10 +9,12 @@ exports.useElmish = useElmish;
9
9
 
10
10
  var _react = require("react");
11
11
 
12
- var _fakeOptions = require("./Testing/fakeOptions");
12
+ var _Common = require("./Common");
13
13
 
14
14
  var _Init = require("./Init");
15
15
 
16
+ var _fakeOptions = require("./Testing/fakeOptions");
17
+
16
18
  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; }
17
19
 
18
20
  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; }
@@ -55,34 +57,25 @@ function useElmish(_ref) {
55
57
  model = _useState2[0],
56
58
  setModel = _useState2[1];
57
59
 
58
- var initializedModel = model;
59
60
  var propsRef = (0, _react.useRef)(props);
61
+ var isMountedRef = (0, _react.useRef)(true);
62
+ (0, _react.useEffect)(function () {
63
+ return function () {
64
+ isMountedRef.current = false;
65
+ };
66
+ }, []);
67
+ var initializedModel = model;
60
68
 
61
69
  if (propsRef.current !== props) {
62
70
  propsRef.current = props;
63
71
  }
64
72
 
65
- var execCmd = (0, _react.useCallback)(function (cmd) {
66
- cmd.forEach(function (call) {
67
- try {
68
- call(dispatch);
69
- } catch (ex) {
70
- var _Services$logger;
71
-
72
- (_Services$logger = _Init.Services.logger) === null || _Services$logger === void 0 ? void 0 : _Services$logger.error(ex);
73
- }
74
- });
75
- }, []);
76
73
  var fakeOptions = (0, _fakeOptions.getFakeOptionsOnce)();
77
74
  var dispatch = (0, _react.useCallback)((_fakeOptions$dispatch = fakeOptions === null || fakeOptions === void 0 ? void 0 : fakeOptions.dispatch) !== null && _fakeOptions$dispatch !== void 0 ? _fakeOptions$dispatch : function (msg) {
78
75
  if (!initializedModel) {
79
76
  return;
80
77
  }
81
78
 
82
- var modelHasChanged = function modelHasChanged(updatedModel) {
83
- return updatedModel !== initializedModel && Object.getOwnPropertyNames(updatedModel).length > 0;
84
- };
85
-
86
79
  if (reentered) {
87
80
  buffer.push(msg);
88
81
  } else {
@@ -91,14 +84,7 @@ function useElmish(_ref) {
91
84
  var modified = false;
92
85
 
93
86
  while (nextMsg) {
94
- var _Services$logger2, _Services$logger3;
95
-
96
- (_Services$logger2 = _Init.Services.logger) === null || _Services$logger2 === void 0 ? void 0 : _Services$logger2.info("Elm", "message from", name, nextMsg.name);
97
- (_Services$logger3 = _Init.Services.logger) === null || _Services$logger3 === void 0 ? void 0 : _Services$logger3.debug("Elm", "message from", name, nextMsg);
98
-
99
- if (_Init.Services.dispatchMiddleware) {
100
- _Init.Services.dispatchMiddleware(nextMsg);
101
- }
87
+ (0, _Common.logMessage)(name, nextMsg);
102
88
 
103
89
  try {
104
90
  var _callUpdate = callUpdate(update, nextMsg, _objectSpread(_objectSpread({}, initializedModel), currentModel), propsRef.current),
@@ -106,18 +92,18 @@ function useElmish(_ref) {
106
92
  newModel = _callUpdate2[0],
107
93
  cmd = _callUpdate2[1];
108
94
 
109
- if (modelHasChanged(newModel)) {
95
+ if ((0, _Common.modelHasChanged)(currentModel, newModel)) {
110
96
  currentModel = _objectSpread(_objectSpread({}, currentModel), newModel);
111
97
  modified = true;
112
98
  }
113
99
 
114
100
  if (cmd) {
115
- execCmd(cmd);
101
+ (0, _Common.execCmd)(cmd, dispatch);
116
102
  }
117
103
  } catch (ex) {
118
- var _Services$logger4;
104
+ var _Services$logger;
119
105
 
120
- (_Services$logger4 = _Init.Services.logger) === null || _Services$logger4 === void 0 ? void 0 : _Services$logger4.error(ex);
106
+ (_Services$logger = _Init.Services.logger) === null || _Services$logger === void 0 ? void 0 : _Services$logger.error(ex);
121
107
  }
122
108
 
123
109
  nextMsg = buffer.shift();
@@ -125,13 +111,13 @@ function useElmish(_ref) {
125
111
 
126
112
  reentered = false;
127
113
 
128
- if (modified) {
114
+ if (isMountedRef.current && modified) {
129
115
  setModel(function (prevModel) {
130
- var _Services$logger5;
116
+ var _Services$logger2;
131
117
 
132
118
  var updatedModel = _objectSpread(_objectSpread({}, prevModel), currentModel);
133
119
 
134
- (_Services$logger5 = _Init.Services.logger) === null || _Services$logger5 === void 0 ? void 0 : _Services$logger5.debug("Elm", "update model for", name, updatedModel);
120
+ (_Services$logger2 = _Init.Services.logger) === null || _Services$logger2 === void 0 ? void 0 : _Services$logger2.debug("Elm", "update model for", name, updatedModel);
135
121
  return updatedModel;
136
122
  });
137
123
  }
@@ -148,7 +134,7 @@ function useElmish(_ref) {
148
134
  setModel(initializedModel);
149
135
 
150
136
  if (initCmd) {
151
- execCmd(initCmd);
137
+ (0, _Common.execCmd)(initCmd, dispatch);
152
138
  }
153
139
  }
154
140
 
@@ -159,7 +145,7 @@ function useElmish(_ref) {
159
145
  subCmd = _subscription2[0],
160
146
  destructor = _subscription2[1];
161
147
 
162
- execCmd(subCmd);
148
+ (0, _Common.execCmd)(subCmd, dispatch);
163
149
 
164
150
  if (destructor) {
165
151
  return destructor;
@@ -183,4 +169,4 @@ function callUpdateMap(updateMap, msg, model, props) {
183
169
  var updateFn = updateMap[msg.name];
184
170
  return updateFn(msg, model, props);
185
171
  }
186
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFbG1pc2giLCJuYW1lIiwicHJvcHMiLCJpbml0IiwidXBkYXRlIiwic3Vic2NyaXB0aW9uIiwicmVlbnRlcmVkIiwiYnVmZmVyIiwiY3VycmVudE1vZGVsIiwidXNlU3RhdGUiLCJtb2RlbCIsInNldE1vZGVsIiwiaW5pdGlhbGl6ZWRNb2RlbCIsInByb3BzUmVmIiwidXNlUmVmIiwiY3VycmVudCIsImV4ZWNDbWQiLCJ1c2VDYWxsYmFjayIsImNtZCIsImZvckVhY2giLCJjYWxsIiwiZGlzcGF0Y2giLCJleCIsIlNlcnZpY2VzIiwibG9nZ2VyIiwiZXJyb3IiLCJmYWtlT3B0aW9ucyIsImdldEZha2VPcHRpb25zT25jZSIsIm1zZyIsIm1vZGVsSGFzQ2hhbmdlZCIsInVwZGF0ZWRNb2RlbCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW5ndGgiLCJwdXNoIiwibmV4dE1zZyIsIm1vZGlmaWVkIiwiaW5mbyIsImRlYnVnIiwiZGlzcGF0Y2hNaWRkbGV3YXJlIiwiY2FsbFVwZGF0ZSIsIm5ld01vZGVsIiwic2hpZnQiLCJwcmV2TW9kZWwiLCJpbml0TW9kZWwiLCJpbml0Q21kIiwidXNlRWZmZWN0Iiwic3ViQ21kIiwiZGVzdHJ1Y3RvciIsImNhbGxVcGRhdGVNYXAiLCJ1cGRhdGVNYXAiLCJ1cGRhdGVGbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VFbG1pc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG5pbXBvcnQgeyBDbWQsIERpc3BhdGNoIH0gZnJvbSBcIi4vQ21kXCI7XG5pbXBvcnQgeyBJbml0RnVuY3Rpb24sIE1lc3NhZ2VCYXNlLCBOdWxsYWJsZSwgVXBkYXRlRnVuY3Rpb24sIFVwZGF0ZU1hcCwgVXBkYXRlUmV0dXJuVHlwZSB9IGZyb20gXCIuL1R5cGVzXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBnZXRGYWtlT3B0aW9uc09uY2UgfSBmcm9tIFwiLi9UZXN0aW5nL2Zha2VPcHRpb25zXCI7XG5pbXBvcnQgeyBTZXJ2aWNlcyB9IGZyb20gXCIuL0luaXRcIjtcblxudHlwZSBTdWJzY3JpcHRpb25SZXN1bHQ8VE1lc3NhZ2U+ID0gW0NtZDxUTWVzc2FnZT4sICgoKSA9PiB2b2lkKT9dO1xudHlwZSBTdWJzY3JpcHRpb248VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPiA9IChtb2RlbDogVE1vZGVsLCBwcm9wczogVFByb3BzKSA9PiBTdWJzY3JpcHRpb25SZXN1bHQ8VE1lc3NhZ2U+O1xuXG5pbnRlcmZhY2UgVXNlRWxtaXNoT3B0aW9uczxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlQmFzZT4ge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwcm9wczogVFByb3BzLFxuICAgIGluaXQ6IEluaXRGdW5jdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+LFxuICAgIHVwZGF0ZTogVXBkYXRlRnVuY3Rpb248VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPiB8IFVwZGF0ZU1hcDxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+LFxuICAgIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+LFxufVxuXG4vKipcbiAqIEhvb2sgdG8gdXNlIHRoZSBFbG0gYXJjaGl0ZWN0dXJlIHBhdHRlcm4gaW4gYSBmdW5jdGlvbiBjb21wb25lbnQuXG4gKiBAcGFyYW0ge1VzZUVsbWlzaE9wdGlvbnN9IG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFzc2VkIHRoZSB0aGUgaG9vay5cbiAqIEByZXR1cm5zIEEgdHVwbGUgY29udGFpbmluZyB0aGUgY3VycmVudCBtb2RlbCBhbmQgdGhlIGRpc3BhdGNoZXIuXG4gKiBAZXhhbXBsZVxuICogY29uc3QgW21vZGVsLCBkaXNwYXRjaF0gPSB1c2VFbG1pc2goeyBwcm9wcywgaW5pdCwgdXBkYXRlLCBuYW1lOiBcIk15Q29tcG9uZW50XCIgfSk7XG4gKi9cbmZ1bmN0aW9uIHVzZUVsbWlzaDxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gKHsgbmFtZSwgcHJvcHMsIGluaXQsIHVwZGF0ZSwgc3Vic2NyaXB0aW9uIH06IFVzZUVsbWlzaE9wdGlvbnM8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPik6IFtUTW9kZWwsIERpc3BhdGNoPFRNZXNzYWdlPl0ge1xuICAgIGxldCByZWVudGVyZWQgPSBmYWxzZTtcbiAgICBjb25zdCBidWZmZXI6IFRNZXNzYWdlIFtdID0gW107XG4gICAgbGV0IGN1cnJlbnRNb2RlbDogUGFydGlhbDxUTW9kZWw+ID0ge307XG5cbiAgICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IHVzZVN0YXRlPE51bGxhYmxlPFRNb2RlbD4+KG51bGwpO1xuICAgIGxldCBpbml0aWFsaXplZE1vZGVsID0gbW9kZWw7XG5cbiAgICBjb25zdCBwcm9wc1JlZiA9IHVzZVJlZihwcm9wcyk7XG5cbiAgICBpZiAocHJvcHNSZWYuY3VycmVudCAhPT0gcHJvcHMpIHtcbiAgICAgICAgcHJvcHNSZWYuY3VycmVudCA9IHByb3BzO1xuICAgIH1cblxuICAgIGNvbnN0IGV4ZWNDbWQgPSB1c2VDYWxsYmFjaygoY21kOiBDbWQ8VE1lc3NhZ2U+KTogdm9pZCA9PiB7XG4gICAgICAgIGNtZC5mb3JFYWNoKGNhbGwgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjYWxsKGRpc3BhdGNoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4OiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgU2VydmljZXMubG9nZ2VyPy5lcnJvcihleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGZha2VPcHRpb25zID0gZ2V0RmFrZU9wdGlvbnNPbmNlKCk7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmYWtlT3B0aW9ucz8uZGlzcGF0Y2ggPz8gKChtc2c6IFRNZXNzYWdlKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghaW5pdGlhbGl6ZWRNb2RlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kZWxIYXNDaGFuZ2VkID0gKHVwZGF0ZWRNb2RlbDogUGFydGlhbDxUTW9kZWw+KTogYm9vbGVhbiA9PiB1cGRhdGVkTW9kZWwgIT09IGluaXRpYWxpemVkTW9kZWwgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModXBkYXRlZE1vZGVsKS5sZW5ndGggPiAwO1xuXG4gICAgICAgIGlmIChyZWVudGVyZWQpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKG1zZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWVudGVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBsZXQgbmV4dE1zZzogVE1lc3NhZ2UgfCB1bmRlZmluZWQgPSBtc2c7XG4gICAgICAgICAgICBsZXQgbW9kaWZpZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgd2hpbGUgKG5leHRNc2cpIHtcbiAgICAgICAgICAgICAgICBTZXJ2aWNlcy5sb2dnZXI/LmluZm8oXCJFbG1cIiwgXCJtZXNzYWdlIGZyb21cIiwgbmFtZSwgbmV4dE1zZy5uYW1lKTtcbiAgICAgICAgICAgICAgICBTZXJ2aWNlcy5sb2dnZXI/LmRlYnVnKFwiRWxtXCIsIFwibWVzc2FnZSBmcm9tXCIsIG5hbWUsIG5leHRNc2cpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFNlcnZpY2VzLmRpc3BhdGNoTWlkZGxld2FyZSkge1xuICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcy5kaXNwYXRjaE1pZGRsZXdhcmUobmV4dE1zZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW25ld01vZGVsLCBjbWRdID0gY2FsbFVwZGF0ZSh1cGRhdGUsIG5leHRNc2csIHsgLi4uaW5pdGlhbGl6ZWRNb2RlbCwgLi4uY3VycmVudE1vZGVsIH0sIHByb3BzUmVmLmN1cnJlbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RlbEhhc0NoYW5nZWQobmV3TW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kZWwgPSB7IC4uLmN1cnJlbnRNb2RlbCwgLi4ubmV3TW9kZWwgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0NtZChjbWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICAgICAgU2VydmljZXMubG9nZ2VyPy5lcnJvcihleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV4dE1zZyA9IGJ1ZmZlci5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVlbnRlcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChtb2RpZmllZCkge1xuICAgICAgICAgICAgICAgIHNldE1vZGVsKHByZXZNb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRNb2RlbCA9IHsgLi4ucHJldk1vZGVsIGFzIFRNb2RlbCwgLi4uY3VycmVudE1vZGVsIH07XG5cbiAgICAgICAgICAgICAgICAgICAgU2VydmljZXMubG9nZ2VyPy5kZWJ1ZyhcIkVsbVwiLCBcInVwZGF0ZSBtb2RlbCBmb3JcIiwgbmFtZSwgdXBkYXRlZE1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZE1vZGVsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSksIFtdKTtcblxuICAgIGlmICghaW5pdGlhbGl6ZWRNb2RlbCkge1xuICAgICAgICBjb25zdCBbaW5pdE1vZGVsLCBpbml0Q21kXSA9IGZha2VPcHRpb25zPy5tb2RlbCA/IFtmYWtlT3B0aW9ucy5tb2RlbCBhcyBUTW9kZWxdIDogaW5pdChwcm9wcyk7XG5cbiAgICAgICAgaW5pdGlhbGl6ZWRNb2RlbCA9IGluaXRNb2RlbDtcbiAgICAgICAgc2V0TW9kZWwoaW5pdGlhbGl6ZWRNb2RlbCk7XG5cbiAgICAgICAgaWYgKGluaXRDbWQpIHtcbiAgICAgICAgICAgIGV4ZWNDbWQoaW5pdENtZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBbc3ViQ21kLCBkZXN0cnVjdG9yXSA9IHN1YnNjcmlwdGlvbihpbml0aWFsaXplZE1vZGVsIGFzIFRNb2RlbCwgcHJvcHMpO1xuXG4gICAgICAgICAgICBleGVjQ21kKHN1YkNtZCk7XG5cbiAgICAgICAgICAgIGlmIChkZXN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc3RydWN0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gW2luaXRpYWxpemVkTW9kZWwsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gY2FsbFVwZGF0ZTxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gKHVwZGF0ZTogVXBkYXRlRnVuY3Rpb248VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPiB8IFVwZGF0ZU1hcDxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+LCBtc2c6IFRNZXNzYWdlLCBtb2RlbDogVE1vZGVsLCBwcm9wczogVFByb3BzKTogVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNZXNzYWdlPiB7XG4gICAgaWYgKHR5cGVvZiB1cGRhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gdXBkYXRlKG1vZGVsLCBtc2csIHByb3BzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsbFVwZGF0ZU1hcCh1cGRhdGUsIG1zZywgbW9kZWwsIHByb3BzKTtcbn1cblxuZnVuY3Rpb24gY2FsbFVwZGF0ZU1hcDxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gKHVwZGF0ZU1hcDogVXBkYXRlTWFwPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4sIG1zZzogVE1lc3NhZ2UsIG1vZGVsOiBUTW9kZWwsIHByb3BzOiBUUHJvcHMpOiBVcGRhdGVSZXR1cm5UeXBlPFRNb2RlbCwgVE1lc3NhZ2U+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBXZSBrbm93IHRoYXQgbXNnIGZpdHNcbiAgICBjb25zdCB1cGRhdGVGbiA9IHVwZGF0ZU1hcFttc2cubmFtZSBhcyBUTWVzc2FnZVtcIm5hbWVcIl1dIGFzIChtc2c6IFRNZXNzYWdlLCBtb2RlbDogVE1vZGVsLCBwcm9wczogVFByb3BzKSA9PiBVcGRhdGVSZXR1cm5UeXBlPFRNb2RlbCwgVE1zZz47XG5cbiAgICByZXR1cm4gdXBkYXRlRm4obXNnLCBtb2RlbCwgcHJvcHMpO1xufVxuXG5leHBvcnQgdHlwZSB7XG4gICAgU3Vic2NyaXB0aW9uUmVzdWx0LFxufTtcblxuZXhwb3J0IHtcbiAgICB1c2VFbG1pc2gsXG4gICAgY2FsbFVwZGF0ZSxcbiAgICBjYWxsVXBkYXRlTWFwLFxufTsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWFBO0FBQ0E7QUFDQTtBQUNBO0FB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
172
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFbG1pc2giLCJuYW1lIiwicHJvcHMiLCJpbml0IiwidXBkYXRlIiwic3Vic2NyaXB0aW9uIiwicmVlbnRlcmVkIiwiYnVmZmVyIiwiY3VycmVudE1vZGVsIiwidXNlU3RhdGUiLCJtb2RlbCIsInNldE1vZGVsIiwicHJvcHNSZWYiLCJ1c2VSZWYiLCJpc01vdW50ZWRSZWYiLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwiaW5pdGlhbGl6ZWRNb2RlbCIsImZha2VPcHRpb25zIiwiZ2V0RmFrZU9wdGlvbnNPbmNlIiwiZGlzcGF0Y2giLCJ1c2VDYWxsYmFjayIsIm1zZyIsInB1c2giLCJuZXh0TXNnIiwibW9kaWZpZWQiLCJsb2dNZXNzYWdlIiwiY2FsbFVwZGF0ZSIsIm5ld01vZGVsIiwiY21kIiwibW9kZWxIYXNDaGFuZ2VkIiwiZXhlY0NtZCIsImV4IiwiU2VydmljZXMiLCJsb2dnZXIiLCJlcnJvciIsInNoaWZ0IiwicHJldk1vZGVsIiwidXBkYXRlZE1vZGVsIiwiZGVidWciLCJpbml0TW9kZWwiLCJpbml0Q21kIiwic3ViQ21kIiwiZGVzdHJ1Y3RvciIsImNhbGxVcGRhdGVNYXAiLCJ1cGRhdGVNYXAiLCJ1cGRhdGVGbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VFbG1pc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDbWQsIERpc3BhdGNoIH0gZnJvbSBcIi4vQ21kXCI7XG5pbXBvcnQgeyBleGVjQ21kLCBsb2dNZXNzYWdlLCBtb2RlbEhhc0NoYW5nZWQgfSBmcm9tIFwiLi9Db21tb25cIjtcbmltcG9ydCB7IFNlcnZpY2VzIH0gZnJvbSBcIi4vSW5pdFwiO1xuaW1wb3J0IHsgZ2V0RmFrZU9wdGlvbnNPbmNlIH0gZnJvbSBcIi4vVGVzdGluZy9mYWtlT3B0aW9uc1wiO1xuaW1wb3J0IHsgSW5pdEZ1bmN0aW9uLCBNZXNzYWdlQmFzZSwgTnVsbGFibGUsIFVwZGF0ZUZ1bmN0aW9uLCBVcGRhdGVNYXAsIFVwZGF0ZVJldHVyblR5cGUgfSBmcm9tIFwiLi9UeXBlc1wiO1xuXG4vKipcbiAqIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYHN1YnNjcmlwdGlvbmAgZnVuY3Rpb24uXG4gKiBAdGVtcGxhdGUgVE1lc3NhZ2UgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2VzIGRpc2NyaW1pbmF0ZWQgdW5pb24uXG4gKi9cbnR5cGUgU3Vic2NyaXB0aW9uUmVzdWx0PFRNZXNzYWdlPiA9IFtDbWQ8VE1lc3NhZ2U+LCAoKCkgPT4gdm9pZCk/XTtcbnR5cGUgU3Vic2NyaXB0aW9uPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4gPSAobW9kZWw6IFRNb2RlbCwgcHJvcHM6IFRQcm9wcykgPT4gU3Vic2NyaXB0aW9uUmVzdWx0PFRNZXNzYWdlPjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgYHVzZUVsbWlzaGAgaG9vay5cbiAqIEBpbnRlcmZhY2UgVXNlRWxtaXNoT3B0aW9uc1xuICogQHRlbXBsYXRlIFRQcm9wcyBUaGUgdHlwZSBvZiB0aGUgcHJvcHMuXG4gKiBAdGVtcGxhdGUgVE1vZGVsIFRoZSB0eXBlIG9mIHRoZSBtb2RlbC5cbiAqIEB0ZW1wbGF0ZSBUTWVzc2FnZSBUaGUgdHlwZSBvZiB0aGUgbWVzc2FnZXMgZGlzY3JpbWluYXRlZCB1bmlvbi5cbiAqL1xuaW50ZXJmYWNlIFVzZUVsbWlzaE9wdGlvbnM8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZUJhc2U+IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIGlzIHVzZWQgZm9yIGxvZ2dpbmcgb25seS5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcHMgcGFzc2VkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICogQHR5cGUge1RQcm9wc31cbiAgICAgKi9cbiAgICBwcm9wczogVFByb3BzLFxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBjb21wb25lbnRzIG1vZGVsLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uY2UuXG4gICAgICogQHR5cGUge0luaXRGdW5jdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+fVxuICAgICAqL1xuICAgIGluaXQ6IEluaXRGdW5jdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+LFxuICAgIC8qKlxuICAgICAqIFRoZSBgdXBkYXRlYCBmdW5jdGlvbiBvciB1cGRhdGUgbWFwIG9iamVjdC5cbiAgICAgKiBAdHlwZSB7KFVwZGF0ZUZ1bmN0aW9uPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4gfCBVcGRhdGVNYXA8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPil9XG4gICAgICovXG4gICAgdXBkYXRlOiBVcGRhdGVGdW5jdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+IHwgVXBkYXRlTWFwPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4sXG4gICAgLyoqXG4gICAgICogVGhlIG9wdGlvbmFsIGBzdWJzY3JpcHRpb25gIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uY2UuXG4gICAgICogQHR5cGUgeyhVcGRhdGVGdW5jdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+IHwgVXBkYXRlTWFwPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4pfVxuICAgICAqL1xuICAgIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+LFxufVxuXG4vKipcbiAqIEhvb2sgdG8gdXNlIHRoZSBFbG0gYXJjaGl0ZWN0dXJlIHBhdHRlcm4gaW4gYSBmdW5jdGlvbiBjb21wb25lbnQuXG4gKiBAcGFyYW0ge1VzZUVsbWlzaE9wdGlvbnN9IG9wdGlvbnMgVGhlIG9wdGlvbnMgcGFzc2VkIHRoZSB0aGUgaG9vay5cbiAqIEByZXR1cm5zIEEgdHVwbGUgY29udGFpbmluZyB0aGUgY3VycmVudCBtb2RlbCBhbmQgdGhlIGRpc3BhdGNoZXIuXG4gKiBAZXhhbXBsZVxuICogY29uc3QgW21vZGVsLCBkaXNwYXRjaF0gPSB1c2VFbG1pc2goeyBwcm9wcywgaW5pdCwgdXBkYXRlLCBuYW1lOiBcIk15Q29tcG9uZW50XCIgfSk7XG4gKi9cbmZ1bmN0aW9uIHVzZUVsbWlzaDxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlQmFzZT4gKHsgbmFtZSwgcHJvcHMsIGluaXQsIHVwZGF0ZSwgc3Vic2NyaXB0aW9uIH06IFVzZUVsbWlzaE9wdGlvbnM8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPik6IFtUTW9kZWwsIERpc3BhdGNoPFRNZXNzYWdlPl0ge1xuICAgIGxldCByZWVudGVyZWQgPSBmYWxzZTtcbiAgICBjb25zdCBidWZmZXI6IFRNZXNzYWdlIFtdID0gW107XG4gICAgbGV0IGN1cnJlbnRNb2RlbDogUGFydGlhbDxUTW9kZWw+ID0ge307XG5cbiAgICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IHVzZVN0YXRlPE51bGxhYmxlPFRNb2RlbD4+KG51bGwpO1xuICAgIGNvbnN0IHByb3BzUmVmID0gdXNlUmVmKHByb3BzKTtcbiAgICBjb25zdCBpc01vdW50ZWRSZWYgPSB1c2VSZWYodHJ1ZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgICAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH0sIFtdKTtcblxuICAgIGxldCBpbml0aWFsaXplZE1vZGVsID0gbW9kZWw7XG5cbiAgICBpZiAocHJvcHNSZWYuY3VycmVudCAhPT0gcHJvcHMpIHtcbiAgICAgICAgcHJvcHNSZWYuY3VycmVudCA9IHByb3BzO1xuICAgIH1cblxuICAgIGNvbnN0IGZha2VPcHRpb25zID0gZ2V0RmFrZU9wdGlvbnNPbmNlKCk7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmYWtlT3B0aW9ucz8uZGlzcGF0Y2ggPz8gKChtc2c6IFRNZXNzYWdlKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghaW5pdGlhbGl6ZWRNb2RlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlZW50ZXJlZCkge1xuICAgICAgICAgICAgYnVmZmVyLnB1c2gobXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlZW50ZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGxldCBuZXh0TXNnOiBUTWVzc2FnZSB8IHVuZGVmaW5lZCA9IG1zZztcbiAgICAgICAgICAgIGxldCBtb2RpZmllZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICB3aGlsZSAobmV4dE1zZykge1xuICAgICAgICAgICAgICAgIGxvZ01lc3NhZ2UobmFtZSwgbmV4dE1zZyk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbbmV3TW9kZWwsIGNtZF0gPSBjYWxsVXBkYXRlKHVwZGF0ZSwgbmV4dE1zZywgeyAuLi5pbml0aWFsaXplZE1vZGVsLCAuLi5jdXJyZW50TW9kZWwgfSwgcHJvcHNSZWYuY3VycmVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsSGFzQ2hhbmdlZChjdXJyZW50TW9kZWwsIG5ld01vZGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vZGVsID0geyAuLi5jdXJyZW50TW9kZWwsIC4uLm5ld01vZGVsIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNDbWQoY21kLCBkaXNwYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcy5sb2dnZXI/LmVycm9yKGV4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXh0TXNnID0gYnVmZmVyLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWVudGVyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIG1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgc2V0TW9kZWwocHJldk1vZGVsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZE1vZGVsID0geyAuLi5wcmV2TW9kZWwgYXMgVE1vZGVsLCAuLi5jdXJyZW50TW9kZWwgfTtcblxuICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcy5sb2dnZXI/LmRlYnVnKFwiRWxtXCIsIFwidXBkYXRlIG1vZGVsIGZvclwiLCBuYW1lLCB1cGRhdGVkTW9kZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkTW9kZWw7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KSwgW10pO1xuXG4gICAgaWYgKCFpbml0aWFsaXplZE1vZGVsKSB7XG4gICAgICAgIGNvbnN0IFtpbml0TW9kZWwsIGluaXRDbWRdID0gZmFrZU9wdGlvbnM/Lm1vZGVsID8gW2Zha2VPcHRpb25zLm1vZGVsIGFzIFRNb2RlbF0gOiBpbml0KHByb3BzKTtcblxuICAgICAgICBpbml0aWFsaXplZE1vZGVsID0gaW5pdE1vZGVsO1xuICAgICAgICBzZXRNb2RlbChpbml0aWFsaXplZE1vZGVsKTtcblxuICAgICAgICBpZiAoaW5pdENtZCkge1xuICAgICAgICAgICAgZXhlY0NtZChpbml0Q21kLCBkaXNwYXRjaCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBbc3ViQ21kLCBkZXN0cnVjdG9yXSA9IHN1YnNjcmlwdGlvbihpbml0aWFsaXplZE1vZGVsIGFzIFRNb2RlbCwgcHJvcHMpO1xuXG4gICAgICAgICAgICBleGVjQ21kKHN1YkNtZCwgZGlzcGF0Y2gpO1xuXG4gICAgICAgICAgICBpZiAoZGVzdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXN0cnVjdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIFtpbml0aWFsaXplZE1vZGVsLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGU8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZUJhc2U+ICh1cGRhdGU6IFVwZGF0ZUZ1bmN0aW9uPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZT4gfCBVcGRhdGVNYXA8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPiwgbXNnOiBUTWVzc2FnZSwgbW9kZWw6IFRNb2RlbCwgcHJvcHM6IFRQcm9wcyk6IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTWVzc2FnZT4ge1xuICAgIGlmICh0eXBlb2YgdXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZShtb2RlbCwgbXNnLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGxVcGRhdGVNYXAodXBkYXRlLCBtc2csIG1vZGVsLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGVNYXA8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZUJhc2U+ICh1cGRhdGVNYXA6IFVwZGF0ZU1hcDxUUHJvcHMsIFRNb2RlbCwgVE1lc3NhZ2U+LCBtc2c6IFRNZXNzYWdlLCBtb2RlbDogVE1vZGVsLCBwcm9wczogVFByb3BzKTogVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNZXNzYWdlPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gV2Uga25vdyB0aGF0IG1zZyBmaXRzXG4gICAgY29uc3QgdXBkYXRlRm4gPSB1cGRhdGVNYXBbbXNnLm5hbWUgYXMgVE1lc3NhZ2VbXCJuYW1lXCJdXSBhcyAobXNnOiBUTWVzc2FnZSwgbW9kZWw6IFRNb2RlbCwgcHJvcHM6IFRQcm9wcykgPT4gVXBkYXRlUmV0dXJuVHlwZTxUTW9kZWwsIFRNc2c+O1xuXG4gICAgcmV0dXJuIHVwZGF0ZUZuKG1zZywgbW9kZWwsIHByb3BzKTtcbn1cblxuZXhwb3J0IHR5cGUge1xuICAgIFN1YnNjcmlwdGlvblJlc3VsdCxcbn07XG5cbmV4cG9ydCB7XG4gICAgdXNlRWxtaXNoLFxuICAgIGNhbGxVcGRhdGUsXG4gICAgY2FsbFVwZGF0ZU1hcCxcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxTQUFULE9BQXlMO0VBQUE7O0VBQUEsSUFBckhDLElBQXFILFFBQXJIQSxJQUFxSDtFQUFBLElBQS9HQyxLQUErRyxRQUEvR0EsS0FBK0c7RUFBQSxJQUF4R0MsSUFBd0csUUFBeEdBLElBQXdHO0VBQUEsSUFBbEdDLE1BQWtHLFFBQWxHQSxNQUFrRztFQUFBLElBQTFGQyxZQUEwRixRQUExRkEsWUFBMEY7RUFDckwsSUFBSUMsU0FBUyxHQUFHLEtBQWhCO0VBQ0EsSUFBTUMsTUFBbUIsR0FBRyxFQUE1QjtFQUNBLElBQUlDLFlBQTZCLEdBQUcsRUFBcEM7O0VBRUEsZ0JBQTBCLElBQUFDLGVBQUEsRUFBMkIsSUFBM0IsQ0FBMUI7RUFBQTtFQUFBLElBQU9DLEtBQVA7RUFBQSxJQUFjQyxRQUFkOztFQUNBLElBQU1DLFFBQVEsR0FBRyxJQUFBQyxhQUFBLEVBQU9YLEtBQVAsQ0FBakI7RUFDQSxJQUFNWSxZQUFZLEdBQUcsSUFBQUQsYUFBQSxFQUFPLElBQVAsQ0FBckI7RUFFQSxJQUFBRSxnQkFBQSxFQUFVO0lBQUEsT0FBTSxZQUFNO01BQ2xCRCxZQUFZLENBQUNFLE9BQWIsR0FBdUIsS0FBdkI7SUFDSCxDQUZTO0VBQUEsQ0FBVixFQUVHLEVBRkg7RUFJQSxJQUFJQyxnQkFBZ0IsR0FBR1AsS0FBdkI7O0VBRUEsSUFBSUUsUUFBUSxDQUFDSSxPQUFULEtBQXFCZCxLQUF6QixFQUFnQztJQUM1QlUsUUFBUSxDQUFDSSxPQUFULEdBQW1CZCxLQUFuQjtFQUNIOztFQUVELElBQU1nQixXQUFXLEdBQUcsSUFBQUMsK0JBQUEsR0FBcEI7RUFDQSxJQUFNQyxRQUFRLEdBQUcsSUFBQUMsa0JBQUEsMkJBQVlILFdBQVosYUFBWUEsV0FBWix1QkFBWUEsV0FBVyxDQUFFRSxRQUF6Qix5RUFBc0MsVUFBQ0UsR0FBRCxFQUF5QjtJQUM1RSxJQUFJLENBQUNMLGdCQUFMLEVBQXVCO01BQ25CO0lBQ0g7O0lBRUQsSUFBSVgsU0FBSixFQUFlO01BQ1hDLE1BQU0sQ0FBQ2dCLElBQVAsQ0FBWUQsR0FBWjtJQUNILENBRkQsTUFFTztNQUNIaEIsU0FBUyxHQUFHLElBQVo7TUFFQSxJQUFJa0IsT0FBNkIsR0FBR0YsR0FBcEM7TUFDQSxJQUFJRyxRQUFRLEdBQUcsS0FBZjs7TUFFQSxPQUFPRCxPQUFQLEVBQWdCO1FBQ1osSUFBQUUsa0JBQUEsRUFBV3pCLElBQVgsRUFBaUJ1QixPQUFqQjs7UUFFQSxJQUFJO1VBQ0Esa0JBQXdCRyxVQUFVLENBQUN2QixNQUFELEVBQVNvQixPQUFULGtDQUF1QlAsZ0JBQXZCLEdBQTRDVCxZQUE1QyxHQUE0REksUUFBUSxDQUFDSSxPQUFyRSxDQUFsQztVQUFBO1VBQUEsSUFBT1ksUUFBUDtVQUFBLElBQWlCQyxHQUFqQjs7VUFFQSxJQUFJLElBQUFDLHVCQUFBLEVBQWdCdEIsWUFBaEIsRUFBOEJvQixRQUE5QixDQUFKLEVBQTZDO1lBQ3pDcEIsWUFBWSxtQ0FBUUEsWUFBUixHQUF5Qm9CLFFBQXpCLENBQVo7WUFFQUgsUUFBUSxHQUFHLElBQVg7VUFDSDs7VUFFRCxJQUFJSSxHQUFKLEVBQVM7WUFDTCxJQUFBRSxlQUFBLEVBQVFGLEdBQVIsRUFBYVQsUUFBYjtVQUNIO1FBQ0osQ0FaRCxDQVlFLE9BQU9ZLEVBQVAsRUFBb0I7VUFBQTs7VUFDbEIsb0JBQUFDLGNBQUEsQ0FBU0MsTUFBVCxzRUFBaUJDLEtBQWpCLENBQXVCSCxFQUF2QjtRQUNIOztRQUVEUixPQUFPLEdBQUdqQixNQUFNLENBQUM2QixLQUFQLEVBQVY7TUFDSDs7TUFDRDlCLFNBQVMsR0FBRyxLQUFaOztNQUVBLElBQUlRLFlBQVksQ0FBQ0UsT0FBYixJQUF3QlMsUUFBNUIsRUFBc0M7UUFDbENkLFFBQVEsQ0FBQyxVQUFBMEIsU0FBUyxFQUFJO1VBQUE7O1VBQ2xCLElBQU1DLFlBQVksbUNBQVFELFNBQVIsR0FBZ0M3QixZQUFoQyxDQUFsQjs7VUFFQSxxQkFBQXlCLGNBQUEsQ0FBU0MsTUFBVCx3RUFBaUJLLEtBQWpCLENBQXVCLEtBQXZCLEVBQThCLGtCQUE5QixFQUFrRHRDLElBQWxELEVBQXdEcUMsWUFBeEQ7VUFFQSxPQUFPQSxZQUFQO1FBQ0gsQ0FOTyxDQUFSO01BT0g7SUFDSjtFQUNKLENBOUNnQixFQThDYixFQTlDYSxDQUFqQjs7RUFnREEsSUFBSSxDQUFDckIsZ0JBQUwsRUFBdUI7SUFDbkIsWUFBNkJDLFdBQVcsU0FBWCxJQUFBQSxXQUFXLFdBQVgsSUFBQUEsV0FBVyxDQUFFUixLQUFiLEdBQXFCLENBQUNRLFdBQVcsQ0FBQ1IsS0FBYixDQUFyQixHQUFxRFAsSUFBSSxDQUFDRCxLQUFELENBQXRGO0lBQUE7SUFBQSxJQUFPc0MsU0FBUDtJQUFBLElBQWtCQyxPQUFsQjs7SUFFQXhCLGdCQUFnQixHQUFHdUIsU0FBbkI7SUFDQTdCLFFBQVEsQ0FBQ00sZ0JBQUQsQ0FBUjs7SUFFQSxJQUFJd0IsT0FBSixFQUFhO01BQ1QsSUFBQVYsZUFBQSxFQUFRVSxPQUFSLEVBQWlCckIsUUFBakI7SUFDSDtFQUNKOztFQUVELElBQUFMLGdCQUFBLEVBQVUsWUFBTTtJQUNaLElBQUlWLFlBQUosRUFBa0I7TUFDZCxvQkFBNkJBLFlBQVksQ0FBQ1ksZ0JBQUQsRUFBNkJmLEtBQTdCLENBQXpDO01BQUE7TUFBQSxJQUFPd0MsTUFBUDtNQUFBLElBQWVDLFVBQWY7O01BRUEsSUFBQVosZUFBQSxFQUFRVyxNQUFSLEVBQWdCdEIsUUFBaEI7O01BRUEsSUFBSXVCLFVBQUosRUFBZ0I7UUFDWixPQUFPQSxVQUFQO01BQ0g7SUFDSjtFQUNKLENBVkQsRUFVRyxFQVZIO0VBWUEsT0FBTyxDQUFDMUIsZ0JBQUQsRUFBbUJHLFFBQW5CLENBQVA7QUFDSDs7QUFFRCxTQUFTTyxVQUFULENBQW1FdkIsTUFBbkUsRUFBMkprQixHQUEzSixFQUEwS1osS0FBMUssRUFBeUxSLEtBQXpMLEVBQTRPO0VBQ3hPLElBQUksT0FBT0UsTUFBUCxLQUFrQixVQUF0QixFQUFrQztJQUM5QixPQUFPQSxNQUFNLENBQUNNLEtBQUQsRUFBUVksR0FBUixFQUFhcEIsS0FBYixDQUFiO0VBQ0g7O0VBRUQsT0FBTzBDLGFBQWEsQ0FBQ3hDLE1BQUQsRUFBU2tCLEdBQVQsRUFBY1osS0FBZCxFQUFxQlIsS0FBckIsQ0FBcEI7QUFDSDs7QUFFRCxTQUFTMEMsYUFBVCxDQUFzRUMsU0FBdEUsRUFBc0h2QixHQUF0SCxFQUFxSVosS0FBckksRUFBb0pSLEtBQXBKLEVBQXVNO0VBQ25NO0VBQ0E7RUFDQSxJQUFNNEMsUUFBUSxHQUFHRCxTQUFTLENBQUN2QixHQUFHLENBQUNyQixJQUFMLENBQTFCO0VBRUEsT0FBTzZDLFFBQVEsQ0FBQ3hCLEdBQUQsRUFBTVosS0FBTixFQUFhUixLQUFiLENBQWY7QUFDSCJ9