{"version":3,"sources":["node_modules/dayjs/dayjs.min.js","node_modules/@servicestack/client/dist/index.js","node_modules/@angular/core/fesm2022/primitives/signals.mjs","node_modules/rxjs/_esm2015/internal/util/isFunction.js","node_modules/rxjs/_esm2015/internal/config.js","node_modules/rxjs/_esm2015/internal/util/hostReportError.js","node_modules/rxjs/_esm2015/internal/Observer.js","node_modules/rxjs/_esm2015/internal/util/isArray.js","node_modules/rxjs/_esm2015/internal/util/isObject.js","node_modules/rxjs/_esm2015/internal/util/UnsubscriptionError.js","node_modules/rxjs/_esm2015/internal/Subscription.js","node_modules/rxjs/_esm2015/internal/symbol/rxSubscriber.js","node_modules/rxjs/_esm2015/internal/Subscriber.js","node_modules/rxjs/_esm2015/internal/util/canReportError.js","node_modules/rxjs/_esm2015/internal/util/toSubscriber.js","node_modules/rxjs/_esm2015/internal/symbol/observable.js","node_modules/rxjs/_esm2015/internal/util/identity.js","node_modules/rxjs/_esm2015/internal/util/pipe.js","node_modules/rxjs/_esm2015/internal/Observable.js","node_modules/rxjs/_esm2015/internal/util/ObjectUnsubscribedError.js","node_modules/rxjs/_esm2015/internal/SubjectSubscription.js","node_modules/rxjs/_esm2015/internal/Subject.js","node_modules/rxjs/_esm2015/internal/operators/refCount.js","node_modules/rxjs/_esm2015/internal/observable/ConnectableObservable.js","node_modules/rxjs/_esm2015/internal/BehaviorSubject.js","node_modules/rxjs/_esm2015/internal/scheduler/Action.js","node_modules/rxjs/_esm2015/internal/scheduler/AsyncAction.js","node_modules/rxjs/_esm2015/internal/scheduler/QueueAction.js","node_modules/rxjs/_esm2015/internal/Scheduler.js","node_modules/rxjs/_esm2015/internal/scheduler/AsyncScheduler.js","node_modules/rxjs/_esm2015/internal/scheduler/QueueScheduler.js","node_modules/rxjs/_esm2015/internal/scheduler/queue.js","node_modules/rxjs/_esm2015/internal/observable/empty.js","node_modules/rxjs/_esm2015/internal/util/isScheduler.js","node_modules/rxjs/_esm2015/internal/util/subscribeToArray.js","node_modules/rxjs/_esm2015/internal/scheduled/scheduleArray.js","node_modules/rxjs/_esm2015/internal/observable/fromArray.js","node_modules/rxjs/_esm2015/internal/observable/of.js","node_modules/rxjs/_esm2015/internal/observable/throwError.js","node_modules/rxjs/_esm2015/internal/Notification.js","node_modules/rxjs/_esm2015/internal/operators/observeOn.js","node_modules/rxjs/_esm2015/internal/ReplaySubject.js","node_modules/rxjs/_esm2015/internal/scheduler/async.js","node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameAction.js","node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameScheduler.js","node_modules/rxjs/_esm2015/internal/scheduler/animationFrame.js","node_modules/rxjs/_esm2015/internal/util/noop.js","node_modules/rxjs/_esm2015/internal/util/isObservable.js","node_modules/rxjs/_esm2015/internal/util/ArgumentOutOfRangeError.js","node_modules/rxjs/_esm2015/internal/util/EmptyError.js","node_modules/rxjs/_esm2015/internal/operators/map.js","node_modules/rxjs/_esm2015/internal/OuterSubscriber.js","node_modules/rxjs/_esm2015/internal/InnerSubscriber.js","node_modules/rxjs/_esm2015/internal/util/subscribeToPromise.js","node_modules/rxjs/_esm2015/internal/symbol/iterator.js","node_modules/rxjs/_esm2015/internal/util/subscribeToIterable.js","node_modules/rxjs/_esm2015/internal/util/subscribeToObservable.js","node_modules/rxjs/_esm2015/internal/util/isArrayLike.js","node_modules/rxjs/_esm2015/internal/util/isPromise.js","node_modules/rxjs/_esm2015/internal/util/subscribeTo.js","node_modules/rxjs/_esm2015/internal/util/subscribeToResult.js","node_modules/rxjs/_esm2015/internal/observable/combineLatest.js","node_modules/rxjs/_esm2015/internal/scheduled/scheduleObservable.js","node_modules/rxjs/_esm2015/internal/scheduled/schedulePromise.js","node_modules/rxjs/_esm2015/internal/scheduled/scheduleIterable.js","node_modules/rxjs/_esm2015/internal/util/isInteropObservable.js","node_modules/rxjs/_esm2015/internal/util/isIterable.js","node_modules/rxjs/_esm2015/internal/scheduled/scheduled.js","node_modules/rxjs/_esm2015/internal/observable/from.js","node_modules/rxjs/_esm2015/internal/operators/mergeMap.js","node_modules/rxjs/_esm2015/internal/operators/mergeAll.js","node_modules/rxjs/_esm2015/internal/operators/concatAll.js","node_modules/rxjs/_esm2015/internal/observable/concat.js","node_modules/rxjs/_esm2015/internal/observable/defer.js","node_modules/rxjs/_esm2015/internal/observable/forkJoin.js","node_modules/rxjs/_esm2015/internal/observable/fromEvent.js","node_modules/rxjs/_esm2015/internal/observable/iif.js","node_modules/rxjs/_esm2015/internal/util/isNumeric.js","node_modules/rxjs/_esm2015/internal/observable/merge.js","node_modules/rxjs/_esm2015/internal/observable/never.js","node_modules/rxjs/_esm2015/internal/operators/filter.js","node_modules/rxjs/_esm2015/internal/observable/race.js","node_modules/rxjs/_esm2015/internal/observable/timer.js","node_modules/rxjs/_esm2015/internal/observable/zip.js","node_modules/rxjs/_esm2015/internal/operators/catchError.js","node_modules/rxjs/_esm2015/internal/operators/concatMap.js","node_modules/rxjs/_esm2015/internal/operators/defaultIfEmpty.js","node_modules/rxjs/_esm2015/internal/util/isDate.js","node_modules/rxjs/_esm2015/internal/operators/delay.js","node_modules/rxjs/_esm2015/internal/operators/distinctUntilChanged.js","node_modules/rxjs/_esm2015/internal/operators/throwIfEmpty.js","node_modules/rxjs/_esm2015/internal/operators/take.js","node_modules/rxjs/_esm2015/internal/operators/endWith.js","node_modules/rxjs/_esm2015/internal/operators/finalize.js","node_modules/rxjs/_esm2015/internal/operators/first.js","node_modules/rxjs/_esm2015/internal/operators/takeLast.js","node_modules/rxjs/_esm2015/internal/operators/last.js","node_modules/rxjs/_esm2015/internal/operators/mapTo.js","node_modules/rxjs/_esm2015/internal/operators/scan.js","node_modules/rxjs/_esm2015/internal/operators/pluck.js","node_modules/rxjs/_esm2015/internal/operators/shareReplay.js","node_modules/rxjs/_esm2015/internal/operators/skip.js","node_modules/rxjs/_esm2015/internal/operators/startWith.js","node_modules/rxjs/_esm2015/internal/operators/switchMap.js","node_modules/rxjs/_esm2015/internal/operators/takeUntil.js","node_modules/rxjs/_esm2015/internal/operators/tap.js","node_modules/rxjs/_esm2015/internal/operators/withLatestFrom.js","node_modules/@angular/core/fesm2022/primitives/event-dispatch.mjs","node_modules/@angular/core/fesm2022/core.mjs","node_modules/@angular/common/fesm2022/common.mjs","node_modules/@angular/common/fesm2022/http.mjs","node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs","node_modules/@angular/forms/fesm2022/forms.mjs","node_modules/ngp-image-picker/fesm2020/ngp-image-picker.mjs","node_modules/@kolkov/angular-editor/fesm2020/kolkov-angular-editor.mjs","src/app/bekerwedstrijden/bekerwedstrijden.component.ts","src/app/bekerwedstrijden/bekerwedstrijden.component.html","node_modules/@angular/router/fesm2022/router.mjs","src/app/nhsb/nhsb.component.ts","src/app/nhsb/nhsb.component.html","src/app/services/competitie.service.ts","node_modules/@angular/core/fesm2022/rxjs-interop.mjs","node_modules/@popperjs/core/lib/enums.js","node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","node_modules/@popperjs/core/lib/dom-utils/getWindow.js","node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","node_modules/@popperjs/core/lib/modifiers/applyStyles.js","node_modules/@popperjs/core/lib/utils/getBasePlacement.js","node_modules/@popperjs/core/lib/utils/math.js","node_modules/@popperjs/core/lib/utils/userAgent.js","node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","node_modules/@popperjs/core/lib/dom-utils/contains.js","node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","node_modules/@popperjs/core/lib/utils/within.js","node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","node_modules/@popperjs/core/lib/utils/expandToHashMap.js","node_modules/@popperjs/core/lib/modifiers/arrow.js","node_modules/@popperjs/core/lib/utils/getVariation.js","node_modules/@popperjs/core/lib/modifiers/computeStyles.js","node_modules/@popperjs/core/lib/modifiers/eventListeners.js","node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","node_modules/@popperjs/core/lib/utils/rectToClientRect.js","node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","node_modules/@popperjs/core/lib/utils/computeOffsets.js","node_modules/@popperjs/core/lib/utils/detectOverflow.js","node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","node_modules/@popperjs/core/lib/modifiers/flip.js","node_modules/@popperjs/core/lib/modifiers/offset.js","node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","node_modules/@popperjs/core/lib/utils/getAltAxis.js","node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","node_modules/@popperjs/core/lib/utils/orderModifiers.js","node_modules/@popperjs/core/lib/utils/debounce.js","node_modules/@popperjs/core/lib/utils/mergeByName.js","node_modules/@popperjs/core/lib/createPopper.js","node_modules/@popperjs/core/lib/popper-lite.js","node_modules/@ng-bootstrap/ng-bootstrap/fesm2022/ng-bootstrap.mjs","src/app/yearselector/yearselector.component.ts","src/app/yearselector/yearselector.component.html","src/app/wedstrijdentabel/wedstrijdentabel.component.ts","src/app/wedstrijdentabel/wedstrijdentabel.component.html","src/app/pipes/order-by-pipe.ts","src/app/competitie-speeldag/competitie-speeldag.component.ts","src/app/competitie-speeldag/competitie-speeldag.component.html","src/app/competitie-stand/competitie-stand.component.ts","src/app/competitie-stand/competitie-stand.component.html","src/app/privacystatement/privacystatement.component.ts","src/app/privacystatement/privacystatement.component.html","src/app/home/home.component.ts","src/app/home/home.component.html","enpassantapi.dtos.ts","src/app/agenda/agenda.component.ts","src/app/agenda/agenda.component.html","src/app/services/api.client.provider.service.ts","node_modules/@auth0/angular-jwt/fesm2020/auth0-angular-jwt.mjs","node_modules/@auth0/auth0-spa-js/dist/auth0-spa-js.production.esm.js","node_modules/@auth0/auth0-angular/fesm2020/auth0-auth0-angular.mjs","src/app/services/authservice.service.ts","src/app/services/form-builder-typed.ts","node_modules/ngx-bootstrap/chronos/fesm2022/ngx-bootstrap-chronos.mjs","node_modules/ngx-bootstrap/utils/fesm2022/ngx-bootstrap-utils.mjs","node_modules/ngx-bootstrap/positioning/fesm2022/ngx-bootstrap-positioning.mjs","node_modules/ngx-bootstrap/mini-ngrx/fesm2022/ngx-bootstrap-mini-ngrx.mjs","node_modules/ngx-bootstrap/timepicker/fesm2022/ngx-bootstrap-timepicker.mjs","node_modules/@angular/animations/fesm2022/animations.mjs","node_modules/tslib/tslib.es6.mjs","node_modules/ngx-bootstrap/component-loader/fesm2022/ngx-bootstrap-component-loader.mjs","node_modules/ngx-bootstrap/tooltip/fesm2022/ngx-bootstrap-tooltip.mjs","node_modules/ngx-bootstrap/datepicker/fesm2022/ngx-bootstrap-datepicker.mjs","src/app/artikelen/artikelen.component.ts","src/app/artikelen/artikelen.component.html","src/app/pipes/sanitize-html.pipe.ts","src/app/competitie-speler/competitie-speler.component.ts","src/app/competitie-speler/competitie-speler.component.html","src/app/app-routing.module.ts","src/app/app.component.ts","src/app/app.component.html","node_modules/@angular/common/locales/nl.mjs","node_modules/@angular/common/locales/extra/nl.mjs","node_modules/@angular/animations/fesm2022/browser.mjs","node_modules/@angular/platform-browser/fesm2022/animations.mjs","src/app/app.module.ts","src/environments/environment.ts","src/main.ts"],"sourcesContent":["!function (t, e) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = e() : \"function\" == typeof define && define.amd ? define(e) : (t = \"undefined\" != typeof globalThis ? globalThis : t || self).dayjs = e();\n}(this, function () {\n \"use strict\";\n\n var t = 1e3,\n e = 6e4,\n n = 36e5,\n r = \"millisecond\",\n i = \"second\",\n s = \"minute\",\n u = \"hour\",\n a = \"day\",\n o = \"week\",\n c = \"month\",\n f = \"quarter\",\n h = \"year\",\n d = \"date\",\n l = \"Invalid Date\",\n $ = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,\n y = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,\n M = {\n name: \"en\",\n weekdays: \"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),\n months: \"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),\n ordinal: function (t) {\n var e = [\"th\", \"st\", \"nd\", \"rd\"],\n n = t % 100;\n return \"[\" + t + (e[(n - 20) % 10] || e[n] || e[0]) + \"]\";\n }\n },\n m = function (t, e, n) {\n var r = String(t);\n return !r || r.length >= e ? t : \"\" + Array(e + 1 - r.length).join(n) + t;\n },\n v = {\n s: m,\n z: function (t) {\n var e = -t.utcOffset(),\n n = Math.abs(e),\n r = Math.floor(n / 60),\n i = n % 60;\n return (e <= 0 ? \"+\" : \"-\") + m(r, 2, \"0\") + \":\" + m(i, 2, \"0\");\n },\n m: function t(e, n) {\n if (e.date() < n.date()) return -t(n, e);\n var r = 12 * (n.year() - e.year()) + (n.month() - e.month()),\n i = e.clone().add(r, c),\n s = n - i < 0,\n u = e.clone().add(r + (s ? -1 : 1), c);\n return +(-(r + (n - i) / (s ? i - u : u - i)) || 0);\n },\n a: function (t) {\n return t < 0 ? Math.ceil(t) || 0 : Math.floor(t);\n },\n p: function (t) {\n return {\n M: c,\n y: h,\n w: o,\n d: a,\n D: d,\n h: u,\n m: s,\n s: i,\n ms: r,\n Q: f\n }[t] || String(t || \"\").toLowerCase().replace(/s$/, \"\");\n },\n u: function (t) {\n return void 0 === t;\n }\n },\n g = \"en\",\n D = {};\n D[g] = M;\n var p = \"$isDayjsObject\",\n S = function (t) {\n return t instanceof _ || !(!t || !t[p]);\n },\n w = function t(e, n, r) {\n var i;\n if (!e) return g;\n if (\"string\" == typeof e) {\n var s = e.toLowerCase();\n D[s] && (i = s), n && (D[s] = n, i = s);\n var u = e.split(\"-\");\n if (!i && u.length > 1) return t(u[0]);\n } else {\n var a = e.name;\n D[a] = e, i = a;\n }\n return !r && i && (g = i), i || !r && g;\n },\n O = function (t, e) {\n if (S(t)) return t.clone();\n var n = \"object\" == typeof e ? e : {};\n return n.date = t, n.args = arguments, new _(n);\n },\n b = v;\n b.l = w, b.i = S, b.w = function (t, e) {\n return O(t, {\n locale: e.$L,\n utc: e.$u,\n x: e.$x,\n $offset: e.$offset\n });\n };\n var _ = function () {\n function M(t) {\n this.$L = w(t.locale, null, !0), this.parse(t), this.$x = this.$x || t.x || {}, this[p] = !0;\n }\n var m = M.prototype;\n return m.parse = function (t) {\n this.$d = function (t) {\n var e = t.date,\n n = t.utc;\n if (null === e) return new Date(NaN);\n if (b.u(e)) return new Date();\n if (e instanceof Date) return new Date(e);\n if (\"string\" == typeof e && !/Z$/i.test(e)) {\n var r = e.match($);\n if (r) {\n var i = r[2] - 1 || 0,\n s = (r[7] || \"0\").substring(0, 3);\n return n ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)) : new Date(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s);\n }\n }\n return new Date(e);\n }(t), this.init();\n }, m.init = function () {\n var t = this.$d;\n this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(), this.$H = t.getHours(), this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t.getMilliseconds();\n }, m.$utils = function () {\n return b;\n }, m.isValid = function () {\n return !(this.$d.toString() === l);\n }, m.isSame = function (t, e) {\n var n = O(t);\n return this.startOf(e) <= n && n <= this.endOf(e);\n }, m.isAfter = function (t, e) {\n return O(t) < this.startOf(e);\n }, m.isBefore = function (t, e) {\n return this.endOf(e) < O(t);\n }, m.$g = function (t, e, n) {\n return b.u(t) ? this[e] : this.set(n, t);\n }, m.unix = function () {\n return Math.floor(this.valueOf() / 1e3);\n }, m.valueOf = function () {\n return this.$d.getTime();\n }, m.startOf = function (t, e) {\n var n = this,\n r = !!b.u(e) || e,\n f = b.p(t),\n l = function (t, e) {\n var i = b.w(n.$u ? Date.UTC(n.$y, e, t) : new Date(n.$y, e, t), n);\n return r ? i : i.endOf(a);\n },\n $ = function (t, e) {\n return b.w(n.toDate()[t].apply(n.toDate(\"s\"), (r ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e)), n);\n },\n y = this.$W,\n M = this.$M,\n m = this.$D,\n v = \"set\" + (this.$u ? \"UTC\" : \"\");\n switch (f) {\n case h:\n return r ? l(1, 0) : l(31, 11);\n case c:\n return r ? l(1, M) : l(0, M + 1);\n case o:\n var g = this.$locale().weekStart || 0,\n D = (y < g ? y + 7 : y) - g;\n return l(r ? m - D : m + (6 - D), M);\n case a:\n case d:\n return $(v + \"Hours\", 0);\n case u:\n return $(v + \"Minutes\", 1);\n case s:\n return $(v + \"Seconds\", 2);\n case i:\n return $(v + \"Milliseconds\", 3);\n default:\n return this.clone();\n }\n }, m.endOf = function (t) {\n return this.startOf(t, !1);\n }, m.$set = function (t, e) {\n var n,\n o = b.p(t),\n f = \"set\" + (this.$u ? \"UTC\" : \"\"),\n l = (n = {}, n[a] = f + \"Date\", n[d] = f + \"Date\", n[c] = f + \"Month\", n[h] = f + \"FullYear\", n[u] = f + \"Hours\", n[s] = f + \"Minutes\", n[i] = f + \"Seconds\", n[r] = f + \"Milliseconds\", n)[o],\n $ = o === a ? this.$D + (e - this.$W) : e;\n if (o === c || o === h) {\n var y = this.clone().set(d, 1);\n y.$d[l]($), y.init(), this.$d = y.set(d, Math.min(this.$D, y.daysInMonth())).$d;\n } else l && this.$d[l]($);\n return this.init(), this;\n }, m.set = function (t, e) {\n return this.clone().$set(t, e);\n }, m.get = function (t) {\n return this[b.p(t)]();\n }, m.add = function (r, f) {\n var d,\n l = this;\n r = Number(r);\n var $ = b.p(f),\n y = function (t) {\n var e = O(l);\n return b.w(e.date(e.date() + Math.round(t * r)), l);\n };\n if ($ === c) return this.set(c, this.$M + r);\n if ($ === h) return this.set(h, this.$y + r);\n if ($ === a) return y(1);\n if ($ === o) return y(7);\n var M = (d = {}, d[s] = e, d[u] = n, d[i] = t, d)[$] || 1,\n m = this.$d.getTime() + r * M;\n return b.w(m, this);\n }, m.subtract = function (t, e) {\n return this.add(-1 * t, e);\n }, m.format = function (t) {\n var e = this,\n n = this.$locale();\n if (!this.isValid()) return n.invalidDate || l;\n var r = t || \"YYYY-MM-DDTHH:mm:ssZ\",\n i = b.z(this),\n s = this.$H,\n u = this.$m,\n a = this.$M,\n o = n.weekdays,\n c = n.months,\n f = n.meridiem,\n h = function (t, n, i, s) {\n return t && (t[n] || t(e, r)) || i[n].slice(0, s);\n },\n d = function (t) {\n return b.s(s % 12 || 12, t, \"0\");\n },\n $ = f || function (t, e, n) {\n var r = t < 12 ? \"AM\" : \"PM\";\n return n ? r.toLowerCase() : r;\n };\n return r.replace(y, function (t, r) {\n return r || function (t) {\n switch (t) {\n case \"YY\":\n return String(e.$y).slice(-2);\n case \"YYYY\":\n return b.s(e.$y, 4, \"0\");\n case \"M\":\n return a + 1;\n case \"MM\":\n return b.s(a + 1, 2, \"0\");\n case \"MMM\":\n return h(n.monthsShort, a, c, 3);\n case \"MMMM\":\n return h(c, a);\n case \"D\":\n return e.$D;\n case \"DD\":\n return b.s(e.$D, 2, \"0\");\n case \"d\":\n return String(e.$W);\n case \"dd\":\n return h(n.weekdaysMin, e.$W, o, 2);\n case \"ddd\":\n return h(n.weekdaysShort, e.$W, o, 3);\n case \"dddd\":\n return o[e.$W];\n case \"H\":\n return String(s);\n case \"HH\":\n return b.s(s, 2, \"0\");\n case \"h\":\n return d(1);\n case \"hh\":\n return d(2);\n case \"a\":\n return $(s, u, !0);\n case \"A\":\n return $(s, u, !1);\n case \"m\":\n return String(u);\n case \"mm\":\n return b.s(u, 2, \"0\");\n case \"s\":\n return String(e.$s);\n case \"ss\":\n return b.s(e.$s, 2, \"0\");\n case \"SSS\":\n return b.s(e.$ms, 3, \"0\");\n case \"Z\":\n return i;\n }\n return null;\n }(t) || i.replace(\":\", \"\");\n });\n }, m.utcOffset = function () {\n return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);\n }, m.diff = function (r, d, l) {\n var $,\n y = this,\n M = b.p(d),\n m = O(r),\n v = (m.utcOffset() - this.utcOffset()) * e,\n g = this - m,\n D = function () {\n return b.m(y, m);\n };\n switch (M) {\n case h:\n $ = D() / 12;\n break;\n case c:\n $ = D();\n break;\n case f:\n $ = D() / 3;\n break;\n case o:\n $ = (g - v) / 6048e5;\n break;\n case a:\n $ = (g - v) / 864e5;\n break;\n case u:\n $ = g / n;\n break;\n case s:\n $ = g / e;\n break;\n case i:\n $ = g / t;\n break;\n default:\n $ = g;\n }\n return l ? $ : b.a($);\n }, m.daysInMonth = function () {\n return this.endOf(c).$D;\n }, m.$locale = function () {\n return D[this.$L];\n }, m.locale = function (t, e) {\n if (!t) return this.$L;\n var n = this.clone(),\n r = w(t, e, !0);\n return r && (n.$L = r), n;\n }, m.clone = function () {\n return b.w(this.$d, this);\n }, m.toDate = function () {\n return new Date(this.valueOf());\n }, m.toJSON = function () {\n return this.isValid() ? this.toISOString() : null;\n }, m.toISOString = function () {\n return this.$d.toISOString();\n }, m.toString = function () {\n return this.$d.toUTCString();\n }, M;\n }(),\n k = _.prototype;\n return O.prototype = k, [[\"$ms\", r], [\"$s\", i], [\"$m\", s], [\"$H\", u], [\"$W\", a], [\"$M\", c], [\"$y\", h], [\"$D\", d]].forEach(function (t) {\n k[t[1]] = function (e) {\n return this.$g(e, t[0], t[1]);\n };\n }), O.extend = function (t, e) {\n return t.$i || (t(e, _, O), t.$i = !0), O;\n }, O.locale = w, O.isDayjs = S, O.unix = function (t) {\n return O(1e3 * t);\n }, O.en = D[g], O.Ls = D, O.p = {}, O;\n});","\"use strict\";\n\nvar __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.chop = exports.lastRightPart = exports.lastLeftPart = exports.rightPart = exports.leftPart = exports.splitOnLast = exports.splitOnFirst = exports.css = exports.nameOf = exports.sanitize = exports.map = exports.toKebabCase = exports.toPascalCase = exports.toCamelCase = exports.createError = exports.isFormData = exports.createFieldError = exports.createErrorStatus = exports.ApiResult = exports.getResponseStatus = exports.getMethod = exports.JsonServiceClient = exports.GetAccessTokenResponse = exports.HttpMethods = exports.ServerEventUser = exports.GetEventSubscribers = exports.UpdateEventSubscriberResponse = exports.UpdateEventSubscriber = exports.ServerEventReceiver = exports.ServerEventsClient = exports.ReadyState = exports.SingletonInstanceResolver = exports.NewInstanceResolver = exports.MetadataType = exports.MetadataPropertyType = exports.MetadataAttribute = exports.MetadataDataMember = exports.MetadataDataContract = exports.MetadataTypeName = exports.MetadataTypes = exports.MetadataOperationType = exports.MetadataRoute = exports.MetadataTypesConfig = exports.GetNavItemsResponse = exports.GetNavItems = exports.NavItem = exports.EmptyResponse = exports.ErrorResponse = exports.ResponseError = exports.ResponseStatus = void 0;\nexports.sanitizeFormData = exports.serializeToFormData = exports.serializeToUrlEncoded = exports.serializeToObject = exports.serializeForm = exports.ajaxSubmit = exports.formSubmit = exports.toVarNames = exports.bootstrapForm = exports.bindHandlers = exports.bootstrap = exports.delaySet = exports.on = exports.$$ = exports.$1 = exports.createElement = exports.toLocalISOString = exports.timeFmt12 = exports.dateFmtHM = exports.dateFmt = exports.padInt = exports.toDateFmt = exports.toDate = exports.isDate = exports.errorResponse = exports.errorResponseExcept = exports.errorResponseSummary = exports.toObject = exports.toFormData = exports.parseResponseStatus = exports.getField = exports.normalize = exports.normalizeKey = exports.parseCookie = exports.tryDecode = exports.stripQuotes = exports.bytesToBase64 = exports.appendQueryString = exports.createUrl = exports.createPath = exports.combinePaths = exports.queryString = exports.humanify = exports.splitTitleCase = exports.isDigit = exports.isLower = exports.isUpper = exports.ucFirst = exports.humanize = exports.onlyProps = void 0;\nexports.alignCenter = exports.alignLeft = exports.uniqueKeys = exports.JSV = exports.StringBuffer = exports.toBase64String = exports.toByteArray = exports.fromByteArray = exports.toGuid = exports.fromGuid = exports.toTimeSpan = exports.fromTimeSpan = exports.toDateTime = exports.fromDateTime = exports.isNullOrEmpty = exports.indexOfAny = exports.htmlAttrs = exports.enc = exports.uniq = exports.flatMap = exports.toTimeSpanFmt = exports.toXsdDuration = exports.fromXsdDuration = exports.classNames = exports.NavOptions = exports.UserAttributes = exports.LinkButtonDefaults = exports.NavButtonGroupDefaults = exports.NavbarDefaults = exports.NavLinkDefaults = exports.NavDefaults = exports.btnClasses = exports.btnSizeClass = exports.BootstrapSizes = exports.btnColorClass = exports.BootstrapColors = exports.activeClass = exports.activeClassNav = exports.apiValueFmt = exports.apiValue = exports.mapGet = exports.resolve = exports.each = exports.apply = exports.omit = exports.pick = exports.safeVarName = exports.trimEnd = exports.populateForm = exports.triggerEvent = void 0;\nexports.Inspect = exports.createBus = exports.EventBus = exports.alignAuto = exports.alignRight = void 0;\nfunction nodeRequire() {\n //node require(), using dynamic access to fix web ng aot build\n try {\n let isNode = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node !== 'undefined';\n if (isNode) return eval('require');\n return null;\n } catch (e) {\n return null;\n }\n}\nlet R = nodeRequire();\nif (R) R('cross-fetch/polyfill'); //fetch polyfill only required for node.js\nclass ResponseStatus {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.ResponseStatus = ResponseStatus;\nclass ResponseError {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.ResponseError = ResponseError;\nclass ErrorResponse {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.ErrorResponse = ErrorResponse;\nclass EmptyResponse {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.EmptyResponse = EmptyResponse;\nclass NavItem {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.NavItem = NavItem;\nclass GetNavItems {\n constructor(init) {\n Object.assign(this, init);\n }\n createResponse() {\n return new GetNavItemsResponse();\n }\n getTypeName() {\n return 'GetNavItems';\n }\n getMethod() {\n return 'GET';\n }\n}\nexports.GetNavItems = GetNavItems;\nclass GetNavItemsResponse {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.GetNavItemsResponse = GetNavItemsResponse;\nclass MetadataTypesConfig {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataTypesConfig = MetadataTypesConfig;\nclass MetadataRoute {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataRoute = MetadataRoute;\nclass MetadataOperationType {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataOperationType = MetadataOperationType;\nclass MetadataTypes {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataTypes = MetadataTypes;\nclass MetadataTypeName {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataTypeName = MetadataTypeName;\nclass MetadataDataContract {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataDataContract = MetadataDataContract;\nclass MetadataDataMember {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataDataMember = MetadataDataMember;\nclass MetadataAttribute {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataAttribute = MetadataAttribute;\nclass MetadataPropertyType {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataPropertyType = MetadataPropertyType;\nclass MetadataType {\n constructor(init) {\n Object.assign(this, init);\n }\n}\nexports.MetadataType = MetadataType;\nclass NewInstanceResolver {\n tryResolve(ctor) {\n return new ctor();\n }\n}\nexports.NewInstanceResolver = NewInstanceResolver;\nclass SingletonInstanceResolver {\n tryResolve(ctor) {\n return ctor.instance || (ctor.instance = new ctor());\n }\n}\nexports.SingletonInstanceResolver = SingletonInstanceResolver;\nfunction eventMessageType(evt) {\n switch (evt) {\n case 'onConnect':\n return 'ServerEventConnect';\n case 'onHeartbeat':\n return 'ServerEventHeartbeat';\n case 'onJoin':\n return 'ServerEventJoin';\n case 'onLeave':\n return 'ServerEventLeave';\n case 'onUpdate':\n return 'ServerEventUpdate';\n }\n return null;\n}\n/**\r\n * EventSource\r\n */\nvar ReadyState;\n(function (ReadyState) {\n ReadyState[ReadyState[\"CONNECTING\"] = 0] = \"CONNECTING\";\n ReadyState[ReadyState[\"OPEN\"] = 1] = \"OPEN\";\n ReadyState[ReadyState[\"CLOSED\"] = 2] = \"CLOSED\";\n})(ReadyState = exports.ReadyState || (exports.ReadyState = {}));\nclass ServerEventsClient {\n constructor(baseUrl, channels, options = {}, eventSource = null) {\n this.channels = channels;\n this.options = options;\n this.eventSource = eventSource;\n this.onMessage = e => {\n if (typeof document == \"undefined\") {\n //node\n //latest node-fetch + eventsource doesn't split SSE messages properly\n let requireSplitPos = e.data ? e.data.indexOf('\\n') : -1;\n if (requireSplitPos >= 0) {\n let data = e.data;\n let lastEventId = e.lastEventId;\n let e1 = Object.assign({}, {\n lastEventId,\n data: data.substring(0, requireSplitPos)\n }),\n e2 = Object.assign({}, {\n lastEventId,\n data: data.substring(requireSplitPos + 1)\n });\n this._onMessage(e1);\n this._onMessage(e2);\n return;\n }\n }\n this._onMessage(e);\n };\n this._onMessage = e => {\n if (this.stopped) return;\n let opt = this.options;\n if (typeof document == \"undefined\") {\n var document = {\n querySelectorAll: sel => []\n };\n }\n let $ = document.querySelectorAll.bind(document);\n let parts = splitOnFirst(e.data, \" \");\n let channel = null;\n let selector = parts[0];\n let selParts = splitOnFirst(selector, \"@\");\n if (selParts.length > 1) {\n channel = selParts[0];\n selector = selParts[1];\n }\n const json = parts[1];\n let body = null;\n try {\n body = json ? JSON.parse(json) : null;\n } catch (ignore) {}\n parts = splitOnFirst(selector, \".\");\n if (parts.length <= 1) throw \"invalid selector format: \" + selector;\n let op = parts[0],\n target = parts[1].replace(new RegExp(\"%20\", \"g\"), \" \");\n const tokens = splitOnFirst(target, \"$\");\n const [cmd, cssSelector] = tokens;\n const els = cssSelector && $(cssSelector);\n const el = els && els[0];\n const eventId = parseInt(e.lastEventId);\n const data = e.data;\n const type = eventMessageType(cmd) || \"ServerEventMessage\";\n const request = {\n eventId,\n data,\n type,\n channel,\n selector,\n json,\n body,\n op,\n target: tokens[0],\n cssSelector,\n meta: {}\n };\n const mergedBody = typeof body == \"object\" ? Object.assign({}, request, body) : request;\n if (opt.validate && opt.validate(request) === false) return;\n let headers = new Headers();\n headers.set(\"Content-Type\", \"text/plain\");\n if (op === \"cmd\") {\n if (cmd === \"onConnect\") {\n this.connectionInfo = mergedBody;\n if (typeof body.heartbeatIntervalMs == \"string\") this.connectionInfo.heartbeatIntervalMs = parseInt(body.heartbeatIntervalMs);\n if (typeof body.idleTimeoutMs == \"string\") this.connectionInfo.idleTimeoutMs = parseInt(body.idleTimeoutMs);\n Object.assign(opt, body);\n let fn = opt.handlers[\"onConnect\"];\n if (fn) {\n fn.call(el || document.body, this.connectionInfo, request);\n if (this.stopped) return;\n }\n if (opt.heartbeatUrl) {\n if (opt.heartbeat) {\n clearInterval(opt.heartbeat);\n }\n opt.heartbeat = setInterval(() => {\n if (this.eventSource.readyState === EventSource.CLOSED) {\n clearInterval(opt.heartbeat);\n const stopFn = opt.handlers[\"onStop\"];\n if (stopFn != null) stopFn.apply(this.eventSource);\n this.reconnectServerEvents({\n error: new Error(\"EventSource is CLOSED\")\n });\n return;\n }\n fetch(new Request(opt.heartbeatUrl, {\n method: \"POST\",\n mode: \"cors\",\n headers: headers,\n credentials: this.serviceClient.credentials\n })).then(res => {\n if (!res.ok) throw new Error(`${res.status} - ${res.statusText}`);\n }).catch(error => this.reconnectServerEvents({\n error\n }));\n }, this.connectionInfo && this.connectionInfo.heartbeatIntervalMs || opt.heartbeatIntervalMs || 10000);\n }\n if (opt.unRegisterUrl) {\n if (typeof window != \"undefined\") {\n window.onunload = () => {\n if (navigator.sendBeacon) {\n // Chrome https://developers.google.com/web/updates/2019/12/chrome-80-deps-rems\n this.stopped = true;\n if (this.eventSource) this.eventSource.close();\n navigator.sendBeacon(opt.unRegisterUrl);\n } else {\n this.stop();\n }\n };\n }\n }\n this.updateSubscriberUrl = opt.updateSubscriberUrl;\n this.updateChannels((opt.channels || \"\").split(\",\"));\n } else {\n let isCmdMsg = cmd == \"onJoin\" || cmd == \"onLeave\" || cmd == \"onUpdate\";\n let fn = opt.handlers[cmd];\n if (fn) {\n if (isCmdMsg) {\n fn.call(el || document.body, mergedBody);\n } else {\n fn.call(el || document.body, body, request);\n }\n } else {\n if (!isCmdMsg) {\n //global receiver\n let r = opt.receivers && opt.receivers[\"cmd\"];\n this.invokeReceiver(r, cmd, el, request, \"cmd\");\n }\n }\n if (isCmdMsg) {\n fn = opt.handlers[\"onCommand\"];\n if (fn) {\n fn.call(el || document.body, mergedBody);\n }\n }\n }\n } else if (op === \"trigger\") {\n this.raiseEvent(target, request);\n } else if (op === \"css\") {\n css(els || $(\"body\"), cmd, body);\n }\n //Named Receiver\n let r = opt.receivers && opt.receivers[op];\n this.invokeReceiver(r, cmd, el, request, op);\n if (!eventMessageType(cmd)) {\n let fn = opt.handlers[\"onMessage\"];\n if (fn) {\n fn.call(el || document.body, mergedBody);\n }\n }\n if (opt.onTick) opt.onTick();\n };\n this.onError = error => {\n if (this.stopped) return;\n if (!error) error = event;\n let fn = this.options.onException;\n if (fn != null) fn.call(this.eventSource, error);\n if (this.options.onTick) this.options.onTick();\n };\n if (this.channels.length === 0) throw \"at least 1 channel is required\";\n this.resolver = this.options.resolver || new NewInstanceResolver();\n this.eventStreamUri = combinePaths(baseUrl, \"event-stream\") + \"?\";\n this.updateChannels(channels);\n this.serviceClient = new JsonServiceClient(baseUrl);\n this.listeners = {};\n this.withCredentials = true;\n if (!this.options.handlers) this.options.handlers = {};\n }\n getEventSourceOptions() {\n return {\n withCredentials: this.withCredentials\n };\n }\n reconnectServerEvents(opt = {}) {\n if (this.stopped) return;\n if (opt.error) this.onError(opt.error);\n const hold = this.eventSource;\n let url = opt.url || this.eventStreamUri || hold.url;\n if (this.options.resolveStreamUrl != null) {\n url = this.options.resolveStreamUrl(url);\n }\n const es = this.EventSource ? new this.EventSource(url, this.getEventSourceOptions()) : new EventSource(url, this.getEventSourceOptions());\n es.addEventListener('error', e => (opt.onerror || hold.onerror || this.onError)(e));\n es.addEventListener('message', opt.onmessage || hold.onmessage || this.onMessage);\n let fn = this.options.onReconnect;\n if (fn != null) fn.call(es, opt.error);\n if (hold.removeEventListener) {\n hold.removeEventListener('error', this.onError);\n hold.removeEventListener('message', this.onMessage);\n }\n hold.close();\n return this.eventSource = es;\n }\n start() {\n this.stopped = false;\n if (this.eventSource == null || this.eventSource.readyState === EventSource.CLOSED) {\n let url = this.eventStreamUri;\n if (this.options.resolveStreamUrl != null) {\n url = this.options.resolveStreamUrl(url);\n }\n this.eventSource = this.EventSource ? new this.EventSource(url, this.getEventSourceOptions()) : new EventSource(url, this.getEventSourceOptions());\n this.eventSource.addEventListener('error', this.onError);\n this.eventSource.addEventListener('message', e => this.onMessage(e));\n }\n return this;\n }\n stop() {\n this.stopped = true;\n if (this.eventSource) {\n this.eventSource.close();\n }\n let opt = this.options;\n if (opt && opt.heartbeat) {\n clearInterval(opt.heartbeat);\n }\n let hold = this.connectionInfo;\n if (hold == null || hold.unRegisterUrl == null) return new Promise((resolve, reject) => resolve());\n this.connectionInfo = null;\n return fetch(new Request(hold.unRegisterUrl, {\n method: \"POST\",\n mode: \"cors\",\n credentials: this.serviceClient.credentials\n })).then(res => {\n if (!res.ok) throw new Error(`${res.status} - ${res.statusText}`);\n }).catch(this.onError);\n }\n invokeReceiver(r, cmd, el, request, name) {\n if (r) {\n if (typeof r == \"function\") {\n r = this.resolver.tryResolve(r);\n }\n cmd = cmd.replace(\"-\", \"\");\n r.client = this;\n r.request = request;\n if (typeof r[cmd] == \"function\") {\n r[cmd].call(el || r, request.body, request);\n } else if (cmd in r) {\n r[cmd] = request.body;\n } else {\n let metaProp = Object.getOwnPropertyDescriptor(r, cmd);\n if (metaProp != null) {\n if (metaProp.set) {\n metaProp.set(request.body);\n } else if (metaProp.writable) {\n r[cmd] = request.body;\n }\n return;\n }\n let cmdLower = cmd.toLowerCase();\n for (let k in r) {\n if (k.toLowerCase() == cmdLower) {\n if (typeof r[k] == \"function\") {\n r[k].call(el || r, request.body, request);\n } else {\n r[k] = request.body;\n }\n return;\n }\n }\n let noSuchMethod = r[\"noSuchMethod\"];\n if (typeof noSuchMethod == \"function\") {\n noSuchMethod.call(el || r, request.target, request);\n }\n }\n }\n }\n hasConnected() {\n return this.connectionInfo != null;\n }\n registerHandler(name, fn) {\n if (!this.options.handlers) this.options.handlers = {};\n this.options.handlers[name] = fn;\n return this;\n }\n setResolver(resolver) {\n this.options.resolver = resolver;\n return this;\n }\n registerReceiver(receiver) {\n return this.registerNamedReceiver(\"cmd\", receiver);\n }\n registerNamedReceiver(name, receiver) {\n if (!this.options.receivers) this.options.receivers = {};\n this.options.receivers[name] = receiver;\n return this;\n }\n unregisterReceiver(name = \"cmd\") {\n if (this.options.receivers) {\n delete this.options.receivers[name];\n }\n return this;\n }\n updateChannels(channels) {\n this.channels = channels;\n const url = this.eventSource != null ? this.eventSource.url : this.eventStreamUri;\n this.eventStreamUri = url.substring(0, Math.min(url.indexOf(\"?\"), url.length)) + \"?channels=\" + channels.join(\",\") + \"&t=\" + new Date().getTime();\n }\n update(subscribe, unsubscribe) {\n let sub = typeof subscribe == \"string\" ? subscribe.split(',') : subscribe;\n let unsub = typeof unsubscribe == \"string\" ? unsubscribe.split(',') : unsubscribe;\n let channels = [];\n for (let i in this.channels) {\n let c = this.channels[i];\n if (unsub == null || unsub.indexOf(c) === -1) {\n channels.push(c);\n }\n }\n if (sub) {\n for (let i in sub) {\n let c = sub[i];\n if (channels.indexOf(c) === -1) {\n channels.push(c);\n }\n }\n }\n this.updateChannels(channels);\n }\n addListener(eventName, handler) {\n let handlers = this.listeners[eventName] || (this.listeners[eventName] = []);\n handlers.push(handler);\n return this;\n }\n removeListener(eventName, handler) {\n let handlers = this.listeners[eventName];\n if (handlers) {\n let pos = handlers.indexOf(handler);\n if (pos >= 0) {\n handlers.splice(pos, 1);\n }\n }\n return this;\n }\n raiseEvent(eventName, msg) {\n let handlers = this.listeners[eventName];\n if (handlers) {\n handlers.forEach(x => {\n try {\n x(msg);\n } catch (e) {\n this.onError(e);\n }\n });\n }\n }\n getConnectionInfo() {\n if (this.connectionInfo == null) throw \"Not Connected\";\n return this.connectionInfo;\n }\n getSubscriptionId() {\n return this.getConnectionInfo().id;\n }\n updateSubscriber(request) {\n if (request.id == null) request.id = this.getSubscriptionId();\n return this.serviceClient.post(request).then(x => {\n this.update(request.subscribeChannels, request.unsubscribeChannels);\n }).catch(this.onError);\n }\n subscribeToChannels(...channels) {\n let request = new UpdateEventSubscriber();\n request.id = this.getSubscriptionId();\n request.subscribeChannels = channels;\n return this.serviceClient.post(request).then(x => {\n this.update(channels, null);\n }).catch(this.onError);\n }\n unsubscribeFromChannels(...channels) {\n let request = new UpdateEventSubscriber();\n request.id = this.getSubscriptionId();\n request.unsubscribeChannels = channels;\n return this.serviceClient.post(request).then(x => {\n this.update(null, channels);\n }).catch(this.onError);\n }\n getChannelSubscribers() {\n let request = new GetEventSubscribers();\n request.channels = this.channels;\n return this.serviceClient.get(request).then(r => r.map(x => this.toServerEventUser(x))).catch(e => {\n this.onError(e);\n return [];\n });\n }\n toServerEventUser(map) {\n let channels = map[\"channels\"];\n let to = new ServerEventUser();\n to.userId = map[\"userId\"];\n to.displayName = map[\"displayName\"];\n to.profileUrl = map[\"profileUrl\"];\n to.channels = channels ? channels.split(',') : null;\n for (let k in map) {\n if (k == \"userId\" || k == \"displayName\" || k == \"profileUrl\" || k == \"channels\") continue;\n if (to.meta == null) to.meta = {};\n to.meta[k] = map[k];\n }\n return to;\n }\n}\nexports.ServerEventsClient = ServerEventsClient;\nServerEventsClient.UnknownChannel = \"*\";\nclass ServerEventReceiver {\n noSuchMethod(selector, message) {}\n}\nexports.ServerEventReceiver = ServerEventReceiver;\nclass UpdateEventSubscriber {\n createResponse() {\n return new UpdateEventSubscriberResponse();\n }\n getTypeName() {\n return \"UpdateEventSubscriber\";\n }\n}\nexports.UpdateEventSubscriber = UpdateEventSubscriber;\nclass UpdateEventSubscriberResponse {}\nexports.UpdateEventSubscriberResponse = UpdateEventSubscriberResponse;\nclass GetEventSubscribers {\n createResponse() {\n return [];\n }\n getTypeName() {\n return \"GetEventSubscribers\";\n }\n}\nexports.GetEventSubscribers = GetEventSubscribers;\nclass ServerEventUser {}\nexports.ServerEventUser = ServerEventUser;\nclass HttpMethods {}\nexports.HttpMethods = HttpMethods;\nHttpMethods.Get = \"GET\";\nHttpMethods.Post = \"POST\";\nHttpMethods.Put = \"PUT\";\nHttpMethods.Delete = \"DELETE\";\nHttpMethods.Patch = \"PATCH\";\nHttpMethods.Head = \"HEAD\";\nHttpMethods.Options = \"OPTIONS\";\nHttpMethods.hasRequestBody = method => !(method === \"GET\" || method === \"DELETE\" || method === \"HEAD\" || method === \"OPTIONS\");\nclass GetAccessToken {\n constructor(init) {\n Object.assign(this, init);\n }\n createResponse() {\n return new GetAccessTokenResponse();\n }\n getTypeName() {\n return 'GetAccessToken';\n }\n getMethod() {\n return 'POST';\n }\n}\nclass GetAccessTokenResponse {}\nexports.GetAccessTokenResponse = GetAccessTokenResponse;\nclass JsonServiceClient {\n constructor(baseUrl = \"/\") {\n this.baseUrl = baseUrl;\n this.replyBaseUrl = combinePaths(baseUrl, \"json\", \"reply\") + \"/\";\n this.oneWayBaseUrl = combinePaths(baseUrl, \"json\", \"oneway\") + \"/\";\n this.mode = \"cors\";\n this.credentials = \"include\";\n this.headers = new Headers();\n this.headers.set(\"Content-Type\", \"application/json\");\n this.manageCookies = typeof document == \"undefined\"; //because node-fetch doesn't\n this.cookies = {};\n this.enableAutoRefreshToken = true;\n }\n setCredentials(userName, password) {\n this.userName = userName;\n this.password = password;\n }\n useBasePath(path) {\n this.basePath = path;\n return this;\n }\n set basePath(path) {\n if (!path) {\n this.replyBaseUrl = combinePaths(this.baseUrl, \"json\", \"reply\") + \"/\";\n this.oneWayBaseUrl = combinePaths(this.baseUrl, \"json\", \"oneway\") + \"/\";\n } else {\n if (path[0] != '/') {\n path = '/' + path;\n }\n this.replyBaseUrl = combinePaths(this.baseUrl, path) + \"/\";\n this.oneWayBaseUrl = combinePaths(this.baseUrl, path) + \"/\";\n }\n }\n apply(f) {\n f(this);\n return this;\n }\n get(request, args) {\n return typeof request != \"string\" ? this.fetch(HttpMethods.Get, request, args) : this.fetch(HttpMethods.Get, null, args, this.toAbsoluteUrl(request));\n }\n delete(request, args) {\n return typeof request != \"string\" ? this.fetch(HttpMethods.Delete, request, args) : this.fetch(HttpMethods.Delete, null, args, this.toAbsoluteUrl(request));\n }\n post(request, args) {\n return this.fetch(HttpMethods.Post, request, args);\n }\n postToUrl(url, request, args) {\n return this.fetch(HttpMethods.Post, request, args, this.toAbsoluteUrl(url));\n }\n postBody(request, body, args) {\n return this.fetchBody(HttpMethods.Post, request, body, args);\n }\n put(request, args) {\n return this.fetch(HttpMethods.Put, request, args);\n }\n putToUrl(url, request, args) {\n return this.fetch(HttpMethods.Put, request, args, this.toAbsoluteUrl(url));\n }\n putBody(request, body, args) {\n return this.fetchBody(HttpMethods.Put, request, body, args);\n }\n patch(request, args) {\n return this.fetch(HttpMethods.Patch, request, args);\n }\n patchToUrl(url, request, args) {\n return this.fetch(HttpMethods.Patch, request, args, this.toAbsoluteUrl(url));\n }\n patchBody(request, body, args) {\n return this.fetchBody(HttpMethods.Patch, request, body, args);\n }\n publish(request, args) {\n return this.sendOneWay(request, args);\n }\n sendOneWay(request, args) {\n const url = combinePaths(this.oneWayBaseUrl, nameOf(request));\n return this.fetch(HttpMethods.Post, request, null, url);\n }\n sendAll(requests) {\n if (requests.length == 0) return Promise.resolve([]);\n const url = combinePaths(this.replyBaseUrl, nameOf(requests[0]) + \"[]\");\n return this.fetch(HttpMethods.Post, requests, null, url);\n }\n sendAllOneWay(requests) {\n if (requests.length == 0) return Promise.resolve(void 0);\n const url = combinePaths(this.oneWayBaseUrl, nameOf(requests[0]) + \"[]\");\n return this.fetch(HttpMethods.Post, requests, null, url).then(r => void 0);\n }\n createUrlFromDto(method, request) {\n let url = combinePaths(this.replyBaseUrl, nameOf(request));\n const hasRequestBody = HttpMethods.hasRequestBody(method);\n if (!hasRequestBody) url = appendQueryString(url, request);\n return url;\n }\n toAbsoluteUrl(relativeOrAbsoluteUrl) {\n return relativeOrAbsoluteUrl.startsWith(\"http://\") || relativeOrAbsoluteUrl.startsWith(\"https://\") ? relativeOrAbsoluteUrl : combinePaths(this.baseUrl, relativeOrAbsoluteUrl);\n }\n deleteCookie(name) {\n if (this.manageCookies) {\n delete this.cookies[name];\n } else {\n if (document) {\n document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/';\n }\n }\n }\n createRequest({\n method,\n request,\n url,\n args,\n body\n }) {\n if (!url) url = this.createUrlFromDto(method, request);\n if (args) url = appendQueryString(url, args);\n if (this.bearerToken != null) {\n this.headers.set(\"Authorization\", \"Bearer \" + this.bearerToken);\n } else if (this.userName != null) {\n this.headers.set('Authorization', 'Basic ' + JsonServiceClient.toBase64(`${this.userName}:${this.password}`));\n }\n if (this.manageCookies) {\n let cookies = Object.keys(this.cookies).map(x => {\n let c = this.cookies[x];\n return c.expires && c.expires < new Date() ? null : `${c.name}=${encodeURIComponent(c.value)}`;\n }).filter(x => !!x);\n if (cookies.length > 0) this.headers.set(\"Cookie\", cookies.join(\"; \"));else this.headers.delete(\"Cookie\");\n }\n let headers = new Headers(this.headers);\n let hasRequestBody = HttpMethods.hasRequestBody(method);\n let reqInit = {\n url,\n method: method,\n mode: this.mode,\n credentials: this.credentials,\n headers,\n compress: false // https://github.com/bitinn/node-fetch/issues/93#issuecomment-200791658\n };\n if (hasRequestBody) {\n reqInit.body = body || JSON.stringify(request);\n if (isFormData(body)) {\n reqInit.body = sanitizeFormData(body);\n headers.delete('Content-Type'); //set by FormData\n }\n }\n if (this.requestFilter != null) this.requestFilter(reqInit);\n if (JsonServiceClient.globalRequestFilter != null) JsonServiceClient.globalRequestFilter(reqInit);\n return reqInit;\n }\n json(res) {\n if (this.parseJson) return this.parseJson(res);\n return res.json();\n }\n applyResponseFilters(res) {\n if (this.responseFilter != null) this.responseFilter(res);\n if (JsonServiceClient.globalResponseFilter != null) JsonServiceClient.globalResponseFilter(res);\n }\n createResponse(res, request) {\n if (!res.ok) {\n this.applyResponseFilters(res);\n throw res;\n }\n if (this.manageCookies) {\n let setCookies = [];\n res.headers.forEach((v, k) => {\n switch (k.toLowerCase()) {\n case \"set-cookie\":\n let cookies = v.split(',');\n cookies.forEach(c => setCookies.push(c));\n break;\n }\n });\n setCookies.forEach(x => {\n let cookie = parseCookie(x);\n if (cookie) this.cookies[cookie.name] = cookie;\n });\n }\n res.headers.forEach((v, k) => {\n switch (k.toLowerCase()) {\n case \"x-cookies\":\n if (v.split(',').indexOf('ss-reftok') >= 0) this.useTokenCookie = true;\n break;\n }\n });\n this.applyResponseFilters(res);\n let x = request && typeof request != \"string\" && typeof request.createResponse == 'function' ? request.createResponse() : null;\n if (typeof x === 'string') return res.text().then(o => o);\n let contentType = res.headers.get(\"content-type\");\n let isJson = contentType && contentType.indexOf(\"application/json\") !== -1;\n if (isJson) {\n return this.json(res).then(o => o);\n }\n if (typeof Uint8Array != \"undefined\" && x instanceof Uint8Array) {\n if (typeof res.arrayBuffer != 'function') throw new Error(\"This fetch polyfill does not implement 'arrayBuffer'\");\n return res.arrayBuffer().then(o => new Uint8Array(o));\n } else if (typeof Blob == \"function\" && x instanceof Blob) {\n if (typeof res.blob != 'function') throw new Error(\"This fetch polyfill does not implement 'blob'\");\n return res.blob().then(o => o);\n }\n let contentLength = res.headers.get(\"content-length\");\n if (contentLength === \"0\" || contentLength == null && !isJson) {\n return x;\n }\n return this.json(res).then(o => o); //fallback\n }\n handleError(holdRes, res, type = null) {\n if (res instanceof Error) throw this.raiseError(holdRes, res);\n // res.json can only be called once.\n if (res.bodyUsed) throw this.raiseError(res, createErrorResponse(res.status, res.statusText, type));\n let isErrorResponse = typeof res.json == \"undefined\" && res.responseStatus;\n if (isErrorResponse) {\n return new Promise((resolve, reject) => reject(this.raiseError(null, res)));\n }\n return this.json(res).then(o => {\n let errorDto = sanitize(o);\n if (!errorDto.responseStatus) throw createErrorResponse(res.status, res.statusText, type);\n if (type != null) errorDto.type = type;\n throw errorDto;\n }).catch(error => {\n // No responseStatus body, set from `res` Body object\n if (error instanceof Error || typeof window != \"undefined\" && error instanceof window.DOMException /*MS Edge*/) {\n throw this.raiseError(res, createErrorResponse(res.status, res.statusText, type));\n }\n throw this.raiseError(res, error);\n });\n }\n fetch(method, request, args, url) {\n return this.sendRequest({\n method,\n request,\n args,\n url\n });\n }\n fetchBody(method, request, body, args) {\n let url = combinePaths(this.replyBaseUrl, nameOf(request));\n return this.sendRequest({\n method,\n request: body,\n body: typeof body == \"string\" ? body : isFormData(body) ? body : JSON.stringify(body),\n url: appendQueryString(url, request),\n args,\n returns: request\n });\n }\n sendRequest(info) {\n const req = this.createRequest(info);\n const returns = info.returns || info.request;\n let holdRes = null;\n const resendRequest = () => {\n const req = this.createRequest(info);\n if (this.urlFilter) this.urlFilter(req.url);\n return fetch(req.url, req).then(res => this.createResponse(res, returns)).catch(res => this.handleError(holdRes, res));\n };\n if (this.urlFilter) this.urlFilter(req.url);\n return fetch(req.url, req).then(res => {\n holdRes = res;\n const response = this.createResponse(res, returns);\n return response;\n }).catch(res => {\n if (res.status === 401) {\n if (this.enableAutoRefreshToken && (this.refreshToken || this.useTokenCookie || this.cookies['ss-reftok'] != null)) {\n const jwtReq = new GetAccessToken({\n refreshToken: this.refreshToken,\n useTokenCookie: !!this.useTokenCookie\n });\n let url = this.refreshTokenUri || this.createUrlFromDto(HttpMethods.Post, jwtReq);\n if (this.useTokenCookie) {\n this.bearerToken = null;\n this.headers.delete(\"Authorization\");\n }\n let jwtRequest = this.createRequest({\n method: HttpMethods.Post,\n request: jwtReq,\n args: null,\n url\n });\n return fetch(url, jwtRequest).then(r => this.createResponse(r, jwtReq).then(jwtResponse => {\n this.bearerToken = jwtResponse.accessToken || null;\n return resendRequest();\n })).catch(res => {\n if (this.onAuthenticationRequired) {\n return this.onAuthenticationRequired().then(resendRequest).catch(resHandler => {\n return this.handleError(holdRes, resHandler, \"RefreshTokenException\");\n });\n } else {\n return this.handleError(holdRes, res, \"RefreshTokenException\");\n }\n });\n } else {\n if (this.onAuthenticationRequired) {\n return this.onAuthenticationRequired().then(resendRequest);\n }\n }\n }\n return this.handleError(holdRes, res);\n });\n }\n raiseError(res, error) {\n if (this.exceptionFilter != null) {\n this.exceptionFilter(res, error);\n }\n return error;\n }\n // Generic send that uses APIs preferred HTTP Method (requires v5.13+ DTOs)\n send(request, args, url) {\n return this.sendRequest({\n method: getMethod(request),\n request,\n args,\n url\n });\n }\n // Generic send IReturnVoid that uses APIs preferred HTTP Method (requires v5.13+ DTOs)\n sendVoid(request, args, url) {\n return this.sendRequest({\n method: getMethod(request),\n request,\n args,\n url\n });\n }\n api(request, args, method) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const result = yield this.fetch(getMethod(request, method), request, args);\n return new ApiResult({\n response: result\n });\n } catch (e) {\n return new ApiResult({\n error: getResponseStatus(e)\n });\n }\n });\n }\n apiVoid(request, args, method) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const result = yield this.fetch(getMethod(request, method), request, args);\n return new ApiResult({\n response: result !== null && result !== void 0 ? result : new EmptyResponse()\n });\n } catch (e) {\n return new ApiResult({\n error: getResponseStatus(e)\n });\n }\n });\n }\n apiForm(request, body, args, method) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const result = yield this.fetchBody(getMethod(request, method), request, body, args);\n return new ApiResult({\n response: result\n });\n } catch (e) {\n return new ApiResult({\n error: getResponseStatus(e)\n });\n }\n });\n }\n apiFormVoid(request, body, args, method) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const result = yield this.fetchBody(getMethod(request, method), request, body, args);\n return new ApiResult({\n response: result !== null && result !== void 0 ? result : new EmptyResponse()\n });\n } catch (e) {\n return new ApiResult({\n error: getResponseStatus(e)\n });\n }\n });\n }\n}\nexports.JsonServiceClient = JsonServiceClient;\nfunction getMethod(request, method) {\n return (method !== null && method !== void 0 ? method : typeof request.getMethod == \"function\") ? request.getMethod() : HttpMethods.Post;\n}\nexports.getMethod = getMethod;\nfunction getResponseStatus(e) {\n var _a, _b;\n return (_b = (_a = e.responseStatus) !== null && _a !== void 0 ? _a : e.ResponseStatus) !== null && _b !== void 0 ? _b : e.errorCode ? e : e.message ? createErrorStatus(e.message, e.errorCode) : null;\n}\nexports.getResponseStatus = getResponseStatus;\nclass ApiResult {\n constructor(init) {\n Object.assign(this, init);\n }\n get completed() {\n return this.response != null || this.error != null;\n }\n get failed() {\n var _a, _b;\n return ((_a = this.error) === null || _a === void 0 ? void 0 : _a.errorCode) != null || ((_b = this.error) === null || _b === void 0 ? void 0 : _b.message) != null;\n }\n get succeeded() {\n return !this.failed && this.response != null;\n }\n get errorMessage() {\n var _a;\n return (_a = this.error) === null || _a === void 0 ? void 0 : _a.message;\n }\n get errorCode() {\n var _a;\n return (_a = this.error) === null || _a === void 0 ? void 0 : _a.errorCode;\n }\n get errors() {\n var _a, _b;\n return (_b = (_a = this.error) === null || _a === void 0 ? void 0 : _a.errors) !== null && _b !== void 0 ? _b : [];\n }\n get errorSummary() {\n return this.error != null && this.errors.length == 0 ? this.errorMessage : null;\n }\n fieldError(fieldName) {\n var _a;\n let matchField = fieldName.toLowerCase();\n return (_a = this.errors) === null || _a === void 0 ? void 0 : _a.find(x => x.fieldName.toLowerCase() == matchField);\n }\n fieldErrorMessage(fieldName) {\n var _a;\n return (_a = this.fieldError(fieldName)) === null || _a === void 0 ? void 0 : _a.message;\n }\n hasFieldError(fieldName) {\n return this.fieldError(fieldName) != null;\n }\n showSummary(exceptFields = []) {\n if (!this.failed) return false;\n return exceptFields.every(x => !this.hasFieldError(x));\n }\n summaryMessage(exceptFields = []) {\n if (this.showSummary(exceptFields)) {\n // Return first field error that's not visible\n let fieldSet = exceptFields.map(x => x.toLowerCase());\n let fieldError = fieldSet.find(x => fieldSet.indexOf(x.toLowerCase()) == -1);\n return fieldError !== null && fieldError !== void 0 ? fieldError : this.errorMessage;\n }\n }\n addFieldError(fieldName, message, errorCode = 'Exception') {\n if (!this.error) this.error = new ResponseStatus();\n const fieldError = this.fieldError(fieldName);\n if (fieldError != null) {\n fieldError.errorCode = errorCode;\n fieldError.message = message;\n } else {\n this.error.errors.push(new ResponseError({\n fieldName,\n errorCode,\n message\n }));\n }\n }\n}\nexports.ApiResult = ApiResult;\nfunction createErrorStatus(message, errorCode = 'Exception') {\n return new ResponseStatus({\n errorCode,\n message\n });\n}\nexports.createErrorStatus = createErrorStatus;\nfunction createFieldError(fieldName, message, errorCode = 'Exception') {\n return new ResponseStatus({\n errors: [new ResponseError({\n fieldName,\n errorCode,\n message\n })]\n });\n}\nexports.createFieldError = createFieldError;\nfunction isFormData(body) {\n return typeof window != \"undefined\" && body instanceof FormData;\n}\nexports.isFormData = isFormData;\nfunction createErrorResponse(errorCode, message, type = null) {\n const error = apply(new ErrorResponse(), e => {\n if (type != null) e.type = type;\n e.responseStatus = apply(new ResponseStatus(), status => {\n status.errorCode = errorCode && errorCode.toString();\n status.message = message;\n });\n });\n return error;\n}\nfunction createError(errorCode, message, fieldName) {\n return new ErrorResponse({\n responseStatus: new ResponseStatus({\n errorCode,\n message,\n errors: fieldName ? [new ResponseError({\n errorCode,\n message,\n fieldName\n })] : undefined\n })\n });\n}\nexports.createError = createError;\nfunction toCamelCase(s) {\n return !s ? s : s.charAt(0).toLowerCase() + s.substring(1);\n}\nexports.toCamelCase = toCamelCase;\nfunction toPascalCase(s) {\n return !s ? s : s.charAt(0).toUpperCase() + s.substring(1);\n}\nexports.toPascalCase = toPascalCase;\nfunction toKebabCase(s) {\n return (s || '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nexports.toKebabCase = toKebabCase;\nfunction map(o, f) {\n return o == null ? null : f(o);\n}\nexports.map = map;\nfunction sanitize(status) {\n if (status.responseStatus) return status;\n if (status.errors) return status;\n let to = {};\n for (let k in status) {\n if (status.hasOwnProperty(k)) {\n if (status[k] instanceof Object) to[toCamelCase(k)] = sanitize(status[k]);else to[toCamelCase(k)] = status[k];\n }\n }\n to.errors = [];\n if (status.Errors != null) {\n for (let i = 0, len = status.Errors.length; i < len; i++) {\n let o = status.Errors[i];\n let err = {};\n for (let k in o) err[toCamelCase(k)] = o[k];\n to.errors.push(err);\n }\n }\n return to;\n}\nexports.sanitize = sanitize;\nfunction nameOf(o) {\n if (!o) return \"null\";\n if (typeof o.getTypeName == \"function\") return o.getTypeName();\n let ctor = o && o.constructor;\n if (ctor == null) throw `${o} doesn't have constructor`;\n if (ctor.name) return ctor.name;\n let str = ctor.toString();\n return str.substring(9, str.indexOf(\"(\")); //\"function \".length == 9\n}\nexports.nameOf = nameOf;\n/* utils */\nfunction log(o, prefix = \"LOG\") {\n console.log(prefix, o);\n return o;\n}\nfunction css(selector, name, value) {\n const els = typeof selector == \"string\" ? document.querySelectorAll(selector) : selector;\n for (let i = 0; i < els.length; i++) {\n const el = els[i];\n if (el != null && el.style != null) {\n el.style[name] = value;\n }\n }\n}\nexports.css = css;\nfunction splitOnFirst(s, c) {\n if (!s) return [s];\n let pos = s.indexOf(c);\n return pos >= 0 ? [s.substring(0, pos), s.substring(pos + 1)] : [s];\n}\nexports.splitOnFirst = splitOnFirst;\nfunction splitOnLast(s, c) {\n if (!s) return [s];\n let pos = s.lastIndexOf(c);\n return pos >= 0 ? [s.substring(0, pos), s.substring(pos + 1)] : [s];\n}\nexports.splitOnLast = splitOnLast;\nfunction leftPart(s, needle) {\n if (s == null) return null;\n let pos = s.indexOf(needle);\n return pos == -1 ? s : s.substring(0, pos);\n}\nexports.leftPart = leftPart;\nfunction rightPart(s, needle) {\n if (s == null) return null;\n let pos = s.indexOf(needle);\n return pos == -1 ? s : s.substring(pos + needle.length);\n}\nexports.rightPart = rightPart;\nfunction lastLeftPart(s, needle) {\n if (s == null) return null;\n let pos = s.lastIndexOf(needle);\n return pos == -1 ? s : s.substring(0, pos);\n}\nexports.lastLeftPart = lastLeftPart;\nfunction lastRightPart(s, needle) {\n if (s == null) return null;\n let pos = s.lastIndexOf(needle);\n return pos == -1 ? s : s.substring(pos + needle.length);\n}\nexports.lastRightPart = lastRightPart;\nfunction chop(str, len = 1) {\n len = Math.abs(len);\n return str ? len < str.length ? str.substring(0, str.length - len) : '' : str;\n}\nexports.chop = chop;\nfunction onlyProps(obj, keys) {\n let to = {};\n keys.forEach(key => to[key] = obj[key]);\n return to;\n}\nexports.onlyProps = onlyProps;\nfunction splitCase(t) {\n return typeof t != 'string' ? t : t.replace(/([A-Z]|[0-9]+)/g, ' $1').replace(/_/g, ' ').trim();\n}\nfunction humanize(s) {\n return !s || s.indexOf(' ') >= 0 ? s : splitCase(toPascalCase(s));\n}\nexports.humanize = humanize;\nconst ucFirst = s => s.charAt(0).toUpperCase() + s.substring(1);\nexports.ucFirst = ucFirst;\nconst isUpper = c => c >= 'A' && c <= 'Z';\nexports.isUpper = isUpper;\nconst isLower = c => c >= 'a' && c <= 'z';\nexports.isLower = isLower;\nconst isDigit = c => c >= '0' && c <= '9';\nexports.isDigit = isDigit;\nconst upperOrDigit = c => (0, exports.isUpper)(c) || (0, exports.isDigit)(c);\nfunction splitTitleCase(s) {\n let to = [];\n if (typeof s != 'string') return to;\n let lastSplit = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s[i];\n let prev = i > 0 ? s[i - 1] : null;\n let next = i + 1 < s.length ? s[i + 1] : null;\n if (upperOrDigit(c) && (!upperOrDigit(prev) || !upperOrDigit(next))) {\n to.push(s.substring(lastSplit, i));\n lastSplit = i;\n }\n }\n to.push(s.substring(lastSplit, s.length));\n return to.filter(x => !!x);\n}\nexports.splitTitleCase = splitTitleCase;\nconst humanify = s => !s || s.indexOf(' ') >= 0 ? s : (0, exports.ucFirst)(splitTitleCase(s).join(' '));\nexports.humanify = humanify;\nfunction queryString(url) {\n if (!url || url.indexOf('?') === -1) return {};\n let pairs = splitOnFirst(url, '?')[1].split('&');\n let map = {};\n for (let i = 0; i < pairs.length; ++i) {\n let p = pairs[i].split('=');\n map[p[0]] = p.length > 1 ? decodeURIComponent(p[1].replace(/\\+/g, ' ')) : null;\n }\n return map;\n}\nexports.queryString = queryString;\nfunction combinePaths(...paths) {\n let parts = [],\n i,\n l;\n for (i = 0, l = paths.length; i < l; i++) {\n let arg = paths[i];\n parts = arg.indexOf(\"://\") === -1 ? parts.concat(arg.split(\"/\")) : parts.concat(arg.lastIndexOf(\"/\") === arg.length - 1 ? arg.substring(0, arg.length - 1) : arg);\n }\n let combinedPaths = [];\n for (i = 0, l = parts.length; i < l; i++) {\n let part = parts[i];\n if (!part || part === \".\") continue;\n if (part === \"..\") combinedPaths.pop();else combinedPaths.push(part);\n }\n if (parts[0] === \"\") combinedPaths.unshift(\"\");\n return combinedPaths.join(\"/\") || (combinedPaths.length ? \"/\" : \".\");\n}\nexports.combinePaths = combinePaths;\nfunction createPath(route, args) {\n let argKeys = {};\n for (let k in args) {\n argKeys[k.toLowerCase()] = k;\n }\n let parts = route.split(\"/\");\n let url = \"\";\n for (let i = 0; i < parts.length; i++) {\n let p = parts[i];\n if (p == null) p = \"\";\n if (p[0] === \"{\" && p[p.length - 1] === \"}\") {\n const key = argKeys[p.substring(1, p.length - 1).toLowerCase()];\n if (key) {\n p = args[key];\n delete args[key];\n }\n }\n if (url.length > 0) url += \"/\";\n url += p;\n }\n return url;\n}\nexports.createPath = createPath;\nfunction createUrl(route, args) {\n let url = createPath(route, args);\n return appendQueryString(url, args);\n}\nexports.createUrl = createUrl;\nfunction appendQueryString(url, args) {\n for (let k in args) {\n if (args.hasOwnProperty(k)) {\n let val = args[k];\n if (typeof val == 'undefined') continue;\n url += url.indexOf(\"?\") >= 0 ? \"&\" : \"?\";\n url += k + \"=\" + qsValue(val);\n }\n }\n return url;\n}\nexports.appendQueryString = appendQueryString;\nfunction qsValue(arg) {\n if (arg == null) return \"\";\n if (typeof Uint8Array != \"undefined\" && arg instanceof Uint8Array) return bytesToBase64(arg);\n return encodeURIComponent(arg) || \"\";\n}\n//from: https://github.com/madmurphy/stringview.js/blob/master/stringview.js\nfunction bytesToBase64(aBytes) {\n let eqLen = (3 - aBytes.length % 3) % 3,\n sB64Enc = \"\";\n for (let nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {\n nMod3 = nIdx % 3;\n nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);\n if (nMod3 === 2 || aBytes.length - nIdx === 1) {\n sB64Enc += String.fromCharCode(uint6ToB64(nUint24 >>> 18 & 63), uint6ToB64(nUint24 >>> 12 & 63), uint6ToB64(nUint24 >>> 6 & 63), uint6ToB64(nUint24 & 63));\n nUint24 = 0;\n }\n }\n return eqLen === 0 ? sB64Enc : sB64Enc.substring(0, sB64Enc.length - eqLen) + (eqLen === 1 ? \"=\" : \"==\");\n}\nexports.bytesToBase64 = bytesToBase64;\nfunction uint6ToB64(nUint6) {\n return nUint6 < 26 ? nUint6 + 65 : nUint6 < 52 ? nUint6 + 71 : nUint6 < 62 ? nUint6 - 4 : nUint6 === 62 ? 43 : nUint6 === 63 ? 47 : 65;\n}\nfunction _btoa(base64) {\n return typeof btoa == 'function' ? btoa(base64) : Buffer.from(base64).toString('base64');\n}\nfunction _atob(base64) {\n return typeof atob == 'function' ? atob(base64) : Buffer.from(base64, 'base64').toString();\n}\n//from: http://stackoverflow.com/a/30106551/85785\nJsonServiceClient.toBase64 = str => _btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => String.fromCharCode(new Number('0x' + p1).valueOf())));\nfunction stripQuotes(s) {\n return s && s[0] == '\"' && s[s.length] == '\"' ? s.slice(1, -1) : s;\n}\nexports.stripQuotes = stripQuotes;\nfunction tryDecode(s) {\n try {\n return decodeURIComponent(s);\n } catch (e) {\n return s;\n }\n}\nexports.tryDecode = tryDecode;\nfunction parseCookie(setCookie) {\n if (!setCookie) return null;\n let to = null;\n let pairs = setCookie.split(/; */);\n for (let i = 0; i < pairs.length; i++) {\n let pair = pairs[i];\n let parts = splitOnFirst(pair, '=');\n let name = parts[0].trim();\n let value = parts.length > 1 ? tryDecode(stripQuotes(parts[1].trim())) : null;\n if (i == 0) {\n to = {\n name,\n value,\n path: \"/\"\n };\n } else {\n let lower = name.toLowerCase();\n if (lower == \"httponly\") {\n to.httpOnly = true;\n } else if (lower == \"secure\") {\n to.secure = true;\n } else if (lower == \"expires\") {\n to.expires = new Date(value);\n // MS Edge returns Invalid Date when using '-' in \"12-Mar-2037\"\n if (to.expires.toString() === \"Invalid Date\") {\n to.expires = new Date(value.replace(/-/g, \" \"));\n }\n } else {\n to[name] = value;\n }\n }\n }\n return to;\n}\nexports.parseCookie = parseCookie;\nfunction normalizeKey(key) {\n return key.toLowerCase().replace(/_/g, '');\n}\nexports.normalizeKey = normalizeKey;\nfunction isArray(o) {\n return Object.prototype.toString.call(o) === '[object Array]';\n}\nfunction normalize(dto, deep) {\n if (isArray(dto)) {\n if (!deep) return dto;\n const to = [];\n for (let i = 0; i < dto.length; i++) {\n to[i] = normalize(dto[i], deep);\n }\n return to;\n }\n if (typeof dto != \"object\") return dto;\n let o = {};\n for (let k in dto) {\n o[normalizeKey(k)] = deep ? normalize(dto[k], deep) : dto[k];\n }\n return o;\n}\nexports.normalize = normalize;\nfunction getField(o, name) {\n return o == null || name == null ? null : o[name] || o[Object.keys(o).filter(k => normalizeKey(k) === normalizeKey(name))[0] || ''];\n}\nexports.getField = getField;\nfunction parseResponseStatus(json, defaultMsg = null) {\n try {\n let err = JSON.parse(json);\n return sanitize(err.ResponseStatus || err.responseStatus);\n } catch (e) {\n return {\n message: defaultMsg || e.message || e,\n __error: {\n error: e,\n json: json\n }\n };\n }\n}\nexports.parseResponseStatus = parseResponseStatus;\nfunction toFormData(o) {\n if (typeof window == \"undefined\") return;\n let formData = new FormData();\n for (let name in o) {\n formData.append(name, o[name]);\n }\n return formData;\n}\nexports.toFormData = toFormData;\nfunction toObject(keys) {\n const to = {};\n if (!keys) return to;\n if (typeof keys != \"object\") throw new Error(\"keys must be an Array of object keys\");\n const arr = Array.prototype.slice.call(keys);\n arr.forEach(key => {\n if (this[key]) {\n to[key] = this[key];\n }\n });\n return to;\n}\nexports.toObject = toObject;\nfunction errorResponseSummary() {\n const responseStatus = this.responseStatus || this.ResponseStatus;\n if (responseStatus == null) return undefined;\n const status = responseStatus.ErrorCode ? sanitize(responseStatus) : responseStatus;\n return !status.errors || status.errors.length == 0 ? status.message || status.errorCode : undefined;\n}\nexports.errorResponseSummary = errorResponseSummary;\nfunction errorResponseExcept(fieldNames) {\n const responseStatus = this.responseStatus || this.ResponseStatus;\n if (responseStatus == null) return undefined;\n const status = responseStatus.ErrorCode ? sanitize(responseStatus) : responseStatus;\n const names = toVarNames(fieldNames);\n if (names && !(status.errors == null || status.errors.length == 0)) {\n const lowerFieldsNames = names.map(x => (x || '').toLowerCase());\n for (let field of status.errors) {\n if (lowerFieldsNames.indexOf((field.fieldName || '').toLowerCase()) !== -1) {\n return undefined;\n }\n }\n for (let field of status.errors) {\n if (lowerFieldsNames.indexOf((field.fieldName || '').toLowerCase()) === -1) {\n return field.message || field.errorCode;\n }\n }\n }\n return status.message || status.errorCode || undefined;\n}\nexports.errorResponseExcept = errorResponseExcept;\nfunction errorResponse(fieldName) {\n if (fieldName == null) return errorResponseSummary.call(this);\n const responseStatus = this.responseStatus || this.ResponseStatus;\n if (responseStatus == null) return undefined;\n const status = responseStatus.ErrorCode ? sanitize(responseStatus) : responseStatus;\n if (status.errors == null || status.errors.length == 0) return undefined;\n const field = status.errors.find(x => (x.fieldName || '').toLowerCase() == fieldName.toLowerCase());\n return field ? field.message || field.errorCode : undefined;\n}\nexports.errorResponse = errorResponse;\nfunction isDate(d) {\n return d && Object.prototype.toString.call(d) === \"[object Date]\" && !isNaN(d);\n}\nexports.isDate = isDate;\nfunction toDate(s) {\n return !s ? null : isDate(s) ? s : s[0] == '/' ? new Date(parseFloat(/Date\\(([^)]+)\\)/.exec(s)[1])) : new Date(s);\n}\nexports.toDate = toDate;\nfunction toDateFmt(s) {\n return dateFmt(toDate(s));\n}\nexports.toDateFmt = toDateFmt;\nfunction padInt(n) {\n return n < 10 ? '0' + n : n;\n}\nexports.padInt = padInt;\nfunction dateFmt(d = new Date()) {\n return d.getFullYear() + '/' + padInt(d.getMonth() + 1) + '/' + padInt(d.getDate());\n}\nexports.dateFmt = dateFmt;\nfunction dateFmtHM(d = new Date()) {\n return d.getFullYear() + '/' + padInt(d.getMonth() + 1) + '/' + padInt(d.getDate()) + ' ' + padInt(d.getHours()) + \":\" + padInt(d.getMinutes());\n}\nexports.dateFmtHM = dateFmtHM;\nfunction timeFmt12(d = new Date()) {\n return padInt((d.getHours() + 24) % 12 || 12) + \":\" + padInt(d.getMinutes()) + \":\" + padInt(d.getSeconds()) + \" \" + (d.getHours() > 12 ? \"PM\" : \"AM\");\n}\nexports.timeFmt12 = timeFmt12;\nfunction toLocalISOString(d = new Date()) {\n return `${d.getFullYear()}-${padInt(d.getMonth() + 1)}-${padInt(d.getDate())}T${padInt(d.getHours())}:${padInt(d.getMinutes())}:${padInt(d.getSeconds())}`;\n}\nexports.toLocalISOString = toLocalISOString;\nfunction bsAlert(msg) {\n return '
Progress: {{progress}}%
\n *= 100\">Done processing {{label}} of Angular zone!
\n *\n * \n * \n * `,\n * })\n * export class NgZoneDemo {\n * progress: number = 0;\n * label: string;\n *\n * constructor(private _ngZone: NgZone) {}\n *\n * // Loop inside the Angular zone\n * // so the UI DOES refresh after each setTimeout cycle\n * processWithinAngularZone() {\n * this.label = 'inside';\n * this.progress = 0;\n * this._increaseProgress(() => console.log('Inside Done!'));\n * }\n *\n * // Loop outside of the Angular zone\n * // so the UI DOES NOT refresh after each setTimeout cycle\n * processOutsideOfAngularZone() {\n * this.label = 'outside';\n * this.progress = 0;\n * this._ngZone.runOutsideAngular(() => {\n * this._increaseProgress(() => {\n * // reenter the Angular zone and display done\n * this._ngZone.run(() => { console.log('Outside Done!'); });\n * });\n * });\n * }\n *\n * _increaseProgress(doneCallback: () => void) {\n * this.progress += 1;\n * console.log(`Current progress: ${this.progress}%`);\n *\n * if (this.progress < 100) {\n * window.setTimeout(() => this._increaseProgress(doneCallback), 10);\n * } else {\n * doneCallback();\n * }\n * }\n * }\n * ```\n *\n * @publicApi\n */\nclass NgZone {\n constructor(options) {\n this.hasPendingMacrotasks = false;\n this.hasPendingMicrotasks = false;\n /**\n * Whether there are no outstanding microtasks or macrotasks.\n */\n this.isStable = true;\n /**\n * Notifies when code enters Angular Zone. This gets fired first on VM Turn.\n */\n this.onUnstable = new EventEmitter(false);\n /**\n * Notifies when there is no more microtasks enqueued in the current VM Turn.\n * This is a hint for Angular to do change detection, which may enqueue more microtasks.\n * For this reason this event can fire multiple times per VM Turn.\n */\n this.onMicrotaskEmpty = new EventEmitter(false);\n /**\n * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which\n * implies we are about to relinquish VM turn.\n * This event gets called just once.\n */\n this.onStable = new EventEmitter(false);\n /**\n * Notifies that an error has been delivered.\n */\n this.onError = new EventEmitter(false);\n const {\n enableLongStackTrace = false,\n shouldCoalesceEventChangeDetection = false,\n shouldCoalesceRunChangeDetection = false,\n scheduleInRootZone = SCHEDULE_IN_ROOT_ZONE_DEFAULT\n } = options;\n if (typeof Zone == 'undefined') {\n throw new RuntimeError(908 /* RuntimeErrorCode.MISSING_ZONEJS */, ngDevMode && `In this configuration Angular requires Zone.js`);\n }\n Zone.assertZonePatched();\n const self = this;\n self._nesting = 0;\n self._outer = self._inner = Zone.current;\n // AsyncStackTaggingZoneSpec provides `linked stack traces` to show\n // where the async operation is scheduled. For more details, refer\n // to this article, https://developer.chrome.com/blog/devtools-better-angular-debugging/\n // And we only import this AsyncStackTaggingZoneSpec in development mode,\n // in the production mode, the AsyncStackTaggingZoneSpec will be tree shaken away.\n if (ngDevMode) {\n self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec('Angular'));\n }\n if (Zone['TaskTrackingZoneSpec']) {\n self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']());\n }\n if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {\n self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);\n }\n // if shouldCoalesceRunChangeDetection is true, all tasks including event tasks will be\n // coalesced, so shouldCoalesceEventChangeDetection option is not necessary and can be skipped.\n self.shouldCoalesceEventChangeDetection = !shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;\n self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;\n self.callbackScheduled = false;\n self.scheduleInRootZone = scheduleInRootZone;\n forkInnerZoneWithAngularBehavior(self);\n }\n /**\n This method checks whether the method call happens within an Angular Zone instance.\n */\n static isInAngularZone() {\n // Zone needs to be checked, because this method might be called even when NoopNgZone is used.\n return typeof Zone !== 'undefined' && Zone.current.get(isAngularZoneProperty) === true;\n }\n /**\n Assures that the method is called within the Angular Zone, otherwise throws an error.\n */\n static assertInAngularZone() {\n if (!NgZone.isInAngularZone()) {\n throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to be in Angular Zone, but it is not!');\n }\n }\n /**\n Assures that the method is called outside of the Angular Zone, otherwise throws an error.\n */\n static assertNotInAngularZone() {\n if (NgZone.isInAngularZone()) {\n throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to not be in Angular Zone, but it is!');\n }\n }\n /**\n * Executes the `fn` function synchronously within the Angular zone and returns value returned by\n * the function.\n *\n * Running functions via `run` allows you to reenter Angular zone from a task that was executed\n * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\n *\n * Any future tasks or microtasks scheduled from within this function will continue executing from\n * within the Angular zone.\n *\n * If a synchronous error happens it will be rethrown and not reported via `onError`.\n */\n run(fn, applyThis, applyArgs) {\n return this._inner.run(fn, applyThis, applyArgs);\n }\n /**\n * Executes the `fn` function synchronously within the Angular zone as a task and returns value\n * returned by the function.\n *\n * Running functions via `run` allows you to reenter Angular zone from a task that was executed\n * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\n *\n * Any future tasks or microtasks scheduled from within this function will continue executing from\n * within the Angular zone.\n *\n * If a synchronous error happens it will be rethrown and not reported via `onError`.\n */\n runTask(fn, applyThis, applyArgs, name) {\n const zone = this._inner;\n const task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);\n try {\n return zone.runTask(task, applyThis, applyArgs);\n } finally {\n zone.cancelTask(task);\n }\n }\n /**\n * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not\n * rethrown.\n */\n runGuarded(fn, applyThis, applyArgs) {\n return this._inner.runGuarded(fn, applyThis, applyArgs);\n }\n /**\n * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by\n * the function.\n *\n * Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do\n * work that\n * doesn't trigger Angular change-detection or is subject to Angular's error handling.\n *\n * Any future tasks or microtasks scheduled from within this function will continue executing from\n * outside of the Angular zone.\n *\n * Use {@link #run} to reenter the Angular zone and do work that updates the application model.\n */\n runOutsideAngular(fn) {\n return this._outer.run(fn);\n }\n}\nconst EMPTY_PAYLOAD = {};\nfunction checkStable(zone) {\n // TODO: @JiaLiPassion, should check zone.isCheckStableRunning to prevent\n // re-entry. The case is:\n //\n // @Component({...})\n // export class AppComponent {\n // constructor(private ngZone: NgZone) {\n // this.ngZone.onStable.subscribe(() => {\n // this.ngZone.run(() => console.log('stable'););\n // });\n // }\n //\n // The onStable subscriber run another function inside ngZone\n // which causes `checkStable()` re-entry.\n // But this fix causes some issues in g3, so this fix will be\n // launched in another PR.\n if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {\n try {\n zone._nesting++;\n zone.onMicrotaskEmpty.emit(null);\n } finally {\n zone._nesting--;\n if (!zone.hasPendingMicrotasks) {\n try {\n zone.runOutsideAngular(() => zone.onStable.emit(null));\n } finally {\n zone.isStable = true;\n }\n }\n }\n }\n}\nfunction delayChangeDetectionForEvents(zone) {\n /**\n * We also need to check _nesting here\n * Consider the following case with shouldCoalesceRunChangeDetection = true\n *\n * ngZone.run(() => {});\n * ngZone.run(() => {});\n *\n * We want the two `ngZone.run()` only trigger one change detection\n * when shouldCoalesceRunChangeDetection is true.\n * And because in this case, change detection run in async way(requestAnimationFrame),\n * so we also need to check the _nesting here to prevent multiple\n * change detections.\n */\n if (zone.isCheckStableRunning || zone.callbackScheduled) {\n return;\n }\n zone.callbackScheduled = true;\n function scheduleCheckStable() {\n scheduleCallbackWithRafRace(() => {\n zone.callbackScheduled = false;\n updateMicroTaskStatus(zone);\n zone.isCheckStableRunning = true;\n checkStable(zone);\n zone.isCheckStableRunning = false;\n });\n }\n if (zone.scheduleInRootZone) {\n Zone.root.run(() => {\n scheduleCheckStable();\n });\n } else {\n zone._outer.run(() => {\n scheduleCheckStable();\n });\n }\n updateMicroTaskStatus(zone);\n}\nfunction forkInnerZoneWithAngularBehavior(zone) {\n const delayChangeDetectionForEventsDelegate = () => {\n delayChangeDetectionForEvents(zone);\n };\n const instanceId = ngZoneInstanceId++;\n zone._inner = zone._inner.fork({\n name: 'angular',\n properties: {\n [isAngularZoneProperty]: true,\n [angularZoneInstanceIdProperty]: instanceId,\n [angularZoneInstanceIdProperty + instanceId]: true\n },\n onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {\n // Prevent triggering change detection when the flag is detected.\n if (shouldBeIgnoredByZone(applyArgs)) {\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n }\n try {\n onEnter(zone);\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n } finally {\n if (zone.shouldCoalesceEventChangeDetection && task.type === 'eventTask' || zone.shouldCoalesceRunChangeDetection) {\n delayChangeDetectionForEventsDelegate();\n }\n onLeave(zone);\n }\n },\n onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {\n try {\n onEnter(zone);\n return delegate.invoke(target, callback, applyThis, applyArgs, source);\n } finally {\n if (zone.shouldCoalesceRunChangeDetection &&\n // Do not delay change detection when the task is the scheduler's tick.\n // We need to synchronously trigger the stability logic so that the\n // zone-based scheduler can prevent a duplicate ApplicationRef.tick\n // by first checking if the scheduler tick is running. This does seem a bit roundabout,\n // but we _do_ still want to trigger all the correct events when we exit the zone.run\n // (`onMicrotaskEmpty` and `onStable` _should_ emit; developers can have code which\n // relies on these events happening after change detection runs).\n // Note: `zone.callbackScheduled` is already in delayChangeDetectionForEventsDelegate\n // but is added here as well to prevent reads of applyArgs when not necessary\n !zone.callbackScheduled && !isSchedulerTick(applyArgs)) {\n delayChangeDetectionForEventsDelegate();\n }\n onLeave(zone);\n }\n },\n onHasTask: (delegate, current, target, hasTaskState) => {\n delegate.hasTask(target, hasTaskState);\n if (current === target) {\n // We are only interested in hasTask events which originate from our zone\n // (A child hasTask event is not interesting to us)\n if (hasTaskState.change == 'microTask') {\n zone._hasPendingMicrotasks = hasTaskState.microTask;\n updateMicroTaskStatus(zone);\n checkStable(zone);\n } else if (hasTaskState.change == 'macroTask') {\n zone.hasPendingMacrotasks = hasTaskState.macroTask;\n }\n }\n },\n onHandleError: (delegate, current, target, error) => {\n delegate.handleError(target, error);\n zone.runOutsideAngular(() => zone.onError.emit(error));\n return false;\n }\n });\n}\nfunction updateMicroTaskStatus(zone) {\n if (zone._hasPendingMicrotasks || (zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) && zone.callbackScheduled === true) {\n zone.hasPendingMicrotasks = true;\n } else {\n zone.hasPendingMicrotasks = false;\n }\n}\nfunction onEnter(zone) {\n zone._nesting++;\n if (zone.isStable) {\n zone.isStable = false;\n zone.onUnstable.emit(null);\n }\n}\nfunction onLeave(zone) {\n zone._nesting--;\n checkStable(zone);\n}\n/**\n * Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls\n * to framework to perform rendering.\n */\nclass NoopNgZone {\n constructor() {\n this.hasPendingMicrotasks = false;\n this.hasPendingMacrotasks = false;\n this.isStable = true;\n this.onUnstable = new EventEmitter();\n this.onMicrotaskEmpty = new EventEmitter();\n this.onStable = new EventEmitter();\n this.onError = new EventEmitter();\n }\n run(fn, applyThis, applyArgs) {\n return fn.apply(applyThis, applyArgs);\n }\n runGuarded(fn, applyThis, applyArgs) {\n return fn.apply(applyThis, applyArgs);\n }\n runOutsideAngular(fn) {\n return fn();\n }\n runTask(fn, applyThis, applyArgs, name) {\n return fn.apply(applyThis, applyArgs);\n }\n}\nfunction shouldBeIgnoredByZone(applyArgs) {\n return hasApplyArgsData(applyArgs, '__ignore_ng_zone__');\n}\nfunction isSchedulerTick(applyArgs) {\n return hasApplyArgsData(applyArgs, '__scheduler_tick__');\n}\nfunction hasApplyArgsData(applyArgs, key) {\n if (!Array.isArray(applyArgs)) {\n return false;\n }\n // We should only ever get 1 arg passed through to invokeTask.\n // Short circuit here incase that behavior changes.\n if (applyArgs.length !== 1) {\n return false;\n }\n return applyArgs[0]?.data?.[key] === true;\n}\nfunction getNgZone(ngZoneToUse = 'zone.js', options) {\n if (ngZoneToUse === 'noop') {\n return new NoopNgZone();\n }\n if (ngZoneToUse === 'zone.js') {\n return new NgZone(options);\n }\n return ngZoneToUse;\n}\n\n// Public API for Zone\n\n/**\n * Provides a hook for centralized exception handling.\n *\n * The default implementation of `ErrorHandler` prints error messages to the `console`. To\n * intercept error handling, write a custom exception handler that replaces this default as\n * appropriate for your app.\n *\n * @usageNotes\n * ### Example\n *\n * ```\n * class MyErrorHandler implements ErrorHandler {\n * handleError(error) {\n * // do something with the exception\n * }\n * }\n *\n * @NgModule({\n * providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]\n * })\n * class MyModule {}\n * ```\n *\n * @publicApi\n */\nclass ErrorHandler {\n constructor() {\n /**\n * @internal\n */\n this._console = console;\n }\n handleError(error) {\n const originalError = this._findOriginalError(error);\n this._console.error('ERROR', error);\n if (originalError) {\n this._console.error('ORIGINAL ERROR', originalError);\n }\n }\n /** @internal */\n _findOriginalError(error) {\n let e = error && getOriginalError(error);\n while (e && getOriginalError(e)) {\n e = getOriginalError(e);\n }\n return e || null;\n }\n}\n/**\n * `InjectionToken` used to configure how to call the `ErrorHandler`.\n *\n * `NgZone` is provided by default today so the default (and only) implementation for this\n * is calling `ErrorHandler.handleError` outside of the Angular zone.\n */\nconst INTERNAL_APPLICATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'internal error handler' : '', {\n providedIn: 'root',\n factory: () => {\n const zone = inject(NgZone);\n const userErrorHandler = inject(ErrorHandler);\n return e => zone.runOutsideAngular(() => userErrorHandler.handleError(e));\n }\n});\n\n/**\n * An `OutputEmitterRef` is created by the `output()` function and can be\n * used to emit values to consumers of your directive or component.\n *\n * Consumers of your directive/component can bind to the output and\n * subscribe to changes via the bound event syntax. For example:\n *\n * ```html\n *