diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/0.pack b/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/0.pack deleted file mode 100644 index 8776d1ae..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/0.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/1.pack b/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/1.pack deleted file mode 100644 index fcb98e6f..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/1.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/2.pack b/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/2.pack deleted file mode 100644 index 11c0ebe7..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/2.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/3.pack b/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/3.pack deleted file mode 100644 index fa574863..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/3.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/index.pack b/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/index.pack deleted file mode 100644 index 000f6f21..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/index.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/index.pack.old b/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/index.pack.old deleted file mode 100644 index 463778b5..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/5b3d1285e617460f7192ee657809c05db7638435/index.pack.old and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/0.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/0.pack deleted file mode 100644 index ae3ca651..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/0.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/1.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/1.pack deleted file mode 100644 index 61cd5364..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/1.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/10.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/10.pack deleted file mode 100644 index 208aa63c..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/10.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/11.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/11.pack deleted file mode 100644 index c45392e3..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/11.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/12.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/12.pack deleted file mode 100644 index 995cb311..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/12.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/2.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/2.pack deleted file mode 100644 index 9be7c96f..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/2.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/3.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/3.pack deleted file mode 100644 index cc557768..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/3.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/4.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/4.pack deleted file mode 100644 index 5acbe46f..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/4.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/5.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/5.pack deleted file mode 100644 index 93630486..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/5.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/6.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/6.pack deleted file mode 100644 index f9ad7576..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/6.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/7.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/7.pack deleted file mode 100644 index 0f8ee7aa..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/7.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/8.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/8.pack deleted file mode 100644 index e1b7a2b4..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/8.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/9.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/9.pack deleted file mode 100644 index 8a644a2e..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/9.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/index.pack b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/index.pack deleted file mode 100644 index 651fa65a..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/index.pack and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/index.pack.old b/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/index.pack.old deleted file mode 100644 index 6ae6833f..00000000 Binary files a/frontend/.angular/cache/18.0.2/angular-webpack/a2d51213fb806ce48826ea2963e8e3612d661437/index.pack.old and /dev/null differ diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/0051b5033135ba7596bc6ad99d51c0c37b3c224352943f83131bb9b10573701e.json b/frontend/.angular/cache/18.0.2/babel-webpack/0051b5033135ba7596bc6ad99d51c0c37b3c224352943f83131bb9b10573701e.json deleted file mode 100644 index df4ce0bd..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/0051b5033135ba7596bc6ad99d51c0c37b3c224352943f83131bb9b10573701e.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createNotification = exports.nextNotification = exports.errorNotification = exports.COMPLETE_NOTIFICATION = void 0;\nexports.COMPLETE_NOTIFICATION = function () {\n return createNotification('C', undefined, undefined);\n}();\nfunction errorNotification(error) {\n return createNotification('E', undefined, error);\n}\nexports.errorNotification = errorNotification;\nfunction nextNotification(value) {\n return createNotification('N', value, undefined);\n}\nexports.nextNotification = nextNotification;\nfunction createNotification(kind, value, error) {\n return {\n kind: kind,\n value: value,\n error: error\n };\n}\nexports.createNotification = createNotification;\n//# sourceMappingURL=NotificationFactories.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/00741456f18a2cf32920fec2062427e57a6e1c60303bc00ca6eac801f8d0d6cf.json b/frontend/.angular/cache/18.0.2/babel-webpack/00741456f18a2cf32920fec2062427e57a6e1c60303bc00ca6eac801f8d0d6cf.json deleted file mode 100644 index 1de2fc8d..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/00741456f18a2cf32920fec2062427e57a6e1c60303bc00ca6eac801f8d0d6cf.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"import { mergeAll } from '../operators/mergeAll';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from './from';\nexport function merge(...args) {\n const scheduler = popScheduler(args);\n const concurrent = popNumber(args, Infinity);\n const sources = args;\n return !sources.length ? EMPTY : sources.length === 1 ? innerFrom(sources[0]) : mergeAll(concurrent)(from(sources, scheduler));\n}\n//# sourceMappingURL=merge.js.map","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/01959a3126942bbde0230950fe54c6adab4a97e4644f105b8d3caf37176ae6e2.json b/frontend/.angular/cache/18.0.2/babel-webpack/01959a3126942bbde0230950fe54c6adab4a97e4644f105b8d3caf37176ae6e2.json deleted file mode 100644 index 487adce1..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/01959a3126942bbde0230950fe54c6adab4a97e4644f105b8d3caf37176ae6e2.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nexport const defaultThrottleConfig = {\n leading: true,\n trailing: false\n};\nexport function throttle(durationSelector, config = defaultThrottleConfig) {\n return operate((source, subscriber) => {\n const {\n leading,\n trailing\n } = config;\n let hasValue = false;\n let sendValue = null;\n let throttled = null;\n let isComplete = false;\n const endThrottling = () => {\n throttled === null || throttled === void 0 ? void 0 : throttled.unsubscribe();\n throttled = null;\n if (trailing) {\n send();\n isComplete && subscriber.complete();\n }\n };\n const cleanupThrottling = () => {\n throttled = null;\n isComplete && subscriber.complete();\n };\n const startThrottle = value => throttled = innerFrom(durationSelector(value)).subscribe(createOperatorSubscriber(subscriber, endThrottling, cleanupThrottling));\n const send = () => {\n if (hasValue) {\n hasValue = false;\n const value = sendValue;\n sendValue = null;\n subscriber.next(value);\n !isComplete && startThrottle(value);\n }\n };\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n hasValue = true;\n sendValue = value;\n !(throttled && !throttled.closed) && (leading ? send() : startThrottle(value));\n }, () => {\n isComplete = true;\n !(trailing && hasValue && throttled && !throttled.closed) && subscriber.complete();\n }));\n });\n}\n//# sourceMappingURL=throttle.js.map","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/01c84354f4884f81310d35b9efb16d0e70f60ecc3d10abafa5ba5de6870be332.json b/frontend/.angular/cache/18.0.2/babel-webpack/01c84354f4884f81310d35b9efb16d0e70f60ecc3d10abafa5ba5de6870be332.json deleted file mode 100644 index b73f9af3..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/01c84354f4884f81310d35b9efb16d0e70f60ecc3d10abafa5ba5de6870be332.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.concat = void 0;\nvar concatAll_1 = require(\"../operators/concatAll\");\nvar args_1 = require(\"../util/args\");\nvar from_1 = require(\"./from\");\nfunction concat() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return concatAll_1.concatAll()(from_1.from(args, args_1.popScheduler(args)));\n}\nexports.concat = concat;\n//# sourceMappingURL=concat.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/045d383898985249cc9c8f2d8e8b586ae0dd767441e5d77b2dfe968378e4a4cf.json b/frontend/.angular/cache/18.0.2/babel-webpack/045d383898985249cc9c8f2d8e8b586ae0dd767441e5d77b2dfe968378e4a4cf.json deleted file mode 100644 index 0bd71635..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/045d383898985249cc9c8f2d8e8b586ae0dd767441e5d77b2dfe968378e4a4cf.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scheduler = void 0;\nvar dateTimestampProvider_1 = require(\"./scheduler/dateTimestampProvider\");\nvar Scheduler = function () {\n function Scheduler(schedulerActionCtor, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) {\n delay = 0;\n }\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n };\n Scheduler.now = dateTimestampProvider_1.dateTimestampProvider.now;\n return Scheduler;\n}();\nexports.Scheduler = Scheduler;\n//# sourceMappingURL=Scheduler.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/046b69bccf2e1f6381d4a3534e345d6145fa795537b3c0d1cfb9177579021cd6.json b/frontend/.angular/cache/18.0.2/babel-webpack/046b69bccf2e1f6381d4a3534e345d6145fa795537b3c0d1cfb9177579021cd6.json deleted file mode 100644 index 69e3a666..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/046b69bccf2e1f6381d4a3534e345d6145fa795537b3c0d1cfb9177579021cd6.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AnimationFrameAction = void 0;\nvar AsyncAction_1 = require(\"./AsyncAction\");\nvar animationFrameProvider_1 = require(\"./animationFrameProvider\");\nvar AnimationFrameAction = function (_super) {\n __extends(AnimationFrameAction, _super);\n function AnimationFrameAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n return _this;\n }\n AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (delay !== null && delay > 0) {\n return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n }\n scheduler.actions.push(this);\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider_1.animationFrameProvider.requestAnimationFrame(function () {\n return scheduler.flush(undefined);\n }));\n };\n AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n var _a;\n if (delay === void 0) {\n delay = 0;\n }\n if (delay != null ? delay > 0 : this.delay > 0) {\n return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);\n }\n var actions = scheduler.actions;\n if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {\n animationFrameProvider_1.animationFrameProvider.cancelAnimationFrame(id);\n scheduler._scheduled = undefined;\n }\n return undefined;\n };\n return AnimationFrameAction;\n}(AsyncAction_1.AsyncAction);\nexports.AnimationFrameAction = AnimationFrameAction;\n//# sourceMappingURL=AnimationFrameAction.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/04aca769b075a81a338d5bfe31241e3255ef0e6f1d1dc38af01492566d129ab8.json b/frontend/.angular/cache/18.0.2/babel-webpack/04aca769b075a81a338d5bfe31241e3255ef0e6f1d1dc38af01492566d129ab8.json deleted file mode 100644 index 57a3d144..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/04aca769b075a81a338d5bfe31241e3255ef0e6f1d1dc38af01492566d129ab8.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"import * as i0 from '@angular/core';\nimport { Pipe, InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, EventEmitter, Component, Input, Output, SecurityContext, NgModule } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Renderer, marked } from 'marked';\nexport { Renderer as MarkedRenderer } from 'marked';\nimport { map, first } from 'rxjs/operators';\nimport * as i1 from '@angular/common/http';\nimport * as i3 from '@angular/platform-browser';\n\n/* eslint-disable */\nconst _c0 = [\"*\"];\nclass KatexOptions {}\nlet LanguagePipe = /*#__PURE__*/(() => {\n class LanguagePipe {\n transform(value, language) {\n if (value == null) {\n value = '';\n }\n if (language == null) {\n language = '';\n }\n if (typeof value !== 'string') {\n console.error(`LanguagePipe has been invoked with an invalid value type [${typeof value}]`);\n return value;\n }\n if (typeof language !== 'string') {\n console.error(`LanguagePipe has been invoked with an invalid parameter [${typeof language}]`);\n return value;\n }\n return '```' + language + '\\n' + value + '\\n```';\n }\n }\n LanguagePipe.ɵfac = function LanguagePipe_Factory(t) {\n return new (t || LanguagePipe)();\n };\n LanguagePipe.ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"language\",\n type: LanguagePipe,\n pure: true\n });\n return LanguagePipe;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar PrismPlugin = /*#__PURE__*/function (PrismPlugin) {\n PrismPlugin[\"CommandLine\"] = \"command-line\";\n PrismPlugin[\"LineHighlight\"] = \"line-highlight\";\n PrismPlugin[\"LineNumbers\"] = \"line-numbers\";\n return PrismPlugin;\n}(PrismPlugin || {});\nclass MarkedOptions {}\n\n/* eslint-disable max-len */\nconst errorJoyPixelsNotLoaded = '[ngx-markdown] When using the `emoji` attribute you *have to* include Emoji-Toolkit files to `angular.json` or use imports. See README for more information';\nconst errorKatexNotLoaded = '[ngx-markdown] When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports. See README for more information';\nconst errorSrcWithoutHttpClient = '[ngx-markdown] When using the `src` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information';\n/* eslint-enable max-len */\nconst SECURITY_CONTEXT = new InjectionToken('SECURITY_CONTEXT');\nlet MarkdownService = /*#__PURE__*/(() => {\n class MarkdownService {\n constructor(platform, securityContext, http, options, sanitizer) {\n this.platform = platform;\n this.securityContext = securityContext;\n this.http = http;\n this.sanitizer = sanitizer;\n this.initialMarkedOptions = {\n renderer: new Renderer()\n };\n this.options = options;\n }\n get options() {\n return this._options;\n }\n set options(value) {\n this._options = {\n ...this.initialMarkedOptions,\n ...value\n };\n }\n get renderer() {\n return this.options.renderer;\n }\n set renderer(value) {\n this.options.renderer = value;\n }\n compile(markdown, decodeHtml = false, emojify = false, markedOptions = this.options) {\n const trimmed = this.trimIndentation(markdown);\n const decoded = decodeHtml ? this.decodeHtml(trimmed) : trimmed;\n const emojified = emojify ? this.renderEmoji(decoded) : decoded;\n const compiled = marked(emojified, markedOptions);\n return this.sanitizer.sanitize(this.securityContext, compiled) || '';\n }\n getSource(src) {\n if (!this.http) {\n throw new Error(errorSrcWithoutHttpClient);\n }\n return this.http.get(src, {\n responseType: 'text'\n }).pipe(map(markdown => this.handleExtension(src, markdown)));\n }\n highlight(element) {\n if (!isPlatformBrowser(this.platform)) {\n return;\n }\n if (typeof Prism !== 'undefined') {\n if (!element) {\n element = document;\n }\n const noLanguageElements = element.querySelectorAll('pre code:not([class*=\"language-\"])');\n Array.prototype.forEach.call(noLanguageElements, x => x.classList.add('language-none'));\n Prism.highlightAllUnder(element);\n }\n }\n renderKatex(html, options) {\n if (!isPlatformBrowser(this.platform)) {\n return html;\n }\n if (typeof katex === 'undefined' || typeof katex.renderToString === 'undefined') {\n throw new Error(errorKatexNotLoaded);\n }\n return html.replace(/\\$([^\\s][^$]*?[^\\s])\\$/gm, (_, tex) => katex.renderToString(tex, options));\n }\n decodeHtml(html) {\n if (!isPlatformBrowser(this.platform)) {\n return html;\n }\n const textarea = document.createElement('textarea');\n textarea.innerHTML = html;\n return textarea.value;\n }\n handleExtension(src, markdown) {\n const extension = src ? src.split('?')[0].split('.').splice(-1).join() : '';\n return extension !== 'md' ? '```' + extension + '\\n' + markdown + '\\n```' : markdown;\n }\n renderEmoji(html) {\n if (!isPlatformBrowser(this.platform)) {\n return html;\n }\n if (typeof joypixels === 'undefined' || typeof joypixels.shortnameToUnicode === 'undefined') {\n throw new Error(errorJoyPixelsNotLoaded);\n }\n return joypixels.shortnameToUnicode(html);\n }\n trimIndentation(markdown) {\n if (!markdown) {\n return '';\n }\n let indentStart;\n return markdown.split('\\n').map(line => {\n let lineIdentStart = indentStart;\n if (line.length > 0) {\n lineIdentStart = isNaN(lineIdentStart) ? line.search(/\\S|$/) : Math.min(line.search(/\\S|$/), lineIdentStart);\n }\n if (isNaN(indentStart)) {\n indentStart = lineIdentStart;\n }\n return lineIdentStart ? line.substring(lineIdentStart) : line;\n }).join('\\n');\n }\n }\n MarkdownService.ɵfac = function MarkdownService_Factory(t) {\n return new (t || MarkdownService)(i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(SECURITY_CONTEXT), i0.ɵɵinject(i1.HttpClient, 8), i0.ɵɵinject(MarkedOptions, 8), i0.ɵɵinject(i3.DomSanitizer));\n };\n MarkdownService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MarkdownService,\n factory: MarkdownService.ɵfac\n });\n return MarkdownService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MarkdownComponent = /*#__PURE__*/(() => {\n class MarkdownComponent {\n constructor(element, markdownService) {\n this.element = element;\n this.markdownService = markdownService;\n // Event emitters\n this.error = new EventEmitter();\n this.load = new EventEmitter();\n this.ready = new EventEmitter();\n this._commandLine = false;\n this._emoji = false;\n this._katex = false;\n this._lineHighlight = false;\n this._lineNumbers = false;\n }\n // Plugin - emoji\n get emoji() {\n return this._emoji;\n }\n set emoji(value) {\n this._emoji = this.coerceBooleanProperty(value);\n }\n // Plugin - katex\n get katex() {\n return this._katex;\n }\n set katex(value) {\n this._katex = this.coerceBooleanProperty(value);\n }\n // Plugin - lineHighlight\n get lineHighlight() {\n return this._lineHighlight;\n }\n set lineHighlight(value) {\n this._lineHighlight = this.coerceBooleanProperty(value);\n }\n // Plugin - lineNumbers\n get lineNumbers() {\n return this._lineNumbers;\n }\n set lineNumbers(value) {\n this._lineNumbers = this.coerceBooleanProperty(value);\n }\n // Plugin - commandLine\n get commandLine() {\n return this._commandLine;\n }\n set commandLine(value) {\n this._commandLine = this.coerceBooleanProperty(value);\n }\n ngOnChanges() {\n if (this.data != null) {\n this.handleData();\n return;\n }\n if (this.src != null) {\n this.handleSrc();\n return;\n }\n }\n ngAfterViewInit() {\n if (!this.data && !this.src) {\n this.handleTransclusion();\n }\n }\n render(markdown, decodeHtml = false) {\n let compiled = this.markdownService.compile(markdown, decodeHtml, this.emoji);\n compiled = this.katex ? this.markdownService.renderKatex(compiled, this.katexOptions) : compiled;\n this.element.nativeElement.innerHTML = compiled;\n this.handlePlugins();\n this.markdownService.highlight(this.element.nativeElement);\n this.ready.emit();\n }\n coerceBooleanProperty(value) {\n return value != null && `${String(value)}` !== 'false';\n }\n handleData() {\n this.render(this.data);\n }\n handleSrc() {\n this.markdownService.getSource(this.src).subscribe(markdown => {\n this.render(markdown);\n this.load.emit(markdown);\n }, error => this.error.emit(error));\n }\n handleTransclusion() {\n this.render(this.element.nativeElement.innerHTML, true);\n }\n handlePlugins() {\n if (this.commandLine) {\n this.setPluginClass(this.element.nativeElement, PrismPlugin.CommandLine);\n this.setPluginOptions(this.element.nativeElement, {\n dataFilterOutput: this.filterOutput,\n dataHost: this.host,\n dataPrompt: this.prompt,\n dataOutput: this.output,\n dataUser: this.user\n });\n }\n if (this.lineHighlight) {\n this.setPluginOptions(this.element.nativeElement, {\n dataLine: this.line,\n dataLineOffset: this.lineOffset\n });\n }\n if (this.lineNumbers) {\n this.setPluginClass(this.element.nativeElement, PrismPlugin.LineNumbers);\n this.setPluginOptions(this.element.nativeElement, {\n dataStart: this.start\n });\n }\n }\n setPluginClass(element, plugin) {\n const preElements = element.querySelectorAll('pre');\n for (let i = 0; i < preElements.length; i++) {\n const classes = plugin instanceof Array ? plugin : [plugin];\n preElements.item(i).classList.add(...classes);\n }\n }\n setPluginOptions(element, options) {\n const preElements = element.querySelectorAll('pre');\n for (let i = 0; i < preElements.length; i++) {\n Object.keys(options).forEach(option => {\n const attributeValue = options[option];\n if (attributeValue) {\n const attributeName = this.toLispCase(option);\n preElements.item(i).setAttribute(attributeName, attributeValue.toString());\n }\n });\n }\n }\n toLispCase(value) {\n const upperChars = value.match(/([A-Z])/g);\n if (!upperChars) {\n return value;\n }\n let str = value.toString();\n for (let i = 0, n = upperChars.length; i < n; i++) {\n str = str.replace(new RegExp(upperChars[i]), '-' + upperChars[i].toLowerCase());\n }\n if (str.slice(0, 1) === '-') {\n str = str.slice(1);\n }\n return str;\n }\n }\n MarkdownComponent.ɵfac = function MarkdownComponent_Factory(t) {\n return new (t || MarkdownComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MarkdownService));\n };\n MarkdownComponent.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MarkdownComponent,\n selectors: [[\"markdown\"], [\"\", \"markdown\", \"\"]],\n inputs: {\n data: \"data\",\n src: \"src\",\n emoji: \"emoji\",\n katex: \"katex\",\n katexOptions: \"katexOptions\",\n lineHighlight: \"lineHighlight\",\n line: \"line\",\n lineOffset: \"lineOffset\",\n lineNumbers: \"lineNumbers\",\n start: \"start\",\n commandLine: \"commandLine\",\n filterOutput: \"filterOutput\",\n host: \"host\",\n prompt: \"prompt\",\n output: \"output\",\n user: \"user\"\n },\n outputs: {\n error: \"error\",\n load: \"load\",\n ready: \"ready\"\n },\n features: [i0.ɵɵNgOnChangesFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MarkdownComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2\n });\n return MarkdownComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MarkdownPipe = /*#__PURE__*/(() => {\n class MarkdownPipe {\n constructor(domSanitizer, elementRef, markdownService, zone) {\n this.domSanitizer = domSanitizer;\n this.elementRef = elementRef;\n this.markdownService = markdownService;\n this.zone = zone;\n }\n transform(value) {\n if (value == null) {\n return '';\n }\n if (typeof value !== 'string') {\n console.error(`MarkdownPipe has been invoked with an invalid value type [${typeof value}]`);\n return value;\n }\n const markdown = this.markdownService.compile(value);\n this.zone.onStable.pipe(first()).subscribe(() => this.markdownService.highlight(this.elementRef.nativeElement));\n return this.domSanitizer.bypassSecurityTrustHtml(markdown);\n }\n }\n MarkdownPipe.ɵfac = function MarkdownPipe_Factory(t) {\n return new (t || MarkdownPipe)(i0.ɵɵdirectiveInject(i3.DomSanitizer, 16), i0.ɵɵdirectiveInject(i0.ElementRef, 16), i0.ɵɵdirectiveInject(MarkdownService, 16), i0.ɵɵdirectiveInject(i0.NgZone, 16));\n };\n MarkdownPipe.ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"markdown\",\n type: MarkdownPipe,\n pure: true\n });\n return MarkdownPipe;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst sharedDeclarations = [LanguagePipe, MarkdownComponent, MarkdownPipe];\nlet MarkdownModule = /*#__PURE__*/(() => {\n class MarkdownModule {\n static forRoot(markdownModuleConfig) {\n return {\n ngModule: MarkdownModule,\n providers: [MarkdownService, markdownModuleConfig && markdownModuleConfig.loader || [], markdownModuleConfig && markdownModuleConfig.markedOptions || [], {\n provide: SECURITY_CONTEXT,\n useValue: markdownModuleConfig && markdownModuleConfig.sanitize != null ? markdownModuleConfig.sanitize : SecurityContext.HTML\n }]\n };\n }\n static forChild() {\n return {\n ngModule: MarkdownModule\n };\n }\n }\n MarkdownModule.ɵfac = function MarkdownModule_Factory(t) {\n return new (t || MarkdownModule)();\n };\n MarkdownModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MarkdownModule\n });\n MarkdownModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n return MarkdownModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\r\n * Generated bundle index. Do not edit.\r\n */\n\nexport { KatexOptions, LanguagePipe, MarkdownComponent, MarkdownModule, MarkdownPipe, MarkdownService, MarkedOptions, PrismPlugin, SECURITY_CONTEXT, errorJoyPixelsNotLoaded, errorKatexNotLoaded, errorSrcWithoutHttpClient };\n//# sourceMappingURL=ngx-markdown.mjs.map","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/04f911fe00159dd88a23d3cfa134421c0acf441a6835bdc3c224766bc11e20ef.json b/frontend/.angular/cache/18.0.2/babel-webpack/04f911fe00159dd88a23d3cfa134421c0acf441a6835bdc3c224766bc11e20ef.json deleted file mode 100644 index e087aa0a..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/04f911fe00159dd88a23d3cfa134421c0acf441a6835bdc3c224766bc11e20ef.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isArrayLike = void 0;\nexports.isArrayLike = function (x) {\n return x && typeof x.length === 'number' && typeof x !== 'function';\n};\n//# sourceMappingURL=isArrayLike.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/050d38ce4f3606784e200d067995afcff548dc9567e03607f97c579f1d6386db.json b/frontend/.angular/cache/18.0.2/babel-webpack/050d38ce4f3606784e200d067995afcff548dc9567e03607f97c579f1d6386db.json deleted file mode 100644 index 2553a989..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/050d38ce4f3606784e200d067995afcff548dc9567e03607f97c579f1d6386db.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.OrgFormComponent = void 0;\nconst forms_1 = require(\"@angular/forms\");\nconst i0 = require(\"@angular/core\");\nconst i1 = require(\"@angular/forms\");\nconst i2 = require(\"../app.service\");\nconst i3 = require(\"@angular/router\");\nconst i4 = require(\"../alert/alert.service\");\nconst i5 = require(\"../auth.service\");\nconst i6 = require(\"@angular/common\");\nconst i7 = require(\"primeng/inputtext\");\nconst i8 = require(\"primeng/button\");\nfunction OrgFormComponent_button_6_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"button\", 7);\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"disabled\", !ctx_r0.orgForm.valid);\n }\n}\nlet OrgFormComponent = /*#__PURE__*/(() => {\n class OrgFormComponent {\n constructor(fb, appService, route, activatedRoute, alertService, authService) {\n this.fb = fb;\n this.appService = appService;\n this.route = route;\n this.activatedRoute = activatedRoute;\n this.alertService = alertService;\n this.authService = authService;\n this.fileToUpload = null;\n this.createForm();\n }\n ngOnInit() {\n this.activatedRoute.data.subscribe(({\n organization\n }) => {\n this.isAdmin = this.authService.isAdmin();\n if (organization) {\n this.orgModel = organization;\n if (!this.isAdmin) {\n this.disableForm();\n }\n this.rebuildForm();\n }\n });\n this.activatedRoute.params.subscribe(params => {\n this.orgId = params.id;\n });\n }\n ngOnChanges() {\n this.rebuildForm();\n }\n /**\n * Function required to create the active form in Angular\n */\n createForm() {\n this.orgForm = this.fb.group({\n name: ['', [forms_1.Validators.required]]\n });\n }\n /**\n * Function required to rebuild the form on changes in Angular\n */\n rebuildForm() {\n this.orgForm.reset({\n name: this.orgModel.name\n });\n }\n disableForm() {\n this.orgForm.disable();\n }\n /**\n * Function required to process the files attached to the form\n * @param files array of files to work with\n */\n handleFileInput(files) {\n this.fileToUpload = files.item(0);\n }\n /**\n * Function required to process the form data\n * @param contact form data object holding organization data\n */\n onSubmit(contact) {\n this.orgModel = contact.value;\n if (this.fileToUpload) {\n this.appService.upload(this.fileToUpload).subscribe(fileId => {\n this.createOrUpdateOrg(this.orgModel);\n });\n } else {\n this.createOrUpdateOrg(this.orgModel);\n }\n }\n /**\n * Function required to create or update an organization based on org ID\n * navigates the user back to the main dashboard after action is executed\n * @param org contains organization data object\n */\n createOrUpdateOrg(org) {\n if (this.orgId) {\n this.appService.updateOrg(this.orgId, org).subscribe(success => {\n this.navigateToDashboard();\n this.alertService.success(success);\n });\n } else {\n this.appService.createOrg(org).subscribe(success => {\n this.navigateToDashboard();\n this.alertService.success(success);\n });\n }\n }\n /**\n * Function responsible for directing the user back to the main dashboard\n */\n navigateToDashboard() {\n this.route.navigate(['dashboard']);\n }\n static #_ = this.ɵfac = function OrgFormComponent_Factory(t) {\n return new (t || OrgFormComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.AppService), i0.ɵɵdirectiveInject(i3.Router), i0.ɵɵdirectiveInject(i3.ActivatedRoute), i0.ɵɵdirectiveInject(i4.AlertService), i0.ɵɵdirectiveInject(i5.AuthService));\n };\n static #_2 = this.ɵcmp = /*@__PURE__*/i0.ɵɵdefineComponent({\n type: OrgFormComponent,\n selectors: [[\"app-org-form\"]],\n features: [i0.ɵɵNgOnChangesFeature],\n decls: 8,\n vars: 2,\n consts: [[1, \"container\", \"col-md-6\", \"col-12\"], [3, \"ngSubmit\", \"formGroup\"], [1, \"form-group\"], [\"for\", \"orgName\"], [\"formControlName\", \"name\", \"type\", \"text\", \"id\", \"orgName\", \"placeholder\", \"Enter in an organization name\", \"pInputText\", \"\", 1, \"form-control\"], [\"class\", \"btn btn-primary float-right\", \"type\", \"submit\", \"data-toggle\", \"tooltip\", \"data-placement\", \"bottom\", \"label\", \"Submit Data\", \"pButton\", \"\", 3, \"disabled\", 4, \"ngIf\"], [\"type\", \"button\", \"data-toggle\", \"tooltip\", \"data-placement\", \"bottom\", \"label\", \"Back to Dashboard\", \"pButton\", \"\", 1, \"btn\", \"btn-secondary\", \"float-right\", 2, \"margin-right\", \"5px\", 3, \"click\"], [\"type\", \"submit\", \"data-toggle\", \"tooltip\", \"data-placement\", \"bottom\", \"label\", \"Submit Data\", \"pButton\", \"\", 1, \"btn\", \"btn-primary\", \"float-right\", 3, \"disabled\"]],\n template: function OrgFormComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"form\", 1);\n i0.ɵɵlistener(\"ngSubmit\", function OrgFormComponent_Template_form_ngSubmit_1_listener() {\n return ctx.onSubmit(ctx.orgForm);\n });\n i0.ɵɵelementStart(2, \"div\", 2)(3, \"label\", 3);\n i0.ɵɵtext(4, \"Organization Name\");\n i0.ɵɵelementEnd();\n i0.ɵɵelement(5, \"input\", 4);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(6, OrgFormComponent_button_6_Template, 1, 1, \"button\", 5);\n i0.ɵɵelementStart(7, \"button\", 6);\n i0.ɵɵlistener(\"click\", function OrgFormComponent_Template_button_click_7_listener() {\n return ctx.navigateToDashboard();\n });\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"formGroup\", ctx.orgForm);\n i0.ɵɵadvance(5);\n i0.ɵɵproperty(\"ngIf\", ctx.isAdmin);\n }\n },\n dependencies: [i6.NgIf, i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.FormGroupDirective, i1.FormControlName, i7.InputText, i8.ButtonDirective]\n });\n }\n return OrgFormComponent;\n})();\nexports.OrgFormComponent = OrgFormComponent;","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/05323467432fcb69b7b9d1881a5983723457cf5f8692ec7bc4ad0984557ccc3c.json b/frontend/.angular/cache/18.0.2/babel-webpack/05323467432fcb69b7b9d1881a5983723457cf5f8692ec7bc4ad0984557ccc3c.json deleted file mode 100644 index e75cbb0f..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/05323467432fcb69b7b9d1881a5983723457cf5f8692ec7bc4ad0984557ccc3c.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"import { Subject } from '../Subject';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function windowCount(windowSize, startWindowEvery = 0) {\n const startEvery = startWindowEvery > 0 ? startWindowEvery : windowSize;\n return operate((source, subscriber) => {\n let windows = [new Subject()];\n let starts = [];\n let count = 0;\n subscriber.next(windows[0].asObservable());\n source.subscribe(createOperatorSubscriber(subscriber, value => {\n for (const window of windows) {\n window.next(value);\n }\n const c = count - windowSize + 1;\n if (c >= 0 && c % startEvery === 0) {\n windows.shift().complete();\n }\n if (++count % startEvery === 0) {\n const window = new Subject();\n windows.push(window);\n subscriber.next(window.asObservable());\n }\n }, () => {\n while (windows.length > 0) {\n windows.shift().complete();\n }\n subscriber.complete();\n }, err => {\n while (windows.length > 0) {\n windows.shift().error(err);\n }\n subscriber.error(err);\n }, () => {\n starts = null;\n windows = null;\n }));\n });\n}\n//# sourceMappingURL=windowCount.js.map","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/0533d9bae005ad26935da626697e40b3583c082ee8978cc6012a537d7a58c3a9.json b/frontend/.angular/cache/18.0.2/babel-webpack/0533d9bae005ad26935da626697e40b3583c082ee8978cc6012a537d7a58c3a9.json deleted file mode 100644 index 83149b7d..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/0533d9bae005ad26935da626697e40b3583c082ee8978cc6012a537d7a58c3a9.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.publishBehavior = void 0;\nvar BehaviorSubject_1 = require(\"../BehaviorSubject\");\nvar ConnectableObservable_1 = require(\"../observable/ConnectableObservable\");\nfunction publishBehavior(initialValue) {\n return function (source) {\n var subject = new BehaviorSubject_1.BehaviorSubject(initialValue);\n return new ConnectableObservable_1.ConnectableObservable(source, function () {\n return subject;\n });\n };\n}\nexports.publishBehavior = publishBehavior;\n//# sourceMappingURL=publishBehavior.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/0547a4c63755e521b26ce1fe1259bf246616951f602e27a8c02b41be33552704.json b/frontend/.angular/cache/18.0.2/babel-webpack/0547a4c63755e521b26ce1fe1259bf246616951f602e27a8c02b41be33552704.json deleted file mode 100644 index 3983e0bc..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/0547a4c63755e521b26ce1fe1259bf246616951f602e27a8c02b41be33552704.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.combineAll = void 0;\nvar combineLatestAll_1 = require(\"./combineLatestAll\");\nexports.combineAll = combineLatestAll_1.combineLatestAll;\n//# sourceMappingURL=combineAll.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/056a53873e626849b8264bf068411abb8c84099fad97b27cf976b7eafe6618aa.json b/frontend/.angular/cache/18.0.2/babel-webpack/056a53873e626849b8264bf068411abb8c84099fad97b27cf976b7eafe6618aa.json deleted file mode 100644 index 2d6f93b9..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/056a53873e626849b8264bf068411abb8c84099fad97b27cf976b7eafe6618aa.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.retry = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar identity_1 = require(\"../util/identity\");\nvar timer_1 = require(\"../observable/timer\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction retry(configOrCount) {\n if (configOrCount === void 0) {\n configOrCount = Infinity;\n }\n var config;\n if (configOrCount && typeof configOrCount === 'object') {\n config = configOrCount;\n } else {\n config = {\n count: configOrCount\n };\n }\n var _a = config.count,\n count = _a === void 0 ? Infinity : _a,\n delay = config.delay,\n _b = config.resetOnSuccess,\n resetOnSuccess = _b === void 0 ? false : _b;\n return count <= 0 ? identity_1.identity : lift_1.operate(function (source, subscriber) {\n var soFar = 0;\n var innerSub;\n var subscribeForRetry = function () {\n var syncUnsub = false;\n innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n if (resetOnSuccess) {\n soFar = 0;\n }\n subscriber.next(value);\n }, undefined, function (err) {\n if (soFar++ < count) {\n var resub_1 = function () {\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n } else {\n syncUnsub = true;\n }\n };\n if (delay != null) {\n var notifier = typeof delay === 'number' ? timer_1.timer(delay) : innerFrom_1.innerFrom(delay(err, soFar));\n var notifierSubscriber_1 = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n notifierSubscriber_1.unsubscribe();\n resub_1();\n }, function () {\n subscriber.complete();\n });\n notifier.subscribe(notifierSubscriber_1);\n } else {\n resub_1();\n }\n } else {\n subscriber.error(err);\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n }\n };\n subscribeForRetry();\n });\n}\nexports.retry = retry;\n//# sourceMappingURL=retry.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/057d92fd459d94868e272f1511d9405636c336814f460a03d5bc26ec1b30d306.json b/frontend/.angular/cache/18.0.2/babel-webpack/057d92fd459d94868e272f1511d9405636c336814f460a03d5bc26ec1b30d306.json deleted file mode 100644 index 39a1c131..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/057d92fd459d94868e272f1511d9405636c336814f460a03d5bc26ec1b30d306.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.skipLast = void 0;\nvar identity_1 = require(\"../util/identity\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction skipLast(skipCount) {\n return skipCount <= 0 ? identity_1.identity : lift_1.operate(function (source, subscriber) {\n var ring = new Array(skipCount);\n var seen = 0;\n source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n var valueIndex = seen++;\n if (valueIndex < skipCount) {\n ring[valueIndex] = value;\n } else {\n var index = valueIndex % skipCount;\n var oldValue = ring[index];\n ring[index] = value;\n subscriber.next(oldValue);\n }\n }));\n return function () {\n ring = null;\n };\n });\n}\nexports.skipLast = skipLast;\n//# sourceMappingURL=skipLast.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/05cef92181fc005eb52992ab35d84e0ebc7088ba38ceaffe207648ca9ebf5863.json b/frontend/.angular/cache/18.0.2/babel-webpack/05cef92181fc005eb52992ab35d84e0ebc7088ba38ceaffe207648ca9ebf5863.json deleted file mode 100644 index 3c30b698..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/05cef92181fc005eb52992ab35d84e0ebc7088ba38ceaffe207648ca9ebf5863.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.concatWith = void 0;\nvar concat_1 = require(\"./concat\");\nfunction concatWith() {\n var otherSources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n otherSources[_i] = arguments[_i];\n }\n return concat_1.concat.apply(void 0, __spreadArray([], __read(otherSources)));\n}\nexports.concatWith = concatWith;\n//# sourceMappingURL=concatWith.js.map","map":null,"metadata":{},"sourceType":"script","externalDependencies":[]} \ No newline at end of file diff --git a/frontend/.angular/cache/18.0.2/babel-webpack/06d2bc718370cf96d359d0e3d888cfd20361dc2873a2e6ae22c26290628b4e22.json b/frontend/.angular/cache/18.0.2/babel-webpack/06d2bc718370cf96d359d0e3d888cfd20361dc2873a2e6ae22c26290628b4e22.json deleted file mode 100644 index c58ac883..00000000 --- a/frontend/.angular/cache/18.0.2/babel-webpack/06d2bc718370cf96d359d0e3d888cfd20361dc2873a2e6ae22c26290628b4e22.json +++ /dev/null @@ -1 +0,0 @@ -{"ast":null,"code":"import _asyncToGenerator from \"/Users/Ryan.Mathus/repos/bulwark/frontend/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\n/**\n * @license Angular v18.0.1\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, inject, NgZone, runInInjectionContext, InjectionToken, ɵPendingTasks, PLATFORM_ID, ɵConsole, ɵformatRuntimeError, Inject, ɵRuntimeError, makeEnvironmentProviders, NgModule, TransferState, makeStateKey, ɵperformanceMarkFeature, APP_BOOTSTRAP_LISTENER, ApplicationRef, ɵwhenStable, ɵtruncateMiddle } from '@angular/core';\nimport { of, Observable, from } from 'rxjs';\nimport { concatMap, filter, map, finalize, switchMap, tap } from 'rxjs/operators';\nimport * as i1 from '@angular/common';\nimport { isPlatformServer, DOCUMENT, ɵparseCookieValue } from '@angular/common';\n\n/**\n * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a\n * `HttpResponse`.\n *\n * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the\n * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the\n * `HttpBackend`.\n *\n * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.\n *\n * @publicApi\n */\nclass HttpHandler {}\n/**\n * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.\n *\n * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.\n *\n * When injected, `HttpBackend` dispatches requests directly to the backend, without going\n * through the interceptor chain.\n *\n * @publicApi\n */\nclass HttpBackend {}\n\n/**\n * Represents the header configuration options for an HTTP request.\n * Instances are immutable. Modifying methods return a cloned\n * instance with the change. The original object is never changed.\n *\n * @publicApi\n */\nclass HttpHeaders {\n /** Constructs a new HTTP header object with the given values.*/\n constructor(headers) {\n /**\n * Internal map of lowercased header names to the normalized\n * form of the name (the form seen first).\n */\n this.normalizedNames = new Map();\n /**\n * Queued updates to be materialized the next initialization.\n */\n this.lazyUpdate = null;\n if (!headers) {\n this.headers = new Map();\n } else if (typeof headers === 'string') {\n this.lazyInit = () => {\n this.headers = new Map();\n headers.split('\\n').forEach(line => {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const key = name.toLowerCase();\n const value = line.slice(index + 1).trim();\n this.maybeSetNormalizedName(name, key);\n if (this.headers.has(key)) {\n this.headers.get(key).push(value);\n } else {\n this.headers.set(key, [value]);\n }\n }\n });\n };\n } else if (typeof Headers !== 'undefined' && headers instanceof Headers) {\n this.headers = new Map();\n headers.forEach((values, name) => {\n this.setHeaderEntries(name, values);\n });\n } else {\n this.lazyInit = () => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertValidHeaders(headers);\n }\n this.headers = new Map();\n Object.entries(headers).forEach(([name, values]) => {\n this.setHeaderEntries(name, values);\n });\n };\n }\n }\n /**\n * Checks for existence of a given header.\n *\n * @param name The header name to check for existence.\n *\n * @returns True if the header exists, false otherwise.\n */\n has(name) {\n this.init();\n return this.headers.has(name.toLowerCase());\n }\n /**\n * Retrieves the first value of a given header.\n *\n * @param name The header name.\n *\n * @returns The value string if the header exists, null otherwise\n */\n get(name) {\n this.init();\n const values = this.headers.get(name.toLowerCase());\n return values && values.length > 0 ? values[0] : null;\n }\n /**\n * Retrieves the names of the headers.\n *\n * @returns A list of header names.\n */\n keys() {\n this.init();\n return Array.from(this.normalizedNames.values());\n }\n /**\n * Retrieves a list of values for a given header.\n *\n * @param name The header name from which to retrieve values.\n *\n * @returns A string of values if the header exists, null otherwise.\n */\n getAll(name) {\n this.init();\n return this.headers.get(name.toLowerCase()) || null;\n }\n /**\n * Appends a new value to the existing set of values for a header\n * and returns them in a clone of the original instance.\n *\n * @param name The header name for which to append the values.\n * @param value The value to append.\n *\n * @returns A clone of the HTTP headers object with the value appended to the given header.\n */\n append(name, value) {\n return this.clone({\n name,\n value,\n op: 'a'\n });\n }\n /**\n * Sets or modifies a value for a given header in a clone of the original instance.\n * If the header already exists, its value is replaced with the given value\n * in the returned object.\n *\n * @param name The header name.\n * @param value The value or values to set or override for the given header.\n *\n * @returns A clone of the HTTP headers object with the newly set header value.\n */\n set(name, value) {\n return this.clone({\n name,\n value,\n op: 's'\n });\n }\n /**\n * Deletes values for a given header in a clone of the original instance.\n *\n * @param name The header name.\n * @param value The value or values to delete for the given header.\n *\n * @returns A clone of the HTTP headers object with the given value deleted.\n */\n delete(name, value) {\n return this.clone({\n name,\n value,\n op: 'd'\n });\n }\n maybeSetNormalizedName(name, lcName) {\n if (!this.normalizedNames.has(lcName)) {\n this.normalizedNames.set(lcName, name);\n }\n }\n init() {\n if (!!this.lazyInit) {\n if (this.lazyInit instanceof HttpHeaders) {\n this.copyFrom(this.lazyInit);\n } else {\n this.lazyInit();\n }\n this.lazyInit = null;\n if (!!this.lazyUpdate) {\n this.lazyUpdate.forEach(update => this.applyUpdate(update));\n this.lazyUpdate = null;\n }\n }\n }\n copyFrom(other) {\n other.init();\n Array.from(other.headers.keys()).forEach(key => {\n this.headers.set(key, other.headers.get(key));\n this.normalizedNames.set(key, other.normalizedNames.get(key));\n });\n }\n clone(update) {\n const clone = new HttpHeaders();\n clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof HttpHeaders ? this.lazyInit : this;\n clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n return clone;\n }\n applyUpdate(update) {\n const key = update.name.toLowerCase();\n switch (update.op) {\n case 'a':\n case 's':\n let value = update.value;\n if (typeof value === 'string') {\n value = [value];\n }\n if (value.length === 0) {\n return;\n }\n this.maybeSetNormalizedName(update.name, key);\n const base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n base.push(...value);\n this.headers.set(key, base);\n break;\n case 'd':\n const toDelete = update.value;\n if (!toDelete) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n } else {\n let existing = this.headers.get(key);\n if (!existing) {\n return;\n }\n existing = existing.filter(value => toDelete.indexOf(value) === -1);\n if (existing.length === 0) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n } else {\n this.headers.set(key, existing);\n }\n }\n break;\n }\n }\n setHeaderEntries(name, values) {\n const headerValues = (Array.isArray(values) ? values : [values]).map(value => value.toString());\n const key = name.toLowerCase();\n this.headers.set(key, headerValues);\n this.maybeSetNormalizedName(name, key);\n }\n /**\n * @internal\n */\n forEach(fn) {\n this.init();\n Array.from(this.normalizedNames.keys()).forEach(key => fn(this.normalizedNames.get(key), this.headers.get(key)));\n }\n}\n/**\n * Verifies that the headers object has the right shape: the values\n * must be either strings, numbers or arrays. Throws an error if an invalid\n * header value is present.\n */\nfunction assertValidHeaders(headers) {\n for (const [key, value] of Object.entries(headers)) {\n if (!(typeof value === 'string' || typeof value === 'number') && !Array.isArray(value)) {\n throw new Error(`Unexpected value of the \\`${key}\\` header provided. ` + `Expecting either a string, a number or an array, but got: \\`${value}\\`.`);\n }\n }\n}\n\n/**\n * Provides encoding and decoding of URL parameter and query-string values.\n *\n * Serializes and parses URL parameter keys and values to encode and decode them.\n * If you pass URL query parameters without encoding,\n * the query parameters can be misinterpreted at the receiving end.\n *\n *\n * @publicApi\n */\nclass HttpUrlEncodingCodec {\n /**\n * Encodes a key name for a URL parameter or query-string.\n * @param key The key name.\n * @returns The encoded key name.\n */\n encodeKey(key) {\n return standardEncoding(key);\n }\n /**\n * Encodes the value of a URL parameter or query-string.\n * @param value The value.\n * @returns The encoded value.\n */\n encodeValue(value) {\n return standardEncoding(value);\n }\n /**\n * Decodes an encoded URL parameter or query-string key.\n * @param key The encoded key name.\n * @returns The decoded key name.\n */\n decodeKey(key) {\n return decodeURIComponent(key);\n }\n /**\n * Decodes an encoded URL parameter or query-string value.\n * @param value The encoded value.\n * @returns The decoded value.\n */\n decodeValue(value) {\n return decodeURIComponent(value);\n }\n}\nfunction paramParser(rawParams, codec) {\n const map = new Map();\n if (rawParams.length > 0) {\n // The `window.location.search` can be used while creating an instance of the `HttpParams` class\n // (e.g. `new HttpParams({ fromString: window.location.search })`). The `window.location.search`\n // may start with the `?` char, so we strip it if it's present.\n const params = rawParams.replace(/^\\?/, '').split('&');\n params.forEach(param => {\n const eqIdx = param.indexOf('=');\n const [key, val] = eqIdx == -1 ? [codec.decodeKey(param), ''] : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];\n const list = map.get(key) || [];\n list.push(val);\n map.set(key, list);\n });\n }\n return map;\n}\n/**\n * Encode input string with standard encodeURIComponent and then un-encode specific characters.\n */\nconst STANDARD_ENCODING_REGEX = /%(\\d[a-f0-9])/gi;\nconst STANDARD_ENCODING_REPLACEMENTS = {\n '40': '@',\n '3A': ':',\n '24': '$',\n '2C': ',',\n '3B': ';',\n '3D': '=',\n '3F': '?',\n '2F': '/'\n};\nfunction standardEncoding(v) {\n return encodeURIComponent(v).replace(STANDARD_ENCODING_REGEX, (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s);\n}\nfunction valueToString(value) {\n return `${value}`;\n}\n/**\n * An HTTP request/response body that represents serialized parameters,\n * per the MIME type `application/x-www-form-urlencoded`.\n *\n * This class is immutable; all mutation operations return a new instance.\n *\n * @publicApi\n */\nclass HttpParams {\n constructor(options = {}) {\n this.updates = null;\n this.cloneFrom = null;\n this.encoder = options.encoder || new HttpUrlEncodingCodec();\n if (!!options.fromString) {\n if (!!options.fromObject) {\n throw new Error(`Cannot specify both fromString and fromObject.`);\n }\n this.map = paramParser(options.fromString, this.encoder);\n } else if (!!options.fromObject) {\n this.map = new Map();\n Object.keys(options.fromObject).forEach(key => {\n const value = options.fromObject[key];\n // convert the values to strings\n const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)];\n this.map.set(key, values);\n });\n } else {\n this.map = null;\n }\n }\n /**\n * Reports whether the body includes one or more values for a given parameter.\n * @param param The parameter name.\n * @returns True if the parameter has one or more values,\n * false if it has no value or is not present.\n */\n has(param) {\n this.init();\n return this.map.has(param);\n }\n /**\n * Retrieves the first value for a parameter.\n * @param param The parameter name.\n * @returns The first value of the given parameter,\n * or `null` if the parameter is not present.\n */\n get(param) {\n this.init();\n const res = this.map.get(param);\n return !!res ? res[0] : null;\n }\n /**\n * Retrieves all values for a parameter.\n * @param param The parameter name.\n * @returns All values in a string array,\n * or `null` if the parameter not present.\n */\n getAll(param) {\n this.init();\n return this.map.get(param) || null;\n }\n /**\n * Retrieves all the parameters for this body.\n * @returns The parameter names in a string array.\n */\n keys() {\n this.init();\n return Array.from(this.map.keys());\n }\n /**\n * Appends a new value to existing values for a parameter.\n * @param param The parameter name.\n * @param value The new value to add.\n * @return A new body with the appended value.\n */\n append(param, value) {\n return this.clone({\n param,\n value,\n op: 'a'\n });\n }\n /**\n * Constructs a new body with appended values for the given parameter name.\n * @param params parameters and values\n * @return A new body with the new value.\n */\n appendAll(params) {\n const updates = [];\n Object.keys(params).forEach(param => {\n const value = params[param];\n if (Array.isArray(value)) {\n value.forEach(_value => {\n updates.push({\n param,\n value: _value,\n op: 'a'\n });\n });\n } else {\n updates.push({\n param,\n value: value,\n op: 'a'\n });\n }\n });\n return this.clone(updates);\n }\n /**\n * Replaces the value for a parameter.\n * @param param The parameter name.\n * @param value The new value.\n * @return A new body with the new value.\n */\n set(param, value) {\n return this.clone({\n param,\n value,\n op: 's'\n });\n }\n /**\n * Removes a given value or all values from a parameter.\n * @param param The parameter name.\n * @param value The value to remove, if provided.\n * @return A new body with the given value removed, or with all values\n * removed if no value is specified.\n */\n delete(param, value) {\n return this.clone({\n param,\n value,\n op: 'd'\n });\n }\n /**\n * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are\n * separated by `&`s.\n */\n toString() {\n this.init();\n return this.keys().map(key => {\n const eKey = this.encoder.encodeKey(key);\n // `a: ['1']` produces `'a=1'`\n // `b: []` produces `''`\n // `c: ['1', '2']` produces `'c=1&c=2'`\n return this.map.get(key).map(value => eKey + '=' + this.encoder.encodeValue(value)).join('&');\n })\n // filter out empty values because `b: []` produces `''`\n // which results in `a=1&&c=1&c=2` instead of `a=1&c=1&c=2` if we don't\n .filter(param => param !== '').join('&');\n }\n clone(update) {\n const clone = new HttpParams({\n encoder: this.encoder\n });\n clone.cloneFrom = this.cloneFrom || this;\n clone.updates = (this.updates || []).concat(update);\n return clone;\n }\n init() {\n if (this.map === null) {\n this.map = new Map();\n }\n if (this.cloneFrom !== null) {\n this.cloneFrom.init();\n this.cloneFrom.keys().forEach(key => this.map.set(key, this.cloneFrom.map.get(key)));\n this.updates.forEach(update => {\n switch (update.op) {\n case 'a':\n case 's':\n const base = (update.op === 'a' ? this.map.get(update.param) : undefined) || [];\n base.push(valueToString(update.value));\n this.map.set(update.param, base);\n break;\n case 'd':\n if (update.value !== undefined) {\n let base = this.map.get(update.param) || [];\n const idx = base.indexOf(valueToString(update.value));\n if (idx !== -1) {\n base.splice(idx, 1);\n }\n if (base.length > 0) {\n this.map.set(update.param, base);\n } else {\n this.map.delete(update.param);\n }\n } else {\n this.map.delete(update.param);\n break;\n }\n }\n });\n this.cloneFrom = this.updates = null;\n }\n }\n}\n\n/**\n * A token used to manipulate and access values stored in `HttpContext`.\n *\n * @publicApi\n */\nclass HttpContextToken {\n constructor(defaultValue) {\n this.defaultValue = defaultValue;\n }\n}\n/**\n * Http context stores arbitrary user defined values and ensures type safety without\n * actually knowing the types. It is backed by a `Map` and guarantees that keys do not clash.\n *\n * This context is mutable and is shared between cloned requests unless explicitly specified.\n *\n * @usageNotes\n *\n * ### Usage Example\n *\n * ```typescript\n * // inside cache.interceptors.ts\n * export const IS_CACHE_ENABLED = new HttpContextToken(() => false);\n *\n * export class CacheInterceptor implements HttpInterceptor {\n *\n * intercept(req: HttpRequest, delegate: HttpHandler): Observable> {\n * if (req.context.get(IS_CACHE_ENABLED) === true) {\n * return ...;\n * }\n * return delegate.handle(req);\n * }\n * }\n *\n * // inside a service\n *\n * this.httpClient.get('/api/weather', {\n * context: new HttpContext().set(IS_CACHE_ENABLED, true)\n * }).subscribe(...);\n * ```\n *\n * @publicApi\n */\nclass HttpContext {\n constructor() {\n this.map = new Map();\n }\n /**\n * Store a value in the context. If a value is already present it will be overwritten.\n *\n * @param token The reference to an instance of `HttpContextToken`.\n * @param value The value to store.\n *\n * @returns A reference to itself for easy chaining.\n */\n set(token, value) {\n this.map.set(token, value);\n return this;\n }\n /**\n * Retrieve the value associated with the given token.\n *\n * @param token The reference to an instance of `HttpContextToken`.\n *\n * @returns The stored value or default if one is defined.\n */\n get(token) {\n if (!this.map.has(token)) {\n this.map.set(token, token.defaultValue());\n }\n return this.map.get(token);\n }\n /**\n * Delete the value associated with the given token.\n *\n * @param token The reference to an instance of `HttpContextToken`.\n *\n * @returns A reference to itself for easy chaining.\n */\n delete(token) {\n this.map.delete(token);\n return this;\n }\n /**\n * Checks for existence of a given token.\n *\n * @param token The reference to an instance of `HttpContextToken`.\n *\n * @returns True if the token exists, false otherwise.\n */\n has(token) {\n return this.map.has(token);\n }\n /**\n * @returns a list of tokens currently stored in the context.\n */\n keys() {\n return this.map.keys();\n }\n}\n\n/**\n * Determine whether the given HTTP method may include a body.\n */\nfunction mightHaveBody(method) {\n switch (method) {\n case 'DELETE':\n case 'GET':\n case 'HEAD':\n case 'OPTIONS':\n case 'JSONP':\n return false;\n default:\n return true;\n }\n}\n/**\n * Safely assert whether the given value is an ArrayBuffer.\n *\n * In some execution environments ArrayBuffer is not defined.\n */\nfunction isArrayBuffer(value) {\n return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\n/**\n * Safely assert whether the given value is a Blob.\n *\n * In some execution environments Blob is not defined.\n */\nfunction isBlob(value) {\n return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n/**\n * Safely assert whether the given value is a FormData instance.\n *\n * In some execution environments FormData is not defined.\n */\nfunction isFormData(value) {\n return typeof FormData !== 'undefined' && value instanceof FormData;\n}\n/**\n * Safely assert whether the given value is a URLSearchParams instance.\n *\n * In some execution environments URLSearchParams is not defined.\n */\nfunction isUrlSearchParams(value) {\n return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams;\n}\n/**\n * An outgoing HTTP request with an optional typed body.\n *\n * `HttpRequest` represents an outgoing request, including URL, method,\n * headers, body, and other request configuration options. Instances should be\n * assumed to be immutable. To modify a `HttpRequest`, the `clone`\n * method should be used.\n *\n * @publicApi\n */\nclass HttpRequest {\n constructor(method, url, third, fourth) {\n this.url = url;\n /**\n * The request body, or `null` if one isn't set.\n *\n * Bodies are not enforced to be immutable, as they can include a reference to any\n * user-defined data type. However, interceptors should take care to preserve\n * idempotence by treating them as such.\n */\n this.body = null;\n /**\n * Whether this request should be made in a way that exposes progress events.\n *\n * Progress events are expensive (change detection runs on each event) and so\n * they should only be requested if the consumer intends to monitor them.\n *\n * Note: The `FetchBackend` doesn't support progress report on uploads.\n */\n this.reportProgress = false;\n /**\n * Whether this request should be sent with outgoing credentials (cookies).\n */\n this.withCredentials = false;\n /**\n * The expected response type of the server.\n *\n * This is used to parse the response appropriately before returning it to\n * the requestee.\n */\n this.responseType = 'json';\n this.method = method.toUpperCase();\n // Next, need to figure out which argument holds the HttpRequestInit\n // options, if any.\n let options;\n // Check whether a body argument is expected. The only valid way to omit\n // the body argument is to use a known no-body method like GET.\n if (mightHaveBody(this.method) || !!fourth) {\n // Body is the third argument, options are the fourth.\n this.body = third !== undefined ? third : null;\n options = fourth;\n } else {\n // No body required, options are the third argument. The body stays null.\n options = third;\n }\n // If options have been passed, interpret them.\n if (options) {\n // Normalize reportProgress and withCredentials.\n this.reportProgress = !!options.reportProgress;\n this.withCredentials = !!options.withCredentials;\n // Override default response type of 'json' if one is provided.\n if (!!options.responseType) {\n this.responseType = options.responseType;\n }\n // Override headers if they're provided.\n if (!!options.headers) {\n this.headers = options.headers;\n }\n if (!!options.context) {\n this.context = options.context;\n }\n if (!!options.params) {\n this.params = options.params;\n }\n // We do want to assign transferCache even if it's falsy (false is valid value)\n this.transferCache = options.transferCache;\n }\n // If no headers have been passed in, construct a new HttpHeaders instance.\n this.headers ??= new HttpHeaders();\n // If no context have been passed in, construct a new HttpContext instance.\n this.context ??= new HttpContext();\n // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.\n if (!this.params) {\n this.params = new HttpParams();\n this.urlWithParams = url;\n } else {\n // Encode the parameters to a string in preparation for inclusion in the URL.\n const params = this.params.toString();\n if (params.length === 0) {\n // No parameters, the visible URL is just the URL given at creation time.\n this.urlWithParams = url;\n } else {\n // Does the URL already have query parameters? Look for '?'.\n const qIdx = url.indexOf('?');\n // There are 3 cases to handle:\n // 1) No existing parameters -> append '?' followed by params.\n // 2) '?' exists and is followed by existing query string ->\n // append '&' followed by params.\n // 3) '?' exists at the end of the url -> append params directly.\n // This basically amounts to determining the character, if any, with\n // which to join the URL and parameters.\n const sep = qIdx === -1 ? '?' : qIdx < url.length - 1 ? '&' : '';\n this.urlWithParams = url + sep + params;\n }\n }\n }\n /**\n * Transform the free-form body into a serialized format suitable for\n * transmission to the server.\n */\n serializeBody() {\n // If no body is present, no need to serialize it.\n if (this.body === null) {\n return null;\n }\n // Check whether the body is already in a serialized form. If so,\n // it can just be returned directly.\n if (typeof this.body === 'string' || isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) || isUrlSearchParams(this.body)) {\n return this.body;\n }\n // Check whether the body is an instance of HttpUrlEncodedParams.\n if (this.body instanceof HttpParams) {\n return this.body.toString();\n }\n // Check whether the body is an object or array, and serialize with JSON if so.\n if (typeof this.body === 'object' || typeof this.body === 'boolean' || Array.isArray(this.body)) {\n return JSON.stringify(this.body);\n }\n // Fall back on toString() for everything else.\n return this.body.toString();\n }\n /**\n * Examine the body and attempt to infer an appropriate MIME type\n * for it.\n *\n * If no such type can be inferred, this method will return `null`.\n */\n detectContentTypeHeader() {\n // An empty body has no content type.\n if (this.body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (isFormData(this.body)) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (isBlob(this.body)) {\n return this.body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (isArrayBuffer(this.body)) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof this.body === 'string') {\n return 'text/plain';\n }\n // `HttpUrlEncodedParams` has its own content-type.\n if (this.body instanceof HttpParams) {\n return 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n // Arrays, objects, boolean and numbers will be encoded as JSON.\n if (typeof this.body === 'object' || typeof this.body === 'number' || typeof this.body === 'boolean') {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n }\n clone(update = {}) {\n // For method, url, and responseType, take the current value unless\n // it is overridden in the update hash.\n const method = update.method || this.method;\n const url = update.url || this.url;\n const responseType = update.responseType || this.responseType;\n // Carefully handle the transferCache to differentiate between\n // `false` and `undefined` in the update args.\n const transferCache = update.transferCache ?? this.transferCache;\n // The body is somewhat special - a `null` value in update.body means\n // whatever current body is present is being overridden with an empty\n // body, whereas an `undefined` value in update.body implies no\n // override.\n const body = update.body !== undefined ? update.body : this.body;\n // Carefully handle the boolean options to differentiate between\n // `false` and `undefined` in the update args.\n const withCredentials = update.withCredentials ?? this.withCredentials;\n const reportProgress = update.reportProgress ?? this.reportProgress;\n // Headers and params may be appended to if `setHeaders` or\n // `setParams` are used.\n let headers = update.headers || this.headers;\n let params = update.params || this.params;\n // Pass on context if needed\n const context = update.context ?? this.context;\n // Check whether the caller has asked to add headers.\n if (update.setHeaders !== undefined) {\n // Set every requested header.\n headers = Object.keys(update.setHeaders).reduce((headers, name) => headers.set(name, update.setHeaders[name]), headers);\n }\n // Check whether the caller has asked to set params.\n if (update.setParams) {\n // Set every requested param.\n params = Object.keys(update.setParams).reduce((params, param) => params.set(param, update.setParams[param]), params);\n }\n // Finally, construct the new HttpRequest using the pieces from above.\n return new HttpRequest(method, url, body, {\n params,\n headers,\n context,\n reportProgress,\n responseType,\n withCredentials,\n transferCache\n });\n }\n}\n\n/**\n * Type enumeration for the different kinds of `HttpEvent`.\n *\n * @publicApi\n */\nvar HttpEventType = /*#__PURE__*/function (HttpEventType) {\n /**\n * The request was sent out over the wire.\n */\n HttpEventType[HttpEventType[\"Sent\"] = 0] = \"Sent\";\n /**\n * An upload progress event was received.\n *\n * Note: The `FetchBackend` doesn't support progress report on uploads.\n */\n HttpEventType[HttpEventType[\"UploadProgress\"] = 1] = \"UploadProgress\";\n /**\n * The response status code and headers were received.\n */\n HttpEventType[HttpEventType[\"ResponseHeader\"] = 2] = \"ResponseHeader\";\n /**\n * A download progress event was received.\n */\n HttpEventType[HttpEventType[\"DownloadProgress\"] = 3] = \"DownloadProgress\";\n /**\n * The full response including the body was received.\n */\n HttpEventType[HttpEventType[\"Response\"] = 4] = \"Response\";\n /**\n * A custom event from an interceptor or a backend.\n */\n HttpEventType[HttpEventType[\"User\"] = 5] = \"User\";\n return HttpEventType;\n}(HttpEventType || {});\n/**\n * Base class for both `HttpResponse` and `HttpHeaderResponse`.\n *\n * @publicApi\n */\nclass HttpResponseBase {\n /**\n * Super-constructor for all responses.\n *\n * The single parameter accepted is an initialization hash. Any properties\n * of the response passed there will override the default values.\n */\n constructor(init, defaultStatus = 200, defaultStatusText = 'OK') {\n // If the hash has values passed, use them to initialize the response.\n // Otherwise use the default values.\n this.headers = init.headers || new HttpHeaders();\n this.status = init.status !== undefined ? init.status : defaultStatus;\n this.statusText = init.statusText || defaultStatusText;\n this.url = init.url || null;\n // Cache the ok value to avoid defining a getter.\n this.ok = this.status >= 200 && this.status < 300;\n }\n}\n/**\n * A partial HTTP response which only includes the status and header data,\n * but no response body.\n *\n * `HttpHeaderResponse` is a `HttpEvent` available on the response\n * event stream, only when progress events are requested.\n *\n * @publicApi\n */\nclass HttpHeaderResponse extends HttpResponseBase {\n /**\n * Create a new `HttpHeaderResponse` with the given parameters.\n */\n constructor(init = {}) {\n super(init);\n this.type = HttpEventType.ResponseHeader;\n }\n /**\n * Copy this `HttpHeaderResponse`, overriding its contents with the\n * given parameter hash.\n */\n clone(update = {}) {\n // Perform a straightforward initialization of the new HttpHeaderResponse,\n // overriding the current parameters with new ones if given.\n return new HttpHeaderResponse({\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined\n });\n }\n}\n/**\n * A full HTTP response, including a typed response body (which may be `null`\n * if one was not returned).\n *\n * `HttpResponse` is a `HttpEvent` available on the response event\n * stream.\n *\n * @publicApi\n */\nclass HttpResponse extends HttpResponseBase {\n /**\n * Construct a new `HttpResponse`.\n */\n constructor(init = {}) {\n super(init);\n this.type = HttpEventType.Response;\n this.body = init.body !== undefined ? init.body : null;\n }\n clone(update = {}) {\n return new HttpResponse({\n body: update.body !== undefined ? update.body : this.body,\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined\n });\n }\n}\n/**\n * A response that represents an error or failure, either from a\n * non-successful HTTP status, an error while executing the request,\n * or some other failure which occurred during the parsing of the response.\n *\n * Any error returned on the `Observable` response stream will be\n * wrapped in an `HttpErrorResponse` to provide additional context about\n * the state of the HTTP layer when the error occurred. The error property\n * will contain either a wrapped Error object or the error response returned\n * from the server.\n *\n * @publicApi\n */\nclass HttpErrorResponse extends HttpResponseBase {\n constructor(init) {\n // Initialize with a default status of 0 / Unknown Error.\n super(init, 0, 'Unknown Error');\n this.name = 'HttpErrorResponse';\n /**\n * Errors are never okay, even when the status code is in the 2xx success range.\n */\n this.ok = false;\n // If the response was successful, then this was a parse error. Otherwise, it was\n // a protocol-level failure of some sort. Either the request failed in transit\n // or the server returned an unsuccessful status code.\n if (this.status >= 200 && this.status < 300) {\n this.message = `Http failure during parsing for ${init.url || '(unknown url)'}`;\n } else {\n this.message = `Http failure response for ${init.url || '(unknown url)'}: ${init.status} ${init.statusText}`;\n }\n this.error = init.error || null;\n }\n}\n/**\n * We use these constant to prevent pulling the whole HttpStatusCode enum\n * Those are the only ones referenced directly by the framework\n */\nconst HTTP_STATUS_CODE_OK = 200;\nconst HTTP_STATUS_CODE_NO_CONTENT = 204;\n/**\n * Http status codes.\n * As per https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\n * @publicApi\n */\nvar HttpStatusCode = /*#__PURE__*/function (HttpStatusCode) {\n HttpStatusCode[HttpStatusCode[\"Continue\"] = 100] = \"Continue\";\n HttpStatusCode[HttpStatusCode[\"SwitchingProtocols\"] = 101] = \"SwitchingProtocols\";\n HttpStatusCode[HttpStatusCode[\"Processing\"] = 102] = \"Processing\";\n HttpStatusCode[HttpStatusCode[\"EarlyHints\"] = 103] = \"EarlyHints\";\n HttpStatusCode[HttpStatusCode[\"Ok\"] = 200] = \"Ok\";\n HttpStatusCode[HttpStatusCode[\"Created\"] = 201] = \"Created\";\n HttpStatusCode[HttpStatusCode[\"Accepted\"] = 202] = \"Accepted\";\n HttpStatusCode[HttpStatusCode[\"NonAuthoritativeInformation\"] = 203] = \"NonAuthoritativeInformation\";\n HttpStatusCode[HttpStatusCode[\"NoContent\"] = 204] = \"NoContent\";\n HttpStatusCode[HttpStatusCode[\"ResetContent\"] = 205] = \"ResetContent\";\n HttpStatusCode[HttpStatusCode[\"PartialContent\"] = 206] = \"PartialContent\";\n HttpStatusCode[HttpStatusCode[\"MultiStatus\"] = 207] = \"MultiStatus\";\n HttpStatusCode[HttpStatusCode[\"AlreadyReported\"] = 208] = \"AlreadyReported\";\n HttpStatusCode[HttpStatusCode[\"ImUsed\"] = 226] = \"ImUsed\";\n HttpStatusCode[HttpStatusCode[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpStatusCode[HttpStatusCode[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpStatusCode[HttpStatusCode[\"Found\"] = 302] = \"Found\";\n HttpStatusCode[HttpStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpStatusCode[HttpStatusCode[\"NotModified\"] = 304] = \"NotModified\";\n HttpStatusCode[HttpStatusCode[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpStatusCode[HttpStatusCode[\"Unused\"] = 306] = \"Unused\";\n HttpStatusCode[HttpStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpStatusCode[HttpStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpStatusCode[HttpStatusCode[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpStatusCode[HttpStatusCode[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpStatusCode[HttpStatusCode[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpStatusCode[HttpStatusCode[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpStatusCode[HttpStatusCode[\"NotFound\"] = 404] = \"NotFound\";\n HttpStatusCode[HttpStatusCode[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpStatusCode[HttpStatusCode[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpStatusCode[HttpStatusCode[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpStatusCode[HttpStatusCode[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpStatusCode[HttpStatusCode[\"Conflict\"] = 409] = \"Conflict\";\n HttpStatusCode[HttpStatusCode[\"Gone\"] = 410] = \"Gone\";\n HttpStatusCode[HttpStatusCode[\"LengthRequired\"] = 411] = \"LengthRequired\";\n HttpStatusCode[HttpStatusCode[\"PreconditionFailed\"] = 412] = \"PreconditionFailed\";\n HttpStatusCode[HttpStatusCode[\"PayloadTooLarge\"] = 413] = \"PayloadTooLarge\";\n HttpStatusCode[HttpStatusCode[\"UriTooLong\"] = 414] = \"UriTooLong\";\n HttpStatusCode[HttpStatusCode[\"UnsupportedMediaType\"] = 415] = \"UnsupportedMediaType\";\n HttpStatusCode[HttpStatusCode[\"RangeNotSatisfiable\"] = 416] = \"RangeNotSatisfiable\";\n HttpStatusCode[HttpStatusCode[\"ExpectationFailed\"] = 417] = \"ExpectationFailed\";\n HttpStatusCode[HttpStatusCode[\"ImATeapot\"] = 418] = \"ImATeapot\";\n HttpStatusCode[HttpStatusCode[\"MisdirectedRequest\"] = 421] = \"MisdirectedRequest\";\n HttpStatusCode[HttpStatusCode[\"UnprocessableEntity\"] = 422] = \"UnprocessableEntity\";\n HttpStatusCode[HttpStatusCode[\"Locked\"] = 423] = \"Locked\";\n HttpStatusCode[HttpStatusCode[\"FailedDependency\"] = 424] = \"FailedDependency\";\n HttpStatusCode[HttpStatusCode[\"TooEarly\"] = 425] = \"TooEarly\";\n HttpStatusCode[HttpStatusCode[\"UpgradeRequired\"] = 426] = \"UpgradeRequired\";\n HttpStatusCode[HttpStatusCode[\"PreconditionRequired\"] = 428] = \"PreconditionRequired\";\n HttpStatusCode[HttpStatusCode[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpStatusCode[HttpStatusCode[\"RequestHeaderFieldsTooLarge\"] = 431] = \"RequestHeaderFieldsTooLarge\";\n HttpStatusCode[HttpStatusCode[\"UnavailableForLegalReasons\"] = 451] = \"UnavailableForLegalReasons\";\n HttpStatusCode[HttpStatusCode[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpStatusCode[HttpStatusCode[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpStatusCode[HttpStatusCode[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpStatusCode[HttpStatusCode[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpStatusCode[HttpStatusCode[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n HttpStatusCode[HttpStatusCode[\"HttpVersionNotSupported\"] = 505] = \"HttpVersionNotSupported\";\n HttpStatusCode[HttpStatusCode[\"VariantAlsoNegotiates\"] = 506] = \"VariantAlsoNegotiates\";\n HttpStatusCode[HttpStatusCode[\"InsufficientStorage\"] = 507] = \"InsufficientStorage\";\n HttpStatusCode[HttpStatusCode[\"LoopDetected\"] = 508] = \"LoopDetected\";\n HttpStatusCode[HttpStatusCode[\"NotExtended\"] = 510] = \"NotExtended\";\n HttpStatusCode[HttpStatusCode[\"NetworkAuthenticationRequired\"] = 511] = \"NetworkAuthenticationRequired\";\n return HttpStatusCode;\n}(HttpStatusCode || {});\n/**\n * Constructs an instance of `HttpRequestOptions` from a source `HttpMethodOptions` and\n * the given `body`. This function clones the object and adds the body.\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n *\n */\nfunction addBody(options, body) {\n return {\n body,\n headers: options.headers,\n context: options.context,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n transferCache: options.transferCache\n };\n}\n/**\n * Performs HTTP requests.\n * This service is available as an injectable class, with methods to perform HTTP requests.\n * Each request method has multiple signatures, and the return type varies based on\n * the signature that is called (mainly the values of `observe` and `responseType`).\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n\n * TODO(adev): review\n * @usageNotes\n *\n * ### HTTP Request Example\n *\n * ```\n * // GET heroes whose name contains search term\n * searchHeroes(term: string): observable{\n *\n * const params = new HttpParams({fromString: 'name=term'});\n * return this.httpClient.request('GET', this.heroesUrl, {responseType:'json', params});\n * }\n * ```\n *\n * Alternatively, the parameter string can be used without invoking HttpParams\n * by directly joining to the URL.\n * ```\n * this.httpClient.request('GET', this.heroesUrl + '?' + 'name=term', {responseType:'json'});\n * ```\n *\n *\n * ### JSONP Example\n * ```\n * requestJsonp(url, callback = 'callback') {\n * return this.httpClient.jsonp(this.heroesURL, callback);\n * }\n * ```\n *\n * ### PATCH Example\n * ```\n * // PATCH one of the heroes' name\n * patchHero (id: number, heroName: string): Observable<{}> {\n * const url = `${this.heroesUrl}/${id}`; // PATCH api/heroes/42\n * return this.httpClient.patch(url, {name: heroName}, httpOptions)\n * .pipe(catchError(this.handleError('patchHero')));\n * }\n * ```\n *\n * @see [HTTP Guide](guide/http)\n * @see [HTTP Request](api/common/http/HttpRequest)\n *\n * @publicApi\n */\nlet HttpClient = /*#__PURE__*/(() => {\n class HttpClient {\n constructor(handler) {\n this.handler = handler;\n }\n /**\n * Constructs an observable for a generic HTTP request that, when subscribed,\n * fires the request through the chain of registered interceptors and on to the\n * server.\n *\n * You can pass an `HttpRequest` directly as the only parameter. In this case,\n * the call returns an observable of the raw `HttpEvent` stream.\n *\n * Alternatively you can pass an HTTP method as the first parameter,\n * a URL string as the second, and an options hash containing the request body as the third.\n * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the\n * type of returned observable.\n * * The `responseType` value determines how a successful response body is parsed.\n * * If `responseType` is the default `json`, you can pass a type interface for the resulting\n * object as a type parameter to the call.\n *\n * The `observe` value determines the return type, according to what you are interested in\n * observing.\n * * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including\n * progress events by default.\n * * An `observe` value of response returns an observable of `HttpResponse`,\n * where the `T` parameter depends on the `responseType` and any optionally provided type\n * parameter.\n * * An `observe` value of body returns an observable of `` with the same `T` body type.\n *\n */\n request(first, url, options = {}) {\n let req;\n // First, check whether the primary argument is an instance of `HttpRequest`.\n if (first instanceof HttpRequest) {\n // It is. The other arguments must be undefined (per the signatures) and can be\n // ignored.\n req = first;\n } else {\n // It's a string, so it represents a URL. Construct a request based on it,\n // and incorporate the remaining arguments (assuming `GET` unless a method is\n // provided.\n // Figure out the headers.\n let headers = undefined;\n if (options.headers instanceof HttpHeaders) {\n headers = options.headers;\n } else {\n headers = new HttpHeaders(options.headers);\n }\n // Sort out parameters.\n let params = undefined;\n if (!!options.params) {\n if (options.params instanceof HttpParams) {\n params = options.params;\n } else {\n params = new HttpParams({\n fromObject: options.params\n });\n }\n }\n // Construct the request.\n req = new HttpRequest(first, url, options.body !== undefined ? options.body : null, {\n headers,\n context: options.context,\n params,\n reportProgress: options.reportProgress,\n // By default, JSON is assumed to be returned for all calls.\n responseType: options.responseType || 'json',\n withCredentials: options.withCredentials,\n transferCache: options.transferCache\n });\n }\n // Start with an Observable.of() the initial request, and run the handler (which\n // includes all interceptors) inside a concatMap(). This way, the handler runs\n // inside an Observable chain, which causes interceptors to be re-run on every\n // subscription (this also makes retries re-run the handler, including interceptors).\n const events$ = of(req).pipe(concatMap(req => this.handler.handle(req)));\n // If coming via the API signature which accepts a previously constructed HttpRequest,\n // the only option is to get the event stream. Otherwise, return the event stream if\n // that is what was requested.\n if (first instanceof HttpRequest || options.observe === 'events') {\n return events$;\n }\n // The requested stream contains either the full response or the body. In either\n // case, the first step is to filter the event stream to extract a stream of\n // responses(s).\n const res$ = events$.pipe(filter(event => event instanceof HttpResponse));\n // Decide which stream to return.\n switch (options.observe || 'body') {\n case 'body':\n // The requested stream is the body. Map the response stream to the response\n // body. This could be done more simply, but a misbehaving interceptor might\n // transform the response body into a different format and ignore the requested\n // responseType. Guard against this by validating that the response is of the\n // requested type.\n switch (req.responseType) {\n case 'arraybuffer':\n return res$.pipe(map(res => {\n // Validate that the body is an ArrayBuffer.\n if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n throw new Error('Response is not an ArrayBuffer.');\n }\n return res.body;\n }));\n case 'blob':\n return res$.pipe(map(res => {\n // Validate that the body is a Blob.\n if (res.body !== null && !(res.body instanceof Blob)) {\n throw new Error('Response is not a Blob.');\n }\n return res.body;\n }));\n case 'text':\n return res$.pipe(map(res => {\n // Validate that the body is a string.\n if (res.body !== null && typeof res.body !== 'string') {\n throw new Error('Response is not a string.');\n }\n return res.body;\n }));\n case 'json':\n default:\n // No validation needed for JSON responses, as they can be of any type.\n return res$.pipe(map(res => res.body));\n }\n case 'response':\n // The response stream was requested directly, so return it.\n return res$;\n default:\n // Guard against new future observe types being added.\n throw new Error(`Unreachable: unhandled observe type ${options.observe}}`);\n }\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `DELETE` request to execute on the server. See the individual overloads for\n * details on the return type.\n *\n * @param url The endpoint URL.\n * @param options The HTTP options to send with the request.\n *\n */\n delete(url, options = {}) {\n return this.request('DELETE', url, options);\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `GET` request to execute on the server. See the individual overloads for\n * details on the return type.\n */\n get(url, options = {}) {\n return this.request('GET', url, options);\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `HEAD` request to execute on the server. The `HEAD` method returns\n * meta information about the resource without transferring the\n * resource itself. See the individual overloads for\n * details on the return type.\n */\n head(url, options = {}) {\n return this.request('HEAD', url, options);\n }\n /**\n * Constructs an `Observable` that, when subscribed, causes a request with the special method\n * `JSONP` to be dispatched via the interceptor pipeline.\n * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain\n * API endpoints that don't support newer,\n * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol.\n * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the\n * requests even if the API endpoint is not located on the same domain (origin) as the client-side\n * application making the request.\n * The endpoint API must support JSONP callback for JSONP requests to work.\n * The resource API returns the JSON response wrapped in a callback function.\n * You can pass the callback function name as one of the query parameters.\n * Note that JSONP requests can only be used with `GET` requests.\n *\n * @param url The resource URL.\n * @param callbackParam The callback function name.\n *\n */\n jsonp(url, callbackParam) {\n return this.request('JSONP', url, {\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json'\n });\n }\n /**\n * Constructs an `Observable` that, when subscribed, causes the configured\n * `OPTIONS` request to execute on the server. This method allows the client\n * to determine the supported HTTP methods and other capabilities of an endpoint,\n * without implying a resource action. See the individual overloads for\n * details on the return type.\n */\n options(url, options = {}) {\n return this.request('OPTIONS', url, options);\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `PATCH` request to execute on the server. See the individual overloads for\n * details on the return type.\n */\n patch(url, body, options = {}) {\n return this.request('PATCH', url, addBody(options, body));\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `POST` request to execute on the server. The server responds with the location of\n * the replaced resource. See the individual overloads for\n * details on the return type.\n */\n post(url, body, options = {}) {\n return this.request('POST', url, addBody(options, body));\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `PUT` request to execute on the server. The `PUT` method replaces an existing resource\n * with a new set of values.\n * See the individual overloads for details on the return type.\n */\n put(url, body, options = {}) {\n return this.request('PUT', url, addBody(options, body));\n }\n static #_ = this.ɵfac = function HttpClient_Factory(t) {\n return new (t || HttpClient)(i0.ɵɵinject(HttpHandler));\n };\n static #_2 = this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpClient,\n factory: HttpClient.ɵfac\n });\n }\n return HttpClient;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst XSSI_PREFIX$1 = /^\\)\\]\\}',?\\n/;\nconst REQUEST_URL_HEADER = `X-Request-URL`;\n/**\n * Determine an appropriate URL for the response, by checking either\n * response url or the X-Request-URL header.\n */\nfunction getResponseUrl$1(response) {\n if (response.url) {\n return response.url;\n }\n // stored as lowercase in the map\n const xRequestUrl = REQUEST_URL_HEADER.toLocaleLowerCase();\n return response.headers.get(xRequestUrl);\n}\n/**\n * Uses `fetch` to send requests to a backend server.\n *\n * This `FetchBackend` requires the support of the\n * [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) which is available on all\n * supported browsers and on Node.js v18 or later.\n *\n * @see {@link HttpHandler}\n *\n * @publicApi\n */\nlet FetchBackend = /*#__PURE__*/(() => {\n class FetchBackend {\n constructor() {\n // We need to bind the native fetch to its context or it will throw an \"illegal invocation\"\n this.fetchImpl = inject(FetchFactory, {\n optional: true\n })?.fetch ?? fetch.bind(globalThis);\n this.ngZone = inject(NgZone);\n }\n handle(request) {\n return new Observable(observer => {\n const aborter = new AbortController();\n this.doRequest(request, aborter.signal, observer).then(noop, error => observer.error(new HttpErrorResponse({\n error\n })));\n return () => aborter.abort();\n });\n }\n doRequest(request, signal, observer) {\n var _this = this;\n return _asyncToGenerator(function* () {\n const init = _this.createRequestInit(request);\n let response;\n try {\n const fetchPromise = _this.fetchImpl(request.urlWithParams, {\n signal,\n ...init\n });\n // Make sure Zone.js doesn't trigger false-positive unhandled promise\n // error in case the Promise is rejected synchronously. See function\n // description for additional information.\n silenceSuperfluousUnhandledPromiseRejection(fetchPromise);\n // Send the `Sent` event before awaiting the response.\n observer.next({\n type: HttpEventType.Sent\n });\n response = yield fetchPromise;\n } catch (error) {\n observer.error(new HttpErrorResponse({\n error,\n status: error.status ?? 0,\n statusText: error.statusText,\n url: request.urlWithParams,\n headers: error.headers\n }));\n return;\n }\n const headers = new HttpHeaders(response.headers);\n const statusText = response.statusText;\n const url = getResponseUrl$1(response) ?? request.urlWithParams;\n let status = response.status;\n let body = null;\n if (request.reportProgress) {\n observer.next(new HttpHeaderResponse({\n headers,\n status,\n statusText,\n url\n }));\n }\n if (response.body) {\n // Read Progress\n const contentLength = response.headers.get('content-length');\n const chunks = [];\n const reader = response.body.getReader();\n let receivedLength = 0;\n let decoder;\n let partialText;\n // We have to check whether the Zone is defined in the global scope because this may be called\n // when the zone is nooped.\n const reqZone = typeof Zone !== 'undefined' && Zone.current;\n // Perform response processing outside of Angular zone to\n // ensure no excessive change detection runs are executed\n // Here calling the async ReadableStreamDefaultReader.read() is responsible for triggering CD\n yield _this.ngZone.runOutsideAngular( /*#__PURE__*/_asyncToGenerator(function* () {\n while (true) {\n const {\n done,\n value\n } = yield reader.read();\n if (done) {\n break;\n }\n chunks.push(value);\n receivedLength += value.length;\n if (request.reportProgress) {\n partialText = request.responseType === 'text' ? (partialText ?? '') + (decoder ??= new TextDecoder()).decode(value, {\n stream: true\n }) : undefined;\n const reportProgress = () => observer.next({\n type: HttpEventType.DownloadProgress,\n total: contentLength ? +contentLength : undefined,\n loaded: receivedLength,\n partialText\n });\n reqZone ? reqZone.run(reportProgress) : reportProgress();\n }\n }\n }));\n // Combine all chunks.\n const chunksAll = _this.concatChunks(chunks, receivedLength);\n try {\n const contentType = response.headers.get('Content-Type') ?? '';\n body = _this.parseBody(request, chunksAll, contentType);\n } catch (error) {\n // Body loading or parsing failed\n observer.error(new HttpErrorResponse({\n error,\n headers: new HttpHeaders(response.headers),\n status: response.status,\n statusText: response.statusText,\n url: getResponseUrl$1(response) ?? request.urlWithParams\n }));\n return;\n }\n }\n // Same behavior as the XhrBackend\n if (status === 0) {\n status = body ? HTTP_STATUS_CODE_OK : 0;\n }\n // ok determines whether the response will be transmitted on the event or\n // error channel. Unsuccessful status codes (not 2xx) will always be errors,\n // but a successful status code can still result in an error if the user\n // asked for JSON data and the body cannot be parsed as such.\n const ok = status >= 200 && status < 300;\n if (ok) {\n observer.next(new HttpResponse({\n body,\n headers,\n status,\n statusText,\n url\n }));\n // The full body has been received and delivered, no further events\n // are possible. This request is complete.\n observer.complete();\n } else {\n observer.error(new HttpErrorResponse({\n error: body,\n headers,\n status,\n statusText,\n url\n }));\n }\n })();\n }\n parseBody(request, binContent, contentType) {\n switch (request.responseType) {\n case 'json':\n // stripping the XSSI when present\n const text = new TextDecoder().decode(binContent).replace(XSSI_PREFIX$1, '');\n return text === '' ? null : JSON.parse(text);\n case 'text':\n return new TextDecoder().decode(binContent);\n case 'blob':\n return new Blob([binContent], {\n type: contentType\n });\n case 'arraybuffer':\n return binContent.buffer;\n }\n }\n createRequestInit(req) {\n // We could share some of this logic with the XhrBackend\n const headers = {};\n const credentials = req.withCredentials ? 'include' : undefined;\n // Setting all the requested headers.\n req.headers.forEach((name, values) => headers[name] = values.join(','));\n // Add an Accept header if one isn't present already.\n headers['Accept'] ??= 'application/json, text/plain, */*';\n // Auto-detect the Content-Type header if one isn't present already.\n if (!headers['Content-Type']) {\n const detectedType = req.detectContentTypeHeader();\n // Sometimes Content-Type detection fails.\n if (detectedType !== null) {\n headers['Content-Type'] = detectedType;\n }\n }\n return {\n body: req.serializeBody(),\n method: req.method,\n headers,\n credentials\n };\n }\n concatChunks(chunks, totalLength) {\n const chunksAll = new Uint8Array(totalLength);\n let position = 0;\n for (const chunk of chunks) {\n chunksAll.set(chunk, position);\n position += chunk.length;\n }\n return chunksAll;\n }\n static #_ = this.ɵfac = function FetchBackend_Factory(t) {\n return new (t || FetchBackend)();\n };\n static #_2 = this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FetchBackend,\n factory: FetchBackend.ɵfac\n });\n }\n return FetchBackend;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Abstract class to provide a mocked implementation of `fetch()`\n */\nclass FetchFactory {}\nfunction noop() {}\n/**\n * Zone.js treats a rejected promise that has not yet been awaited\n * as an unhandled error. This function adds a noop `.then` to make\n * sure that Zone.js doesn't throw an error if the Promise is rejected\n * synchronously.\n */\nfunction silenceSuperfluousUnhandledPromiseRejection(promise) {\n promise.then(noop, noop);\n}\nfunction interceptorChainEndFn(req, finalHandlerFn) {\n return finalHandlerFn(req);\n}\n/**\n * Constructs a `ChainedInterceptorFn` which adapts a legacy `HttpInterceptor` to the\n * `ChainedInterceptorFn` interface.\n */\nfunction adaptLegacyInterceptorToChain(chainTailFn, interceptor) {\n return (initialRequest, finalHandlerFn) => interceptor.intercept(initialRequest, {\n handle: downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)\n });\n}\n/**\n * Constructs a `ChainedInterceptorFn` which wraps and invokes a functional interceptor in the given\n * injector.\n */\nfunction chainedInterceptorFn(chainTailFn, interceptorFn, injector) {\n return (initialRequest, finalHandlerFn) => runInInjectionContext(injector, () => interceptorFn(initialRequest, downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)));\n}\n/**\n * A multi-provider token that represents the array of registered\n * `HttpInterceptor` objects.\n *\n * @publicApi\n */\nconst HTTP_INTERCEPTORS = /*#__PURE__*/new InjectionToken(ngDevMode ? 'HTTP_INTERCEPTORS' : '');\n/**\n * A multi-provided token of `HttpInterceptorFn`s.\n */\nconst HTTP_INTERCEPTOR_FNS = /*#__PURE__*/new InjectionToken(ngDevMode ? 'HTTP_INTERCEPTOR_FNS' : '');\n/**\n * A multi-provided token of `HttpInterceptorFn`s that are only set in root.\n */\nconst HTTP_ROOT_INTERCEPTOR_FNS = /*#__PURE__*/new InjectionToken(ngDevMode ? 'HTTP_ROOT_INTERCEPTOR_FNS' : '');\n// TODO(atscott): We need a larger discussion about stability and what should contribute to stability.\n// Should the whole interceptor chain contribute to stability or just the backend request #55075?\n// Should HttpClient contribute to stability automatically at all?\nconst REQUESTS_CONTRIBUTE_TO_STABILITY = /*#__PURE__*/new InjectionToken(ngDevMode ? 'REQUESTS_CONTRIBUTE_TO_STABILITY' : '', {\n providedIn: 'root',\n factory: () => true\n});\n/**\n * Creates an `HttpInterceptorFn` which lazily initializes an interceptor chain from the legacy\n * class-based interceptors and runs the request through it.\n */\nfunction legacyInterceptorFnFactory() {\n let chain = null;\n return (req, handler) => {\n if (chain === null) {\n const interceptors = inject(HTTP_INTERCEPTORS, {\n optional: true\n }) ?? [];\n // Note: interceptors are wrapped right-to-left so that final execution order is\n // left-to-right. That is, if `interceptors` is the array `[a, b, c]`, we want to\n // produce a chain that is conceptually `c(b(a(end)))`, which we build from the inside\n // out.\n chain = interceptors.reduceRight(adaptLegacyInterceptorToChain, interceptorChainEndFn);\n }\n const pendingTasks = inject(ɵPendingTasks);\n const contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n if (contributeToStability) {\n const taskId = pendingTasks.add();\n return chain(req, handler).pipe(finalize(() => pendingTasks.remove(taskId)));\n } else {\n return chain(req, handler);\n }\n };\n}\nlet fetchBackendWarningDisplayed = false;\n/** Internal function to reset the flag in tests */\nfunction resetFetchBackendWarningFlag() {\n fetchBackendWarningDisplayed = false;\n}\nlet HttpInterceptorHandler = /*#__PURE__*/(() => {\n class HttpInterceptorHandler extends HttpHandler {\n constructor(backend, injector) {\n super();\n this.backend = backend;\n this.injector = injector;\n this.chain = null;\n this.pendingTasks = inject(ɵPendingTasks);\n this.contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n // We strongly recommend using fetch backend for HTTP calls when SSR is used\n // for an application. The logic below checks if that's the case and produces\n // a warning otherwise.\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !fetchBackendWarningDisplayed) {\n const isServer = isPlatformServer(injector.get(PLATFORM_ID));\n if (isServer && !(this.backend instanceof FetchBackend)) {\n fetchBackendWarningDisplayed = true;\n injector.get(ɵConsole).warn(ɵformatRuntimeError(2801 /* RuntimeErrorCode.NOT_USING_FETCH_BACKEND_IN_SSR */, 'Angular detected that `HttpClient` is not configured ' + \"to use `fetch` APIs. It's strongly recommended to \" + 'enable `fetch` for applications that use Server-Side Rendering ' + 'for better performance and compatibility. ' + 'To enable `fetch`, add the `withFetch()` to the `provideHttpClient()` ' + 'call at the root of the application.'));\n }\n }\n }\n handle(initialRequest) {\n if (this.chain === null) {\n const dedupedInterceptorFns = Array.from(new Set([...this.injector.get(HTTP_INTERCEPTOR_FNS), ...this.injector.get(HTTP_ROOT_INTERCEPTOR_FNS, [])]));\n // Note: interceptors are wrapped right-to-left so that final execution order is\n // left-to-right. That is, if `dedupedInterceptorFns` is the array `[a, b, c]`, we want to\n // produce a chain that is conceptually `c(b(a(end)))`, which we build from the inside\n // out.\n this.chain = dedupedInterceptorFns.reduceRight((nextSequencedFn, interceptorFn) => chainedInterceptorFn(nextSequencedFn, interceptorFn, this.injector), interceptorChainEndFn);\n }\n if (this.contributeToStability) {\n const taskId = this.pendingTasks.add();\n return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest)).pipe(finalize(() => this.pendingTasks.remove(taskId)));\n } else {\n return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest));\n }\n }\n static #_ = this.ɵfac = function HttpInterceptorHandler_Factory(t) {\n return new (t || HttpInterceptorHandler)(i0.ɵɵinject(HttpBackend), i0.ɵɵinject(i0.EnvironmentInjector));\n };\n static #_2 = this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HttpInterceptorHandler,\n factory: HttpInterceptorHandler.ɵfac\n });\n }\n return HttpInterceptorHandler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Every request made through JSONP needs a callback name that's unique across the\n// whole page. Each request is assigned an id and the callback name is constructed\n// from that. The next id to be assigned is tracked in a global variable here that\n// is shared among all applications on the page.\nlet nextRequestId = 0;\n/**\n * When a pending