angular-toolbox 1.5.0 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"angular-toolbox.mjs","sources":["../../../projects/angular-toolbox/src/lib/core/error/subscription-error.ts","../../../projects/angular-toolbox/src/lib/core/error/integrity-error.ts","../../../projects/angular-toolbox/src/lib/core/error/app-bridge-error.ts","../../../projects/angular-toolbox/src/lib/core/error/http-mock-service-error.ts","../../../projects/angular-toolbox/src/lib/util/empty-string.const.ts","../../../projects/angular-toolbox/src/lib/util/aria-role.constant.ts","../../../projects/angular-toolbox/src/lib/util/uuid.ts","../../../projects/angular-toolbox/src/lib/util/js-type.ts","../../../projects/angular-toolbox/src/lib/util/version.util.ts","../../../projects/angular-toolbox/src/lib/core/impl/lang/identifiable-component.ts","../../../projects/angular-toolbox/src/lib/core/abstract/abstract-subscription-manager.ts","../../../projects/angular-toolbox/src/lib/core/impl/version/version.impl.ts","../../../projects/angular-toolbox/src/lib/core/abstract/abstract-version-manager.ts","../../../projects/angular-toolbox/src/lib/model/service/version/angular-toolbox-version.service.ts","../../../projects/angular-toolbox/src/lib/angular-toolbox.module.ts","../../../projects/angular-toolbox/src/lib/collection/array-list.event.ts","../../../projects/angular-toolbox/src/lib/collection/array-list-event-type.enum.ts","../../../projects/angular-toolbox/src/lib/collection/array-list.ts","../../../projects/angular-toolbox/src/lib/collection/index.ts","../../../projects/angular-toolbox/src/lib/component/angular-toolbox-logo/angular-toolbox-logo.component.ts","../../../projects/angular-toolbox/src/lib/component/angular-toolbox-logo/angular-toolbox-logo.component.html","../../../projects/angular-toolbox/src/lib/model/business/version/version.ts","../../../projects/angular-toolbox/src/lib/model/business/version/version-config.ts","../../../projects/angular-toolbox/src/lib/model/business/version/version-config.provider.ts","../../../projects/angular-toolbox/src/lib/model/business/version/version-manager.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dark-mode-config.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dark-mode.constant.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dark-mode-config.provider.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/scroll-behavior.type.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/window/window-ref.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/window/window-init.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/window/window-feature-state.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/window/window-target.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-constraints.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-region.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-region.error.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-drag.event.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-drag-event-type.enum.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/dropdown-position.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/dropdown.event.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/dropdown-event-type.enum.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/dropdown-state.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/popover-state.ts","../../../projects/angular-toolbox/src/lib/model/business/lang/instantiable.ts","../../../projects/angular-toolbox/src/lib/model/business/lang/destroyable.ts","../../../projects/angular-toolbox/src/lib/model/business/lang/app-bridge-command.ts","../../../projects/angular-toolbox/src/lib/model/business/lang/identifiable.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-response-mock.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-method-mock.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-config.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-endpoint.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-endpoint-descriptor.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-method-descriptor.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-parameter-descriptor.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-interceptor.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-error.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-request-metadata.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/xhr-proxy.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/fetch-client.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/config/http-mock-production-policy.enum.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/config/http-mocking-framework-config.provider.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/config/http-mocking-framework-config.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/logging/http-mock-logging-prefetch-metadata.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/logging/http-mock-logging-metadata.ts","../../../projects/angular-toolbox/src/lib/model/business/subscription/subscription-manager.ts","../../../projects/angular-toolbox/src/lib/model/business/navigator/connection-type.ts","../../../projects/angular-toolbox/src/lib/model/business/navigator/effective-connection-type.ts","../../../projects/angular-toolbox/src/lib/model/business/navigator/network-information.ts","../../../projects/angular-toolbox/src/lib/model/business/navigator/battery-manager.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/log-connector.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/log.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/transactional-logger.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/log-level.enum.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/logger-config.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/atx-logger-config.provider.ts","../../../projects/angular-toolbox/src/lib/model/service/subscription/subscription.service.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/dark-mode.service.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/scroll.service.ts","../../../projects/angular-toolbox/src/lib/util/default-scroll-behavior.ts","../../../projects/angular-toolbox/src/lib/core/bridge/app-bridge.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/app-bridge.service.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/window/abstract-window.service.ts","../../../projects/angular-toolbox/src/lib/util/window/window-features-builder.ts","../../../projects/angular-toolbox/src/lib/util/window/window-header-tag-util.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/window/window.service.ts","../../../projects/angular-toolbox/src/lib/model/service/version/version.service.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-method-ref.enum.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/constants.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/escape-to-regexp-string.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/get-flags.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/to-key-regexp.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/loose-replacer.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/to-stringify.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/token-data-to-regexp.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/token-data.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/iter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/model/simple-tokens.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/lexer.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/string-to-token-data.ts","../../../projects/angular-toolbox/src/lib/util/http-mocking-framework-config.manager.ts","../../../projects/angular-toolbox/src/lib/model/service/mock/http/http-mock.service.ts","../../../projects/angular-toolbox/src/lib/framework/logging/impl/log-impl.ts","../../../projects/angular-toolbox/src/lib/framework/logging/connector/default-log-connector.ts","../../../projects/angular-toolbox/src/lib/framework/logging/connector/console-log-connector.ts","../../../projects/angular-toolbox/src/lib/framework/logging/connector/html-log-connector.ts","../../../projects/angular-toolbox/src/lib/framework/logging/impl/abstract-logger.ts","../../../projects/angular-toolbox/src/lib/framework/logging/util/log.builder.ts","../../../projects/angular-toolbox/src/lib/framework/logging/util/log.constant.ts","../../../projects/angular-toolbox/src/lib/framework/logging/util/log.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/logging/http-mock-logger.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/http-mock-logging-constant.enum.ts","../../../projects/angular-toolbox/src/lib/model/service/mock/http/logging/http-mock-logging-service.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/console-body-type.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/console-type-class.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/data.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/abstract/log-renderer-base.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/timeline.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.html","../../../projects/angular-toolbox/src/lib/pipe/safe/safe-html.pipe.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/url.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/business/atx-console-action-type.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/request-info-renderer/request-info-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/request-info-renderer/request-info-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/service/atx-user-action.service.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/size.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.state.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/business/atx-is-imported-log.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/spinner/spinner.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/spinner/spinner.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/request-list-renderer/request-list-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/request-list-renderer/request-list-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/log-message.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/request-metadata-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/log-headers-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/form-data-serializer.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/body-serializer.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/body-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/http-request-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/http-response-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/log-metadata-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/config/http-mock-parameters.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/config/http-mock.decorator.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-headers-mock.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-headers.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-mock-max-delay.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-status-text.enum.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-status-text-finder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-mock-response.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/fetch-client-response-type.enum.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/fetch-client.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/event/progress-event-mock.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/event/event-target.impl.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/xhr-base.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/data-storage.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/logging/http-mock-logging-metadata.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-mock-response-delay.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/delegate-xhr.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/xhr-proxy-impl.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/http-mock-factory.impl.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/http-mock-factory.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-param/atx-mock-param.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-param/atx-mock-param.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-description/atx-mock-description.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-description/atx-mock-description.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-full-description/atx-mock-full-description.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-full-description/atx-mock-full-description.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-methods/atx-mock-methods.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-methods/atx-mock-methods.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-documentation/atx-mock-documentation.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-documentation/atx-mock-documentation.component.html","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-backdrop-type.enum.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-backdrop.type.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-outlet-event-type.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-outlet.event.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog.config.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-default-config.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-service.error.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-service.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog.outlet.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/index.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/log-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/hmfl-builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/service/atx-log-io.service.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/connector/http-monitoring-console-log-connector.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.controller.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.html","../../../projects/angular-toolbox/src/lib/model/service/mock/http/logging/atx-http-mock-console.service.ts","../../../projects/angular-toolbox/src/lib/model/service/logging/logger-service.ts","../../../projects/angular-toolbox/src/lib/component/dropdown/dropdown.component.ts","../../../projects/angular-toolbox/src/lib/component/dropdown/dropdown.component.html","../../../projects/angular-toolbox/src/lib/component/layout/border-layout-container/border-layout-container.component.ts","../../../projects/angular-toolbox/src/lib/component/layout/border-layout-container/border-layout-container.component.html","../../../projects/angular-toolbox/src/lib/component/layout/border-layout/util/border-layout-bounds-manager.ts","../../../projects/angular-toolbox/src/lib/component/layout/border-layout/util/border-layout-renderer.ts","../../../projects/angular-toolbox/src/lib/component/layout/border-layout/border-layout.component.ts","../../../projects/angular-toolbox/src/lib/component/layout/border-layout/border-layout.component.html","../../../projects/angular-toolbox/src/lib/component/index.ts","../../../projects/angular-toolbox/src/lib/directive/navigation-directive-base.ts","../../../projects/angular-toolbox/src/lib/directive/button-role.directive.ts","../../../projects/angular-toolbox/src/lib/directive/navigate-to-url.directive.ts","../../../projects/angular-toolbox/src/lib/directive/anchor-link.directive.ts","../../../projects/angular-toolbox/src/lib/directive/content-renderer.directive.ts","../../../projects/angular-toolbox/src/public-api.ts","../../../projects/angular-toolbox/src/angular-toolbox.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"SubscriptionError\";\r\n\r\n/**\r\n * Represents errors thrown by `SubscriptionService` instances.\r\n */\r\nexport class SubscriptionError extends Error {\r\n\r\n /**\r\n * Creates en new `SubscriptionService` instances.\r\n * \r\n * @param message A human-readable description of the error.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"IntegrityError\";\r\n\r\n/**\r\n * Represents a data integrity violation error.\r\n */\r\nexport class IntegrityError extends Error {\r\n\r\n /**\r\n * Creates en new `IntegrityError` instances.\r\n * \r\n * @param message A human-readable description of the error.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"AppBridgeError\";\r\n\r\n/**\r\n * Represents exceptions thrown by the `AppBridge` class.\r\n */\r\nexport class AppBridgeError extends ReferenceError {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"HttpMockServiceError\";\r\n\r\n/**\r\n * Represents errors thrown by `HttpMockService` instances.\r\n */\r\nexport class HttpMockServiceError extends Error {\r\n\r\n /**\r\n * Creates en new `HttpMockService` instances.\r\n * \r\n * @param message A human-readable description of the error.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A reference to an immutable empty string.\r\n */\r\nexport const EMPTY_STRING: string = \"\";","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A reference to the `\"button\"` value of the `role` property.\r\n */\r\nexport const BUTTON_ROLE: string = 'button';\r\n\r\n/**\r\n * A reference to the `\"link\"` value of the `role` property.\r\n */\r\nexport const LINK_ROLE: string = 'link';\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EMPTY_STRING } from \"./empty-string.const\";\r\nimport { IntegrityError } from \"../core/error\";\r\nimport { Destroyable } from \"../model\";\r\n\r\n/**\r\n * @private\r\n * The regexp used to validate UUID strings.\r\n */\r\nconst VALIDATOR: RegExp = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\r\n\r\n/**\r\n * A class that represents an immutable universally unique identifier (UUID).\r\n * This class is not available in workers. \r\n */\r\nexport class Uuid implements Destroyable {\r\n\r\n /**\r\n * @private\r\n * Stores a reference to the UUID associated with this `Uuid` instance.\r\n */\r\n private readonly _uuid: string;\r\n\r\n /**\r\n * @private\r\n * Stores a boolean value used to lock constructor access.\r\n */\r\n private static _lockConstructor: boolean = true;\r\n\r\n /**\r\n * @private\r\n * Stores a reference to all UUIDs already created.\r\n */\r\n private static _hash: string = EMPTY_STRING;\r\n\r\n /**\r\n * @private\r\n * Created a new `Uuid` instance.\r\n *\r\n * @param uuid A string used that represents the UUID associated with this `Uuid` instance.\r\n * If `null` creates a random UUID value. \r\n * @param tracked If `true`, stores the UUID reference in the system.\r\n */\r\n private constructor(uuid: string | null, tracked: boolean) {\r\n if (Uuid._lockConstructor) throw new ReferenceError(\"Uuid class has private constructor.\");\r\n const UUID: string = uuid || crypto.randomUUID();\r\n this._uuid = UUID;\r\n if (tracked) Uuid._hash += `${UUID}|`;\r\n Uuid._lockConstructor = true;\r\n }\r\n\r\n /**\r\n * Returns a string that represents the UUID value associated with this `Uuid` instance.\r\n * \r\n * @returns The UUID string value associated with this `Uuid` instance.\r\n */\r\n public toString(): string {\r\n return this._uuid;\r\n }\r\n \r\n /**\r\n * Compares the given `Uuid` instance with this `Uuid`.\r\n * \r\n * @param uuid The `Uuid` instance to compare with this `Uuid`.\r\n * \r\n * @returns `true` whether both `Uuid` instances are equal; `false` otherwise.\r\n */\r\n public equals(uuid: Uuid): boolean {\r\n return this._uuid === uuid.toString();\r\n }\r\n\r\n /**\r\n * Creates and returns a new `Uuid` instance.\r\n * \r\n * @param track If `true`, stores the UUID reference in the system.\r\n * \r\n * @returns A new `Uuid` instance.\r\n */\r\n public static build(track: boolean = false): Uuid {\r\n Uuid._lockConstructor = false;\r\n return new Uuid(null, track);\r\n }\r\n \r\n /**\r\n * Creates and returns a new `Uuid` instance built from the specified `uuid` parameter.\r\n * \r\n * @param uuid The UUID string value used to create the new `Uuid` instance.\r\n * @param track If `true`, performs a validation process to ensure that the UUID string does not exists in the system.\r\n * \r\n * @returns A new `Uuid` instance built from the specified `uuid` parameter.\r\n */\r\n public static fromString(uuid: string, track: boolean = false): Uuid {\r\n if(track) {\r\n if(!this.isTracked(uuid)) throw new IntegrityError(\"Data Integrity Violation. UUID already exists: \" + uuid);\r\n }\r\n if (!Uuid.validate(uuid)) throw new TypeError(\"Invalid UUID value: \" + uuid);\r\n Uuid._lockConstructor = false;\r\n return new Uuid(uuid, track);\r\n }\r\n\r\n /**\r\n * Performs validation on the specified `uuid` string parameter.\r\n * \r\n * @param uuid A UUID representation string to validate.\r\n * @returns `true` whether the `uuid` string parameter is valid; `false` otherwise.\r\n */\r\n public static validate(uuid: string): boolean {\r\n return VALIDATOR.test(uuid);\r\n }\r\n\r\n /**\r\n * Performs a test to ensure that the UUID string is not tracked the system.\r\n * \r\n * @param uuid A UUID representation string to test.\r\n * @returns `true` whether the `uuid` string parameter is tracked; `false` otherwise.\r\n */\r\n public static isTracked(uuid: string): boolean {\r\n return !Uuid._hash.includes(uuid);\r\n }\r\n \r\n /**\r\n * Releases the `Uuid` instance from the tracking system and makes it elligible for garbage collection.\r\n * \r\n * @returns `true` whether the `Uuid` instance was found and removed; `false` otherwise. \r\n */\r\n public destroy(): boolean {\r\n const ref: string =this._uuid;\r\n if (!Uuid.isTracked(ref)) {\r\n Uuid._hash = Uuid._hash.replace(ref, EMPTY_STRING);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A reference to the `\"undefined\"` type.\r\n */\r\nexport const UNDEFINED: string = \"undefined\";\r\n\r\n/**\r\n * A reference to the `\"object\"` type.\r\n */\r\nexport const OBJECT: string = \"object\";\r\n\r\n/**\r\n * A reference to the `\"boolean\"` type.\r\n */\r\nexport const BOOLEAN: string = \"boolean\";\r\n\r\n/**\r\n * A reference to the `\"number\"` type.\r\n */\r\nexport const NUMBER: string = \"number\";\r\n\r\n/**\r\n * A reference to the `\"bigint\"` type.\r\n */\r\nexport const BIGINT: string = \"bigint\";\r\n\r\n/**\r\n * A reference to the `\"function\"` type.\r\n */\r\nexport const FUNCTION: string = \"function\";\r\n\r\n/**\r\n * A reference to the `\"string\"` type.\r\n */\r\nexport const STRING: string = \"string\";\r\n\r\n/**\r\n * A reference to the `\"symbol\"` type.\r\n */\r\nexport const SYMBOL: string = \"symbol\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Version } from \"../model\";\r\nimport { EMPTY_STRING } from \"./empty-string.const\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst DASH: string = \"-\";\r\n\r\n/**\r\n * A convenient utility class for working with `Version` objects.\r\n */\r\nexport class VersionUtil {\r\n\r\n /**\r\n * Returns a string that represents the specified `Version` object.\r\n * \r\n * @param version The `Version` object for which to get a string representation.\r\n * \r\n * @returns A string that represents the specified `Version` object.\r\n */\r\n public static stringify(version: Version): string {\r\n const m: string | undefined = version.metadata;\r\n return `${version.major}.${version.minor}.${version.patch}${m ? DASH + m : EMPTY_STRING}`;\r\n }\r\n \r\n /**\r\n * Compares the given `Version` objects.\r\n * \r\n * @param v1 The first object to compare.\r\n * @param v2 The second object to compare.\r\n * \r\n * @returns `true` whether both `Version` objects are equal; `false` otherwise.\r\n */\r\n public static equal(v1: Version, v2: Version): boolean {\r\n return v1.major === v2.major &&\r\n v1.minor === v2.minor &&\r\n v1.patch === v2.patch &&\r\n v1.buildTimeStamp === v2.buildTimeStamp &&\r\n v1.metadata === v2.metadata;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Identifiable } from \"../../../model\";\r\nimport { Uuid } from \"../../../util\";\r\n\r\n/**\r\n * @private\r\n * The base class that must be extended by objects to be indentified by the \r\n * Angular Toolbox Subscription Service.\r\n */\r\nexport class IdentifiableComponent implements Identifiable {\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _classRef: string;\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _uuid: Uuid = Uuid.build();\r\n\r\n /**\r\n * A string that represent the class reference for this object.\r\n * This can be useful to workaround TypeScript compilation obfuscation.\r\n * \r\n * @param classRef The class reference for this object.\r\n */\r\n constructor(classRef: string | undefined = undefined) {\r\n this._classRef = classRef || this.constructor.name;\r\n }\r\n\r\n /**\r\n * Returns the unique identifier for this object.\r\n * \r\n * @returns An instance of the `Uuid` class.\r\n */\r\n public getID(): Uuid {\r\n return this._uuid;\r\n }\r\n \r\n /**\r\n * Returns the class name reference of this object. Can be either the `classRef`\r\n * paramter of the contructor method, or the constructor `name` property value.\r\n * \r\n * @returns the class name reference of this object.\r\n */\r\n public getClassRef(): string {\r\n return this._classRef;\r\n }\r\n};","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in \n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Subscription } from 'rxjs';\nimport { Identifiable, SubscriptionManager } from '../../model';\nimport { SubscriptionError } from '../error';\nimport { IdentifiableComponent } from '../impl';\nimport { STRING } from '../../util';\n\n/**\n * The abstract class for all services that implement the `SubscriptionManager` interface.\n */\nexport abstract class AbstractSubscriptionManager implements SubscriptionManager {\n\n /**\n * @private\n * Stores an internal reference to the last reference used with the `register()`\n * method.\n */\n private _lastRef: string | null = null;\n\n /**\n * @private\n * The internal `Subscription` instances storage.\n */\n private _subMap: Map<string, Array<Subscription>> = new Map<string, Array<Subscription>>();\n\n /**\n * Stores a new `Subscription` instance associated with the specified reference.\n * \n * @param ref The reference for which to store a new `Subscription` instance.\n * Can be either a string or an `Identifiable` object.\n * @param subscription The `Subscription` instance to register.\n * \n * @returns A reference to this `SubscriptionService` instance.\n */\n public register(ref: string | Identifiable, subscription: Subscription): SubscriptionManager {\n const REF: string = this.getRef(ref);\n this._lastRef = REF;\n if (!this._subMap.has(REF)) this._subMap.set(REF, []);\n this._subMap.get(REF)?.push(subscription);\n return this;\n }\n\n /**\n * Stores a new `Subscription` instance associated with the reference specified\n * by the last `register()` method invokation.\n * \n * @param subscription The `Subscription` instance to register.\n * \n * @returns A reference to this `SubscriptionService` instance.\n */\n public append(subscription: Subscription): SubscriptionManager {\n if (!this._lastRef) throw new SubscriptionError(\"Illegal Access Error: you must call the register() method before invoking the append() method.\");\n return this.register(this._lastRef, subscription);\n }\n \n /**\n * Unsubscribes and removes all `Subscription` instances associated with the specified reference.\n * \n * @param ref The reference for which to remove all `Subscription` instances.\n * Can be either a string or an `Identifiable` object.\n * \n * @returns `true` whether the specified reference exists; `false` otherwise.\n */\n public clearAll(ref: string | Identifiable): boolean {\n const REF: string = this.getRef(ref);\n let result: boolean = false;\n if (this._lastRef === REF) this._lastRef = null;\n if (this._subMap.has(REF)) {\n this._subMap.get(REF)?.forEach(subscription => {\n if (!subscription.closed) subscription.unsubscribe();\n });\n this._subMap.delete(REF);\n result = true;\n }\n return result;\n }\n\n /**\n * Returns all `Subscription` instances associated with the specified reference.\n * \n * @param ref The reference for which to remove get `Subscription` instances.\n * Can be either a string or an `Identifiable` object.\n * \n * @returns All `Subscription` instances associated with the specified reference, or \n * `null` whether the specified reference does not exists.\n */\n public get(ref: string | Identifiable): Array<Subscription> | null {\n return this._subMap.get(this.getRef(ref)) || null;\n }\n\n /**\n * @private \n * Returns the string reference for the regsitration process. \n * \n * @param ref The reference to be used the regsitration process. \n * Can be either a string or an `Identifiable` object.\n * \n * @returns the string reference for the regsitration process. \n */\n private getRef(ref: string | Identifiable): string {\n let targetRef: string;\n if (typeof ref === STRING) targetRef = ref as string;\n else if (ref instanceof IdentifiableComponent) targetRef = ref.getID().toString();\n else throw new TypeError(\"ref must be of type of string or Identifiable\");\n return targetRef;\n }\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Version } from \"../../../model\";\r\nimport { VersionUtil } from \"../../../util\";\r\n\r\n/**\r\n * @private\r\n * Specifies the semantic versioning of an API.\r\n */\r\nexport class VersionImpl implements Version {\r\n\r\n /**\r\n * Specifies versions with incompatible API changes.\r\n */\r\n public readonly major: number;\r\n\r\n /**\r\n * Specifies versions with functionalities that have backward compatibility.\r\n */\r\n public readonly minor: number;\r\n\r\n /**\r\n * Specifies versions that fixes bugs.\r\n */\r\n public readonly patch: number;\r\n \r\n /**\r\n * Specifies the timestamp that corresponds to the build date for this `Version` instance.\r\n */\r\n public readonly buildTimeStamp: number;\r\n \r\n /**\r\n * An optional string that indicates additional labels for pre-release and build metadata.\r\n */\r\n public readonly metadata: string | undefined;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(major: number, minor: number, patch: number, buildTimeStamp: number, metadata?: string) {\r\n this.major = major;\r\n this.minor = minor;\r\n this.patch = patch;\r\n this.buildTimeStamp = buildTimeStamp;\r\n this.metadata = metadata;\r\n }\r\n\r\n /**\r\n * Returns a string representation of this `Version` object in the form `M.m.p`, where\r\n * `M` represents the major number, `m` represents the minor number and `p` represents\r\n * the patch number of this `VersionImpl` instance.\r\n * \r\n * @returns A string representation of this `VersionImpl` instance.\r\n */\r\n public toString(): string {\r\n return VersionUtil.stringify(this);\r\n }\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Version, VersionConfig, VersionManager } from \"../../model\";\r\nimport { VersionImpl } from \"../impl/version/version.impl\";\r\n\r\n/**\r\n * The abstract class for all services that implement the `VersionManager` interface.\r\n */\r\nexport abstract class AbstractVersionManager implements VersionManager {\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _version: Version;\r\n\r\n /**\r\n * Creates a new VersionManager object.\r\n * @param config the reference to the VersionConfig provider.\r\n */\r\n constructor(config: VersionConfig) {\r\n this._version = new VersionImpl(\r\n config.major,\r\n config.minor,\r\n config.patch,\r\n config.buildTimestamp,\r\n config.metadata\r\n );\r\n }\r\n\r\n /**\r\n * Returns the version of the associated Angular project.\r\n * \r\n * @return the version of the associated Angular project.\r\n */\r\n public getVersion(): Version {\r\n return this._version;\r\n }\r\n \r\n /**\r\n * Returns the build timestamp of the associated Angular project.\r\n * \r\n * @return the build timestamp of the associated Angular project.\r\n */\r\n public getBuildTimestamp(): number {\r\n return this._version.buildTimeStamp;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { AbstractVersionManager } from '../../../core';\r\nimport { VersionConfig } from '../../business';\r\n\r\n/**\r\n * @private\r\n * The current version of the Angular Toolbox library.\r\n */\r\nconst ATX_VERSION_CONFIG: VersionConfig = {\r\n major: 1,\r\n minor: 5,\r\n patch: 0,\r\n buildTimestamp: 1733650177925\r\n};\r\n\r\n/**\r\n * The public service that exposes the current version of the Angular Toolbox library.\r\n */\r\n@Injectable()\r\nexport class AngularToolboxVersionService extends AbstractVersionManager {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor() {\r\n super(ATX_VERSION_CONFIG);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { AngularToolboxVersionService } from './model/service/version/angular-toolbox-version.service';\r\n\r\n/**\r\n * @private\r\n */\r\n@NgModule({\r\n providers: [ AngularToolboxVersionService ]\r\n})\r\nexport class AngularToolboxModule { }","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ArrayList } from \"./array-list\";\r\nimport { ArrayListEventType } from \"./array-list-event-type.enum\";\r\n\r\n/**\r\n * The `ArrayListEvent` class represents an event that is dispatched when the associated collection changes.\r\n */\r\nexport class ArrayListEvent<T> {\r\n\r\n /**\r\n * The type of this event.\r\n */\r\n public readonly type: ArrayListEventType;\r\n \r\n /**\r\n * The reference to the `ArrayList` instance that dispatches this event.\r\n */\r\n public readonly list: ArrayList<T>;\r\n \r\n /**\r\n * Represents events dispatched by the `ArrayList` class.\r\n * \r\n * @param type The type of the event.\r\n * @param list The reference to the `ArrayList` instance that dispatches this event.\r\n */\r\n constructor(type: ArrayListEventType, list: ArrayList<T>) {\r\n this.type = type;\r\n this.list = list;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `ArrayListEventType` class the type of events on an `ArrayListEvent` object.\r\n */\r\nexport enum ArrayListEventType {\r\n\r\n /**\r\n * The type of event associated with the `ArrayList.addAll` action. \r\n */\r\n ADD_ALL = \"addAll\",\r\n\r\n /**\r\n * The type of event associated with the `ArrayList.addItem`, or `ArrayList.addItemAt` actions. \r\n */\r\n ADD = \"add\",\r\n\r\n /**\r\n * The type of event associated with the `ArrayList.removeAll` action. \r\n */\r\n REMOVE_ALL = \"removeAll\",\r\n\r\n /**\r\n * The type of event associated with the `ArrayList.remove`, or `ArrayList.removeAt` actions. \r\n */\r\n REMOVE = \"remove\"\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter } from \"@angular/core\";\r\nimport { IdentifiableComponent } from \"../core\";\r\nimport { ArrayListEvent } from \"./array-list.event\";\r\nimport { ArrayListEventType } from \"./array-list-event-type.enum\";\r\n\r\n/**\r\n * The `ArrayList` class uses a backing `Array` as the source of the data collection. Items in the backing\r\n * `Array` can be accessed and manipulated using the methods and properties of the `ArrayList` instance.\r\n * Operations on an `ArrayList` instance modify the data source.\r\n * \r\n * You typically use the `ArrayList` class as base class for services that persist data in the User Interface.\r\n */\r\nexport class ArrayList<T> extends IdentifiableComponent {\r\n\r\n /**\r\n * Dispatches events each time this `ArrayList` is modified.\r\n */\r\n public readonly change: EventEmitter<ArrayListEvent<T>> = new EventEmitter<ArrayListEvent<T>>();\r\n\r\n /**\r\n * Gets the number of items in the list.\r\n */\r\n public get length(): number {\r\n return this.__list__.length;\r\n }\r\n\r\n /**\r\n * @private\r\n * The array used as a source for the `ArrayList`.\r\n */\r\n protected __list__: Array<T> = [];\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(classRef: string | undefined = undefined) {\r\n super(classRef || \"ArrayList\");\r\n }\r\n \r\n /**\r\n * Adds a list of items to the current `ArrayList` instance, placing them at the end of the\r\n * list in the order they are passed.\r\n * \r\n * @param addList The list of items to add to this current `ArrayList` instance.\r\n * \r\n * @return A reference to this `ArrayList` instance.\r\n */\r\n public addAll(addList: Array<T>): ArrayList<T> {\r\n this.__list__.push(...addList);\r\n this.dispatchEvent(ArrayListEventType.ADD_ALL);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds the specified item to the end of the list.\r\n * \r\n * @param item The item to add.\r\n * \r\n * @return A reference to this `ArrayList` instance.\r\n */\r\n public addItem(item: T): ArrayList<T> {\r\n this.__list__.push(item);\r\n this.dispatchEvent(ArrayListEventType.ADD);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds the item at the specified index.\r\n *\r\n * @param item The item to place at the index.\r\n * @param index The index at which to place the item.\r\n * \r\n * @return A reference to this `ArrayList` instance.\r\n */\r\n public addItemAt(item: T, index: number): ArrayList<T> {\r\n if (index < 0) throw new RangeError (\"index must be greater that 0\");\r\n const len: number = this.__list__.length;\r\n if (index > len) throw new RangeError (`index exceeds the number of list elements. Index must not exceed ${len}.`);\r\n this.__list__.splice(index, 0, item);\r\n this.dispatchEvent(ArrayListEventType.ADD);\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the item at the specified index.\r\n *\r\n * @param index The index in the list from which to retrieve the item.\r\n * \r\n * @returns The item at that index, `undefined` if there is none.\r\n */\r\n public getItemAt(index: number): T | undefined {\r\n return this.__list__[index];\r\n }\r\n\r\n /**\r\n * Returns the index of the item if it is in the list.\r\n * \r\n * @param item The item to find.\r\n * \r\n * @returns The index of the item, `-1` if the item is not in the list.\r\n */\r\n public getItemIndex(item: T): number {\r\n return this.__list__.findIndex(elm => elm === item);\r\n }\r\n\r\n /**\r\n * Removes all items from the list.\r\n * \r\n * @return A reference to this `ArrayList` instance.\r\n */\r\n public removeAll(): ArrayList<T> {\r\n this.__list__.length = 0;\r\n this.dispatchEvent(ArrayListEventType.REMOVE_ALL);\r\n return this;\r\n }\r\n\r\n /**\r\n * Removes the specified item from this list.\r\n * \r\n * @param item Reference to the item that should be removed.\r\n *\r\n * @returns `true` whether if the item was removed; `false` otherwise.\r\n */\r\n public removeItem(item: T): boolean {\r\n const idx: number = this.getItemIndex(item);\r\n if (idx === -1) return false;\r\n this.__list__.splice(idx, 1);\r\n this.dispatchEvent(ArrayListEventType.REMOVE);\r\n return true;\r\n }\r\n\r\n /**\r\n * Removes the item at the specified index and returns it.\r\n * Any items that were after this index are now one index earlier.\r\n * \r\n * @param index The index from which to remove the item.\r\n\r\n * @returns The item that was removed.\r\n */\r\n public removeItemAt(index: number): T | undefined {\r\n const result: T = this.__list__.splice(index, 1)[0];\r\n this.dispatchEvent(ArrayListEventType.REMOVE);\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns an array that is populated in the same order as this `ArrayList` instance.\r\n * \r\n * @returns An array that is populated in the same order as this `ArrayList` instance.\r\n */\r\n public toArray(): Array<T> {\r\n return this.__list__.slice(0);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private dispatchEvent(type: ArrayListEventType): void {\r\n const event: ArrayListEvent<T> = new ArrayListEvent<T>(type, this);\r\n this.change.emit(event);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nexport * from './array-list';\r\nexport * from './array-list.event';\r\nexport * from './array-list-event-type.enum';","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'atx-logo',\r\n standalone: true,\r\n templateUrl: './angular-toolbox-logo.component.html'\r\n})\r\nexport class AngularToolboxLogoComponent { }\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\r\n\t viewBox=\"0 0 185.6 200\" style=\"enable-background:new 0 0 185.6 200;\" xml:space=\"preserve\">\r\n\t<style type=\"text/css\">.st3{opacity:0.75;fill:#FFFFFF;}</style>\r\n\t<g>\r\n\t\t<polygon fill=\"#03A9F4\" points=\"92.4,1.9 92.4,1.9 92.4,1.9 1.8,34.6 15.5,155 92.4,198.1 92.4,198.1 92.4,198.1 169.8,155 183.8,34.6\"/>\r\n\t\t<polygon fill=\"#039BE5\" points=\"92.4,1.9 92.4,23.7 92.4,23.7 92.4,122.8 92.4,122.8 92.4,198.1 92.4,198.1 169.8,155 183.8,34.6\"/>\r\n\t</g>\r\n\t<g>\r\n\t\t<path fill=\"#FFFFFF\" d=\"M60.3,75.1l17.9,17.9c3.1-2.9,5.7-5.5,7.7-7.4L67.9,67.5l-2.2-9.8l-16.1-9.8l-4.4,4.4l-4.4,4.4l9.8,16.1 L60.3,75.1z\"/>\r\n\t\t<path class=\"st3\" d=\"M114.7,104.3l26.5,26.4c4.9,4.9,4.9,12.8,0,17.7c-4.9,4.9-12.8,4.9-17.7,0L97.1,122L114.7,104.3z\"/>\r\n\t\t<path fill=\"#FFFFFF\" d=\"M92.4,114.6V89l-49.2,47.2c-0.1,0.1-0.2,0.2-0.3,0.3c-4.3,4.3-4.2,11.1-0.1,15.3c4.1,4.1,11.1,4.2,15.4,0 c0.2-0.2,0.4-0.4,0.6-0.6\"/>\r\n\t\t<path class=\"st3\" d=\"M144.3,61.6l-1.8-1.5c-0.3-0.3-0.7-0.4-1.2-0.4c-0.4,0-0.8,0.3-1.1,0.6L129.7,74c-0.3,0.4-0.8,0.6-1.3,0.6 l-3.8,0.3c-0.3,0-0.6-0.1-0.9-0.3l-7.4-6.3c-0.3-0.2-0.5-0.6-0.5-1l-0.5-3.5c-0.1-0.4,0-0.8,0.3-1.1l9.9-13.4 c0.4-0.6,0.4-1.5-0.2-2l-2.4-1.9c-0.5-0.4-1-0.4-1.7-0.2c-6.8,1.3-18.5,8-21.4,17.1c-2.6,8-1.7,13.7-1.7,13.7 c0,4.5-1.5,8.9-3.3,10.7L92.4,89v25.7l15.9-17.2c6.1-5.4,18.2,0.4,28.2-8.7c9.1-8.3,10.6-17.7,8.6-25.6 C145,62.5,144.9,62,144.3,61.6z\"/>\r\n\t</g>\r\n</svg>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Specifies the semantic versioning of an Angular application.\r\n */\r\nexport interface Version {\r\n\r\n /**\r\n * Specifies versions with incompatible API changes.\r\n */\r\n major: number;\r\n \r\n /**\r\n * Specifies versions with functionalities that have backward compatibility.\r\n */\r\n minor: number;\r\n\r\n /**\r\n * Specifies versions that fixes bugs.\r\n */\r\n patch: number;\r\n \r\n /**\r\n * Specifies the timestamp that corresponds to the build date for this `Version` object.\r\n */\r\n buildTimeStamp: number;\r\n\r\n /**\r\n * An optional string that indicates additional labels for pre-release and build metadata.\r\n */\r\n metadata?: string;\r\n\r\n /**\r\n * Returns a string representation of this `Version` object.\r\n * \r\n * @returns A string representation of this `Version` object.\r\n */\r\n toString(): string;\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `VersionConfig` interface provides the basic API that defines a version config token.\r\n */\r\nexport interface VersionConfig {\r\n\r\n /**\r\n * Specifies the major number for this config.\r\n */\r\n major: number;\r\n \r\n /**\r\n * Specifies the minor number for this config.\r\n */\r\n minor: number;\r\n\r\n /**\r\n * Specifies the patch number for this config.\r\n */\r\n patch: number;\r\n\r\n /**\r\n * Specifies the timestamp that corresponds to the build date for this config.\r\n */\r\n buildTimestamp: number;\r\n\r\n /**\r\n * An optional string that indicates additional labels for pre-release and build metadata.\r\n */\r\n metadata?: string;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { VersionConfig } from \"./version-config\";\r\n\r\n/**\r\n * The default provider for the `VersionService` configuration. You typically define\r\n * the custom properties in the main `NgModule` declaration to initialize the application\r\n * config:\r\n * \r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: VERSION_CONFIG, useValue: { major: 1, minor: 2, patch: 12 } }\r\n * ],\r\n * ...\r\n * });\r\n */\r\nexport const VERSION_CONFIG: VersionConfig = {\r\n \r\n /**\r\n * Specifies the major number of this config.\r\n */\r\n major: 0,\r\n\r\n /**\r\n * Specifies the minor number of this config.\r\n */\r\n minor: 0,\r\n\r\n /**\r\n * Specifies the patch number of this config.\r\n */\r\n patch: 0,\r\n\r\n /**\r\n * Specifies the timestamp that corresponds to the build date for this `Version` object.\r\n * Default value is `NaN`.\r\n */\r\n buildTimestamp: NaN\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Version } from \"./version\";\r\n\r\n/**\r\n * The interface implemented by services that specifie the semantic versioning of an Angular application.\r\n */\r\nexport interface VersionManager {\r\n\r\n /**\r\n * Returns the version of the associated Angular project.\r\n * \r\n * @return the version of the associated Angular project.\r\n */\r\n getVersion(): Version;\r\n \r\n /**\r\n * Returns the build timestamp of the associated Angular project.\r\n * \r\n * @return the build timestamp of the associated Angular project.\r\n */\r\n getBuildTimestamp(): number;\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines properties for the `DarkModeService` configuration.\r\n */\r\nexport interface DarkModeConfig {\r\n\r\n /**\r\n * Indicates whether the dark mode is activated by default (`true`), or not (`false`).\r\n */\r\n darkModeEnabled?: boolean;\r\n \r\n /**\r\n * Indicates whether the dark mode uses browser settings (`true`), or not (`false`).\r\n * When `true`, this property overrides the `darkModeEnabled` property.\r\n */\r\n detectBrowserSettings?: boolean;\r\n\r\n /**\r\n * CSS property name used to set the dark mode look and feel.\r\n */\r\n cssProperty?: string;\r\n\r\n /**\r\n * Reference to the key value used to persist the dark mode state to local storage.\r\n */\r\n storageKey?: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Reference to the dark mode default storage key.\r\n */\r\nexport const STORAGE_KEY: string = \"dark-mode-key\";\r\n\r\n/**\r\n * Reference to the dark mode default css property.\r\n */\r\nexport const CSS_PROP: string = \"dark-mode\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DarkModeConfig } from \"./dark-mode-config\";\r\nimport { CSS_PROP, STORAGE_KEY } from \"./dark-mode.constant\";\r\n\r\n/**\r\n * The default provider for the `DarkModeService` configuration. You typically define\r\n * the custom properties in the main NgModule declaration to initialize the app dark mode:\r\n * \r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: DARK_MODE_CONFIG, useValue: { enableDarkMode: true } }\r\n * ],\r\n * ...\r\n * });\r\n */\r\nexport const DARK_MODE_CONFIG: DarkModeConfig = {\r\n \r\n /**\r\n * Indicates whether the dark mode uses browser settings (`true`), or not (`false`).\r\n * Default value is `false`.\r\n */\r\n darkModeEnabled: false,\r\n \r\n /**\r\n * Indicates whether the dark mode uses browser settings (`true`), or not (`false`).\r\n * Default value is `false`.\r\n */\r\n detectBrowserSettings: false,\r\n \r\n /**\r\n * CSS property name used to set the dark mode look and feel.\r\n * Default value is `'dark-mode'`.\r\n */\r\n cssProperty: CSS_PROP,\r\n \r\n /**\r\n * Reference to the key value used to persist the dark mode state to local storage.\r\n * Default value is `'dark-mode-key'`.\r\n */\r\n storageKey: STORAGE_KEY\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Workaround for the typescript `ScrollBehavior` declaration.\r\n */\r\nexport type ScrollBehavior = \"auto\" | \"instant\" | \"smooth\";","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ComponentRef } from \"@angular/core\";\r\n\r\n/**\r\n * Defines the type of objects managed by the `AbstractWindowService` class.\r\n */\r\nexport interface WindowRef<T, U> {\r\n \r\n /**\r\n * The reference to a window stored within the `AbstractWindowService` class.\r\n */\r\n window: U;\r\n\r\n /**\r\n * The reference to the Angular component displayed within a window.\r\n */\r\n componentRef: ComponentRef<T>;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { WindowFeatureState } from \"./window-feature-state\";\r\nimport { WindowTarget } from \"./window-target\";\r\n\r\n/**\r\n * Defines the APi used to initialize the windows created by the `WindowService.open()` method.\r\n */\r\nexport interface WindowInit {\r\n\r\n /**\r\n * The name of the browsing context the resource is being loaded into.\r\n */\r\n target?: WindowTarget;\r\n\r\n /**\r\n * The title of the new window.\r\n */\r\n title?: string;\r\n\r\n /**\r\n * The icon of the new window.\r\n */\r\n icon?: string;\r\n\r\n /**\r\n * Specifies the distance in pixels from the left side of the work area as defined by the user's operating system where the new window will be generated.\r\n */\r\n left?: number;\r\n\r\n /**\r\n * Specifies the distance in pixels from the top side of the work area as defined by the user's operating system where the new window will be generated.\r\n */\r\n top?: number;\r\n\r\n /**\r\n * Specifies the width of the content area, including scrollbars. The minimum required value is `100`.\r\n */\r\n width?: number;\r\n\r\n /**\r\n * Specifies the height of the content area, including scrollbars. The minimum required value is `100`.\r\n */\r\n height?: number;\r\n \r\n /**\r\n * Specifies whether the directories are activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n directories?: WindowFeatureState;\r\n \r\n /**\r\n * Specifies whether the title bar is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n titlebar?: WindowFeatureState;\r\n \r\n /**\r\n * Specifies whether the scrollbars are activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n scrollbars?: WindowFeatureState;\r\n\r\n /**\r\n * Specifies whether the toolbar is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n toolbar?: WindowFeatureState;\r\n\r\n /**\r\n * Specifies whether the location is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n location?: WindowFeatureState;\r\n\r\n /**\r\n * Specifies whether the status is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n status?: WindowFeatureState;\r\n\r\n /**\r\n * Specifies whether the menu bar is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n menubar?: WindowFeatureState;\r\n\r\n /**\r\n * Indicates whether the winbdow is centered (`true`), or not (`false`).\r\n * If `true`, the `top` and `left` properties are ignored.\r\n */\r\n center?: boolean;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Specifies values used to activate, or deactivate, a feature for a browser window created by the `WindowService.open()` method.\r\n */\r\nexport enum WindowFeatureState {\r\n\r\n /**\r\n * The value used to activate a feature.\r\n */\r\n YES = \"yes\",\r\n\r\n /**\r\n * The value used to deactivate a feature.\r\n */\r\n NO = \"no\"\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Specifies the name of the browsing context the resource is being loaded into.\r\n */\r\nexport enum WindowTarget {\r\n\r\n /**\r\n * The current browsing context.\r\n */\r\n SELF = \"self\",\r\n\r\n /**\r\n * Usually a new tab, but users can configure browsers to open a new window instead.\r\n */\r\n BLANK = \"_blank\",\r\n\r\n /**\r\n * The parent browsing context of the current one. If no parent, behaves as `WindowTarget.SELF`.\r\n */\r\n PARENT = \"_parent\",\r\n\r\n /**\r\n * The topmost browsing context.\r\n */\r\n TOP = \"_top\",\r\n\r\n /**\r\n * Allows embedded fenced frames to navigate the top-level frame.\r\n */\r\n UNFENCED_TOP = \"_unfencedTop\"\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { LayoutRegion, LayoutRegionType } from \"./layout-region\";\r\n\r\n/**\r\n * Defines the layout constraints of a `BorderLayoutContainer` object.\r\n */\r\nexport interface LayoutConstraints {\r\n\r\n /**\r\n * Specifies the region of the `BorderLayoutContainer` object.\r\n */\r\n region: LayoutRegion | LayoutRegionType;\r\n\r\n /**\r\n * Indicates whether the `BorderLayoutContainer` object is resizable (`true`), or not (`false`).\r\n */\r\n resizable?: boolean;\r\n\r\n /**\r\n * Defines the default size of the `BorderLayoutContainer` object.\r\n */\r\n size?: number;\r\n \r\n /**\r\n * Defines the minimum size of the `BorderLayoutContainer` object.\r\n */\r\n minSize?: number;\r\n\r\n /**\r\n * Defines the maximum size of the `BorderLayoutContainer` object.\r\n */\r\n maxSize?: number;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nexport type LayoutRegionType = \"north\" | \"south\" | \"west\" | \"west\" | \"east\" | \"center\";\r\n\r\n/**\r\n * The list of layout constraints that defines the regions of a `BorderLayout` container.\r\n */\r\nexport enum LayoutRegion {\r\n\r\n /**\r\n * The north layout constraint (top of container).\r\n */\r\n NORTH = \"north\",\r\n\r\n /**\r\n * The south layout constraint (bottom of container).\r\n */\r\n SOUTH = \"south\",\r\n\r\n /**\r\n * The west layout constraint (left side of container).\r\n */\r\n WEST = \"west\",\r\n\r\n /**\r\n * The east layout constraint (right side of container).\r\n */\r\n EAST = \"east\",\r\n\r\n /**\r\n * The center layout constraint (middle of container).\r\n */\r\n CENTER = \"center\"\r\n};\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `LayoutRegionError` class represents an error thrown by layout components when manipulating\r\n * invalid regions of the container.\r\n */\r\nexport class LayoutRegionError extends Error {\r\n\r\n /**\r\n * Creates a new `LayoutRegionError` instance.\r\n * \r\n * @param message A human-readable description of the error.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { BorderLayoutContainer, BorderLayout } from \"../../../../component\";\r\nimport { LayoutDragEventType } from \"../../../../model\";\r\n\r\n/**\r\n * The `LayoutDragEvent` class is an event that represents a drag interaction with a `BorderLayoutContainer`.\r\n */\r\nexport class LayoutDragEvent {\r\n\r\n /**\r\n * The reference to the container that triggered this event.\r\n */\r\n public readonly target: BorderLayoutContainer;\r\n\r\n /**\r\n * The reference to the layout that contains the target container.\r\n */\r\n public layout!: BorderLayout;\r\n\r\n /**\r\n * The type of this event; a `LayoutDragEventType` constant.\r\n */\r\n public readonly type: LayoutDragEventType;\r\n\r\n /**\r\n * Creates a new `LayoutDragEvent` instance.\r\n * \r\n * @param target The container that triggered this event.\r\n * @param type The type of this event.\r\n */\r\n constructor(target: BorderLayoutContainer, type: LayoutDragEventType) {\r\n this.target = target;\r\n this.type = type;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the type of a `LayoutDragEvent` instance.\r\n */\r\nexport enum LayoutDragEventType {\r\n\r\n /**\r\n * Indicates that the dragging process is starting.\r\n */\r\n DRAG_START = \"dragstart\",\r\n\r\n /**\r\n * Indicates that the dragging process stopped.\r\n */\r\n DRAG_STOP = \"dragstop\",\r\n\r\n /**\r\n * Indicates that the user is dragging the container handle.\r\n */\r\n DRAGGING = \"dragging\"\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the content vertical position of a dropdown component.\r\n */\r\nexport type DropdownVerticalPosition = \"start\" | \"top\" | \"middle\" | \"bottom\" | \"end\";\r\n\r\n/**\r\n * Defines the content horizontal position of a dropdown component.\r\n */\r\nexport type DropdownHorizontalPosition = \"start\" | \"left\" | \"center\" | \"right\" | \"end\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DropdownComponent } from \"../../../../component\";\r\nimport { DropdownEventType } from \"./dropdown-event-type.enum\";\r\nimport { DropdownState } from \"./dropdown-state\";\r\n\r\n/**\r\n * The `DropdownEvent` class is an event that represents an interaction with a dropdown container.\r\n */\r\nexport class DropdownEvent {\r\n\r\n /**\r\n * The reference to the container that triggered this event.\r\n */\r\n public readonly target: DropdownComponent;\r\n\r\n /**\r\n * The type of this event; a `DropdownEventType` constant.\r\n */\r\n public readonly type: DropdownEventType;\r\n\r\n /**\r\n * The state the dropdown container is transitioning to.\r\n */\r\n public readonly newState: DropdownState;\r\n\r\n /**\r\n * The state the dropdown container is transitioning from.\r\n */\r\n public readonly oldState: DropdownState;\r\n\r\n /**\r\n * Creates a new `DropdownEvent` instance.\r\n * \r\n * @param target The dropdown container that triggered this event.\r\n * @param type The type of this event.\r\n * @param newState The state the dropdown container is transitioning to.\r\n * @param oldState The state the dropdown container is transitioning from.\r\n */\r\n constructor(target: DropdownComponent, type: DropdownEventType, newState: DropdownState, oldState: DropdownState) {\r\n this.target = target;\r\n this.type = type;\r\n this.newState = newState;\r\n this.oldState = oldState;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the type of a `DropdownEvent` instance.\r\n */\r\nexport enum DropdownEventType {\r\n\r\n /**\r\n * Defines an event fired on a dropdown component just after it is shown or hidden.\r\n */\r\n TOGGLE = \"toggle\",\r\n\r\n /**\r\n * Defines an event fired on a dropdown component just before it is shown or hidden.\r\n */\r\n BEFORE_TOGGLE = \"beforetoggle\",\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Represents the state of a dropdown container.\r\n */\r\nexport type DropdownState = \"open\" | \"closed\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the \"popover\" state of the content container whithin dropdown component.\r\n */\r\nexport type PopoverState = \"auto\" | \"manual\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A markup interface that defines instantiable objects.\r\n */\r\nexport type Instantiable = { constructor: { name: string } };\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `Destroyable` interface provides a global interface for creating object that might be destroyed by the system.\r\n */\r\nexport interface Destroyable {\r\n\r\n /**\r\n * Makes an object elligible for garbage collection.\r\n */\r\n destroy(): void | any;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `Destroyable` interface provides a global interface for creating object that might be destroyed by the system.\r\n */\r\nexport type AppBridgeCommand = (...rest: any[])=> void;","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Uuid } from \"../../../util\";\r\n\r\n/**\r\n * `Identifiable` objects are Angular components that can be identified by a unique UUID identifier.\r\n */\r\nexport interface Identifiable {\r\n\r\n /**\r\n * Returns the unique identifier for this object.\r\n * \r\n * @returns An instance of the `Uuid` class.\r\n */\r\n getID(): Uuid;\r\n \r\n /**\r\n * Returns the class name reference of this object.\r\n * This can be useful to workaround TypeScript compilation obfuscation.\r\n * \r\n * @returns the class name reference of this object.\r\n */\r\n getClassRef(): string\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\nimport { HttpMockError } from \"./http-mock-error\";\r\n\r\n/**\r\n * Defines the config of a HTTP response mock object.\r\n */\r\nexport interface HttpResponseMock {\r\n\r\n /**\r\n * The response body. Can be either an object, or an `Observable` instance.\r\n */\r\n body?: any | Observable<any>;\r\n\r\n /**\r\n * All response headers.\r\n */\r\n headers?: HttpHeaders;\r\n\r\n /**\r\n * Response status code.\r\n */\r\n status: number;\r\n\r\n /**\r\n * Textual description of response status code, defaults to `OK`.\r\n */\r\n statusText: string;\r\n\r\n /**\r\n * URL of the resource retrieved, or `null` if not available.\r\n */\r\n url: string | null;\r\n\r\n /**\r\n * The optional error for this HTTP request.\r\n */\r\n error: HttpMockError | null;\r\n\r\n /**\r\n * Returns a delayed response, in miliseconds.\r\n * Maximum value is `10000` miliseconds (10 seconds).\r\n */\r\n delay?: number;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpRequest } from \"@angular/common/http\";\r\nimport { HttpResponseMock } from \"./http-response-mock\";\r\nimport { HttpMockParameters } from \"../../../../framework\";\r\nimport { HttpMockMethodDescriptor } from \"./http-mock-method-descriptor\";\r\n\r\n/**\r\n * The `HttpMethodMock` interface defines the behavior of actions invoked each time an Angular\r\n * `HttpClient` instance sends requests to a specific API endpoint.\r\n */\r\nexport interface HttpMethodMock {\r\n\r\n /**\r\n * @private\r\n * Current progressive download mechanism will be replaced by a more efficient process.\r\n */\r\n downloadManager?: any;\r\n \r\n /**\r\n * This method emulates a successful HTTP call response.\r\n * \r\n * @param request The request associated with a HTTP call.\r\n * @param parameters The list of parameters associated with the HTTP request.\r\n * \r\n * @returns A user-defined `HttpResponse` mock object.\r\n */\r\n data: (request: HttpRequest<any>, parameters?: HttpMockParameters)=> HttpResponseMock;\r\n \r\n /**\r\n * The API descriptor of the associated with this HTTP method.\r\n */\r\n descriptor?: HttpMockMethodDescriptor;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Uuid } from \"../../../../util\";\r\nimport { HttpMockInterceptor } from \"./http-mock-interceptor\";\r\n\r\n/**\r\n * An interface that let Developer define mocking strategies for Angular HTTP calls.\r\n */\r\nexport interface HttpMockConfig {\r\n\r\n /**\r\n * The main URL origin for this mock, as defined by the URL standard.\r\n * \r\n * @see https://url.spec.whatwg.org/#concept-url-origin\r\n */\r\n origin?: string;\r\n\r\n /**\r\n * The unique identifier for this HTTP mock config.\r\n */\r\n id?: Uuid;\r\n\r\n /**\r\n * The configuration of mocking strategies for each specific API.\r\n */\r\n interceptors: HttpMockInterceptor[];\r\n \r\n /**\r\n * The description of this HTTP API.\r\n */\r\n description?: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMethodMock } from \"./http-method-mock\";\r\nimport { HttpMockEndpointDescriptor } from \"./http-mock-endpoint-descriptor\";\r\n\r\n/**\r\n * Provides the API to define mocking strategies for a specific endpoint.\r\n */\r\nexport interface HttpMockEndpoint {\r\n \r\n /**\r\n * The API descriptor for this endpoint.\r\n */\r\n descriptor?: HttpMockEndpointDescriptor;\r\n\r\n /**\r\n * The route part of the endpoint to mock.\r\n */\r\n route: string;\r\n\r\n /**\r\n * The mock configuration of HTTP `GET` method calls for the specified route.\r\n */\r\n get?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `POST` method calls for the specified route.\r\n */\r\n post?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `PUT` method calls for the specified route.\r\n */\r\n put?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `DELETE` method calls for the specified route.\r\n */\r\n delete?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `PATCH` method calls for the specified route.\r\n */\r\n patch?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `HEAD` method calls for the specified route.\r\n */\r\n head?: HttpMethodMock;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpParameterDescriptor } from \"./http-mock-parameter-descriptor\";\r\n\r\n/**\r\n * Provides the API to create documentation for a specific endpoint.\r\n */\r\nexport interface HttpMockEndpointDescriptor {\r\n \r\n /**\r\n * The description of the endpoint associated with this descriptor.\r\n */\r\n description?: string;\r\n\r\n /**\r\n * The description all parameters of the endpoint associated with this descriptor.\r\n */\r\n params?: HttpParameterDescriptor[];\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpParameterDescriptor } from \"./http-mock-parameter-descriptor\";\r\n\r\n/**\r\n * Provides the API to create documentation for a specific HTTP method.\r\n */\r\nexport interface HttpMockMethodDescriptor {\r\n \r\n /**\r\n * The description of the method associated with this descriptor.\r\n */\r\n description?: string;\r\n\r\n /**\r\n * The payload description for the method associated with this descriptor.\r\n */\r\n payload?: string;\r\n\r\n /**\r\n * The body description for the method associated with this descriptor.\r\n */\r\n body?: string;\r\n\r\n /**\r\n * The list of query string parameters for the method associated with this descriptor.\r\n */\r\n queryParams?: HttpParameterDescriptor[];\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Provides the API to create documentation for a specific HTTP parameter.\r\n */\r\nexport interface HttpParameterDescriptor {\r\n \r\n /**\r\n * The description of the HTTP parameter associated with this descriptor.\r\n */\r\n description: string;\r\n\r\n /**\r\n * The referrence to the HTTP parameter associated with this descriptor.\r\n */\r\n ref: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockEndpoint } from \"./http-mock-endpoint\";\r\n\r\n/**\r\n * Provides the API to define mocking strategies for a specific API.\r\n */\r\nexport interface HttpMockInterceptor {\r\n\r\n /**\r\n * The ID of this interceptor.\r\n */\r\n id: string;\r\n \r\n /**\r\n * The URL origin for this interceptor, as defined by the URL standard.\r\n * \r\n * @see https://url.spec.whatwg.org/#url\r\n */\r\n origin?: string;\r\n\r\n /**\r\n * A list of endpoints that must be intercepted by the HTTP Mocking Framework.\r\n */\r\n endpoints: HttpMockEndpoint[];\r\n\r\n /**\r\n * The description of this interceptor.\r\n */\r\n description?: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpStatusCode } from \"@angular/common/http\";\r\n\r\n\r\n/**\r\n * The `HttpMockError` interface provides the API that must be implemented by HTTP mock errors.\r\n */\r\nexport interface HttpMockError {\r\n \r\n /**\r\n * Error status code.\r\n */\r\n status: HttpStatusCode;\r\n \r\n /**\r\n * Textual description of error status code.\r\n */\r\n statusText: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Uuid } from \"../../../../util\";\r\n\r\n/**\r\n * Defines the the metadata associated to an HTTP mock request.\r\n */\r\nexport interface HttpMockRequestMetadata {\r\n\r\n /**\r\n * The unique ID associated with the HTTP request.\r\n */\r\n id: Uuid;\r\n\r\n /**\r\n * Indicates the starting time of the HTTP request.\r\n */\r\n start: number;\r\n\r\n /**\r\n * Indicates the how much time the request is stalled befaore the data loading starts.\r\n */\r\n stalled: number;\r\n \r\n /**\r\n * Indicates the duration of the HTTP request.\r\n */\r\n duration: number;\r\n\r\n /**\r\n * The reference to the `URL` object for the HTTP request.\r\n */\r\n url: URL;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @Private\r\n * The markup interface for XMLHttpRequest proxy implementations.\r\n * \r\n * @see https://xhr.spec.whatwg.org/#the-open()-method\r\n */\r\nexport interface XhrProxy extends XMLHttpRequest {}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Observable } from \"rxjs\";\r\n\r\n/**\r\n * The markup interface for `Observable` object built from the Fetch API.\r\n */\r\nexport abstract class FetchClient extends Observable<any> {}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n\r\n/**\r\n * The list of constant values that can be passed to the `productionPolicy` of the `HttpMockingFrameworkConfig` interface.\r\n */\r\nexport enum HttpMockProductionPolicy {\r\n\r\n /**\r\n * Indicates that the framework intercepts requests silently in producion mode.\r\n */\r\n SILENT = 0,\r\n\r\n /**\r\n * Indicates that the framework has to send a warning message to the console when a request is intercetped in producion mode.\r\n */\r\n WARNING = 1,\r\n\r\n /**\r\n * Indicates that the framework trhows an error when a request is intercetped in producion mode.\r\n */\r\n ERROR = 2\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockProductionPolicy } from \"./http-mock-production-policy.enum\";\r\nimport { HttpMockingFrameworkConfig } from \"./http-mocking-framework-config\";\r\n\r\n/**\r\n * The default provider for the HTTP Mocking Framework configuration. You typically define\r\n * the custom properties in the main NgModule declaration to initialize the HTTP Mocking Framework:\r\n * \r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: HTTP_MOCKING_FRAMEWORK_CONFIG, useValue: { disableVisualFlag: true, productionPolicy: HttpMockProductionPolicy.WARNING } }\r\n * ],\r\n * ...\r\n * });\r\n */\r\nexport const HTTP_MOCKING_FRAMEWORK_CONFIG: HttpMockingFrameworkConfig = {\r\n \r\n /**\r\n * Indicates whether the visual flag is visible (`false`), or not (`true`).\r\n * Default value is `false`.\r\n */\r\n disableVisualFlag: false,\r\n\r\n /**\r\n * Indicates the behavior of the framework when it is used in production mode.\r\n * Default value is `HttpMockProductionPolicy.ERROR`.\r\n */\r\n productionPolicy: HttpMockProductionPolicy.ERROR\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockProductionPolicy } from \"./http-mock-production-policy.enum\";\r\n\r\n/**\r\n * Defines properties for the HTTP Mocking framework configuration.\r\n */\r\nexport interface HttpMockingFrameworkConfig {\r\n\r\n /**\r\n * Indicates whether the visual flag is visible (`false`), or not (`true`).\r\n */\r\n disableVisualFlag?: boolean;\r\n\r\n /**\r\n * Indicates the behavior of the framework when it is used in production mode.\r\n */\r\n productionPolicy?: HttpMockProductionPolicy;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpRequest } from \"@angular/common/http\";\r\nimport { HttpMockRequestMetadata } from \"../http-mock-request-metadata\";\r\n\r\n/**\r\n * The markup interface for all prefetch log metadata of the HTTP Mocking Framework.\r\n */\r\nexport interface HttpMockLoggingPrefetchMetadata {\r\n request: HttpRequest<any>;\r\n requestMetadata: HttpMockRequestMetadata;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpResponse } from \"@angular/common/http\";\r\nimport { HttpMockLoggingPrefetchMetadata } from \"./http-mock-logging-prefetch-metadata\";\r\n\r\n/**\r\n * The markup interface for all log metadata of the HTTP Mocking Framework.\r\n */\r\nexport interface HttpMockLoggingMetadata extends HttpMockLoggingPrefetchMetadata {\r\n response: HttpResponse<any>;\r\n}","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in \n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Subscription } from 'rxjs';\nimport { Identifiable } from '../lang';\n\n/**\n * Defines the API to implement to create Angular subscription management objects.\n */\nexport interface SubscriptionManager {\n\n /**\n * Stores a new `Subscription` instance associated with the specified reference.\n * \n * @param ref The reference for which to store a new `Subscription` instance.\n * Can be either a string or an `Identifiable` object.\n * @param subscription The `Subscription` instance to register.\n * \n * @returns A reference to this `SubscriptionManager` object.\n */\n register(ref: string | Identifiable, subscription: Subscription): SubscriptionManager;\n\n /**\n * Stores a new `Subscription` instance associated with the reference specified\n * by the last `register()` method invokation.\n * \n * @param subscription The `Subscription` instance to register.\n * \n * @returns A reference to this `SubscriptionManager` object.\n */\n append(subscription: Subscription): SubscriptionManager;\n \n /**\n * Unsubscribes and removes all `Subscription` instances associated with the specified reference.\n * \n * @param ref The reference for which to remove all `Subscription` instances.\n * Can be either a string or an `Identifiable` object.\n * \n * @returns `true` whether the specified reference exists; `false` otherwise.\n */\n clearAll(ref: string | Identifiable): boolean;\n\n /**\n * Returns all `Subscription` instances associated with the specified reference.\n * \n * @param ref The reference for which to remove get `Subscription` instances.\n * Can be either a string or an `Identifiable` object.\n * \n * @returns All `Subscription` instances associated with the specified reference, or \n * `null` whether the specified reference does not exists.\n */\n get(ref: string | Identifiable): Array<Subscription> | null;\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The type of connection as defined by the `NetworkInformation.type` property.\r\n */\r\nexport type ConnectionType =\r\n 'bluetooth'\r\n | 'cellular'\r\n | 'ethernet'\r\n | 'mixed'\r\n | 'none'\r\n | 'other'\r\n | 'unknown'\r\n | 'wifi'\r\n | 'wimax';\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The effective type of connection as defined by the `NetworkInformation.effectiveType` property.\r\n */\r\nexport type EffectiveConnectionType =\r\n '2g'\r\n | '3g'\r\n | '4g'\r\n | 'slow-2g';","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ConnectionType } from \"./connection-type\";\r\nimport { EffectiveConnectionType } from \"./effective-connection-type\";\r\n\r\n/**\r\n * The `NetworkInformation` interface of the Network Information API provides\r\n * information about the connection a device is using to communicate with the network\r\n * and provides a means for scripts to be notified if the connection type changes.\r\n * The `NetworkInformation` interface cannot be instantiated. It is instead accessed\r\n * through the connection property of the `Navigator` interface or the `WorkerNavigator`\r\n * interface.\r\n */\r\nexport interface NetworkInformation extends EventTarget {\r\n\r\n /**\r\n * Returns the effective bandwidth estimate in megabits per second,\r\n * rounded to the nearest multiple of 25 kilobits per seconds.\r\n */\r\n readonly downlink: number;\r\n\r\n /**\r\n * Returns the maximum downlink speed, in megabits per second (Mbps),\r\n * for the underlying connection technology.\r\n */\r\n readonly downlinkMax: number;\r\n \r\n /**\r\n * Returns the effective type of the connection meaning one of the `EffectiveConnectionType` enum.\r\n * This value is determined using a combination of recently observed round-trip time and downlink values.\r\n */\r\n readonly effectiveType: EffectiveConnectionType;\r\n\r\n /**\r\n * Returns the type of connection a device is using to communicate with the network.\r\n * It will be one of the `ConnectionType` enum.\r\n */\r\n readonly type: ConnectionType;\r\n \r\n /**\r\n * Returns the estimated effective round-trip time of the current connection,\r\n * rounded to the nearest multiple of 25 milliseconds.\r\n */\r\n readonly rtt: number;\r\n\r\n /**\r\n * Returns `true` whether the user has set a reduced data usage option on the user agent.\r\n * `false` otherwise.\r\n */\r\n readonly saveData: boolean;\r\n\r\n /**\r\n * The event that's fired when connection information changes.\r\n */\r\n onchange: EventListener\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `BatteryManager` interface of the Battery Status API provides information about\r\n * the system battery charge level. The `navigator.getBattery()` method returns a promise\r\n * that resolves with a `BatteryManager` interface.\r\n */\r\nexport interface BatteryManager extends EventTarget {\r\n\r\n /**\r\n * A boolean value indicating whether the battery is currently being charged.\r\n */\r\n readonly charging: boolean;\r\n\r\n /**\r\n * A number representing the remaining time in seconds until the battery is fully charged,\r\n * or 0 if the battery is already fully charged.\r\n */\r\n readonly chargingTime: number;\r\n\r\n /**\r\n * A number representing the remaining time in seconds until the battery\r\n * is completely discharged and the system suspends.\r\n */\r\n readonly dischargingTime: number;\r\n\r\n /**\r\n * A number representing the system's battery charge level scaled to a value between 0.0 and 1.0.\r\n */\r\n readonly level: number;\r\n\r\n /**\r\n * Fired when the battery charging state (the `charging` property) is updated.\r\n * \r\n * @param event A generic `Event`.\r\n */\r\n onlevelchange(event: Event): void;\r\n\r\n /**\r\n * Fired when the battery charging time (the `chargingTime` property) is updated.\r\n * \r\n * @param event A generic `Event`.\r\n */\r\n onchargingchange(event: Event): void;\r\n\r\n /**\r\n * Fired when the battery discharging time (the `dischargingTime` property) is updated.\r\n * \r\n * @param event A generic `Event`.\r\n */\r\n onchargingtimechange(event: Event): void;\r\n\r\n /**\r\n * Fired when the battery level (the `level` property) is updated.\r\n * \r\n * @param event A generic `Event`.\r\n */\r\n ondischargingtimechange(event: Event): void;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Destroyable } from \"../lang\";\r\nimport { Log } from \"./log\";\r\n\r\n/**\r\n * The markup interface for Angular Toolbox log connectors. ATX log connectors are\r\n * controllers that apply specific processing to logs (e.g sending logs to a data base...).\r\n */\r\nexport interface LogConnector extends Destroyable {\r\n\r\n /**\r\n * Initializes the controller.\r\n * \r\n * @param logList The initial log list.\r\n */\r\n init(logList: Log[]): void;\r\n\r\n /**\r\n * Sends the specified log to the controller for processing.\r\n * \r\n * @param log The log to be sent for processing.\r\n */\r\n sendLog(log: Log): void;\r\n\r\n /**\r\n * Removes all logs from the controller.\r\n */\r\n clearLogs(): void;\r\n\r\n /**\r\n * Creates a copy of all logs in the controller.\r\n * The copying process depends on the controller implementation.\r\n */\r\n copyLogs(): void;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { LogLevel } from \"./log-level.enum\";\r\n\r\n/**\r\n * Represents a log in the Angular Toolbox framework.\r\n */\r\nexport interface Log {\r\n\r\n /**\r\n * Provides a human readable reference for the invoker associated with this log.\r\n */\r\n readonly caller: string;\r\n\r\n /**\r\n * The message associated with this log.\r\n */\r\n readonly message: string;\r\n\r\n /**\r\n * The criticality level of this log.\r\n */\r\n readonly level: LogLevel;\r\n\r\n /**\r\n * The timestamp at which the log has been created.\r\n */\r\n readonly timestamp: number;\r\n\r\n /**\r\n * Optional metada associated with this log.\r\n * Metadata are typically set by Developer to provide custom objects representations.\r\n */\r\n readonly metadata?: any;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Destroyable } from \"../lang\";\r\nimport { LogConnector } from \"./log-connector\";\r\n\r\n/**\r\n * Transactional loggers allow to create proxy via the `LogConnector` interface\r\n * to send logs to third-party tools.\r\n */\r\nexport interface TransactionalLogger extends Destroyable {\r\n\r\n /**\r\n * Sets a new log connector this transactional logger.\r\n * \r\n * @param value The reference to the new log connector associated with this transactional logger.\r\n * If `null` the logger uses the instance defined by the `DEFAULT_LOG_CONNECTOR` constant.\r\n */\r\n setLogConnector(value: LogConnector | null): void;\r\n \r\n /**\r\n * Returns the reference to the log connector associated with this transactional logger.\r\n * \r\n * @returns The log connector associated with this transactional logger.\r\n */\r\n getLogConnector(): LogConnector;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the level of an Angular Toolbox log.\r\n */\r\nexport enum LogLevel {\r\n\r\n /**\r\n * Indicates that the log is a basic information message.\r\n */\r\n INFO = 0,\r\n \r\n /**\r\n * Indicates that the log represents a config message.\r\n */\r\n CONFIG = 1,\r\n\r\n /**\r\n * Indicates that the log is a warning message.\r\n */\r\n WARNING = 2,\r\n\r\n /**\r\n * Indicates that the log message represents an error.\r\n */\r\n ERROR = 3,\r\n \r\n /**\r\n * A special level used by loggers to prevent logs to be processed.\r\n */\r\n OFF = 4\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { LogConnector } from \"./log-connector\";\r\n\r\n/**\r\n * Defines properties for the `LoggerService` configuration.\r\n */\r\nexport interface LoggerConfig {\r\n\r\n /**\r\n * Defines the log connector of the `LoggerService` singleton.\r\n */\r\n logConnector?: LogConnector;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { LoggerConfig } from \"./logger-config\";\r\n\r\n/**\r\n * The default provider for the `LoggerService` configuration. You typically define\r\n * the custom properties in the main NgModule declaration to initialize the logger:\r\n * \r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: ATX_LOGGER_CONFIG, useValue: { dataConnector: new ConsoleLogConnector() } }\r\n * ],\r\n * ...\r\n * });\r\n */\r\nexport const ATX_LOGGER_CONFIG: LoggerConfig = {}\r\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in \n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Injectable } from '@angular/core';\nimport { AbstractSubscriptionManager } from '../../../core';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that helps to manage unregistration issues of Angular subscriptions.\n */\nexport class SubscriptionService extends AbstractSubscriptionManager {\n\n /**\n * @private\n */\n constructor() {\n super();\n }\n}\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Inject, Injectable, EventEmitter } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { CSS_PROP, DARK_MODE_CONFIG, DarkModeConfig, STORAGE_KEY } from '../../business';\n\n// --> Internal constants\n/**\n * @private\n */\nconst ADD_ACTION: string = \"add\";\n\n/**\n * @private\n */\nconst REMOVE_ACTION: string = \"remove\";\n\n/**\n * @private\n */\nconst TRUE: string = \"true\";\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that provides Dark Mode implementation for your Angular application.\n */\nexport class DarkModeService {\n \n /**\n * @private\n */\n private _darkModeEnabled: boolean = false;\n\n /**\n * @private\n */\n private _cssProperty: string = CSS_PROP;\n\n /**\n * @private\n */\n private _storageKey: string = STORAGE_KEY;\n\n /**\n * The callback function that is triggered when the dark mode changes.\n * \n * @typeParam `EventEmitter<boolean>` the value returned by the `darkModeEnabled()` property.\n */\n public readonly change: EventEmitter<boolean> = new EventEmitter<boolean>(true);\n\n /**\n * @private\n * Creates a new `DarkModeService` instance.\n * \n * @param _document The reference to the `Document` singleton.\n * @param config The reference to the `DarkModeConfig` provider.\n */\n constructor(@Inject(DOCUMENT) private _document: Document, @Inject(DARK_MODE_CONFIG) config: DarkModeConfig) {\n this.initDarkMode(config);\n }\n\n /**\n * Toogles the dark mode state.\n */\n public toggleDarkMode(): void {\n this._darkModeEnabled ? this.disableDarkMode() : this.enableDarkMode();\n }\n\n /**\n * Sets the dark mode state to active.\n */\n public enableDarkMode(): void {\n this.setDarkMode(ADD_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Sets the dark mode state to inactive.\n */\n public disableDarkMode(): void {\n this.setDarkMode(REMOVE_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Returns a `boolean` value that indicates whether the dark mode state is active (`true`), or not (`false`).\n * \n * @returns `true` whether the dark mode state is active; `false` otherwise.\n */\n public darkModeEnabled(): boolean {\n return this._darkModeEnabled;\n }\n\n /**\n * Returns the value of the CSS property as defined by the config provider.\n * \n * @returns The value of the CSS property.\n */\n public getCssProperty(): string {\n return this._cssProperty;\n }\n\n /**\n * Returns the value of the storage key as defined by the config provider.\n * \n * @returns The value of the storage key.\n */\n public getStorageKey(): string {\n return this._storageKey;\n }\n \n /**\n * Removes the dark mode information from local storage.\n */\n public invalidateStorage(): void {\n localStorage.removeItem(this._storageKey);\n }\n \n /**\n * @private\n */\n private initDarkMode(config: DarkModeConfig): void {\n this._darkModeEnabled = config.darkModeEnabled || false;\n this._cssProperty = config.cssProperty || CSS_PROP;\n this._storageKey = config.storageKey || STORAGE_KEY;\n if (this._darkModeEnabled) {\n this.enableDarkMode();\n } else {\n this.initStoredDarkMode();\n }\n if (config.detectBrowserSettings) this.initBrowserMode();\n }\n\n /**\n * @private\n */\n private initStoredDarkMode(): void {\n const result: string | null = localStorage.getItem(this._storageKey);\n if (result === TRUE) this.enableDarkMode();\n }\n \n /**\n * @private\n */\n private setStoredDarkMode(): void {\n const data: string = String(this._darkModeEnabled);\n localStorage.setItem(this._storageKey, data);\n }\n \n /**\n * @private\n */\n private setDarkMode(action: string): void {\n const classList: DOMTokenList = this._document.body.classList;\n if (action === ADD_ACTION) {\n classList.add(this._cssProperty);\n this._darkModeEnabled = true;\n } else if (action === REMOVE_ACTION) {\n classList.remove(this._cssProperty);\n this._darkModeEnabled = false;\n }\n this.change.emit(this._darkModeEnabled);\n }\n \n /**\n * @private\n */\n private initBrowserMode(): void {\n if (this.matchDarkTheme()) return this.enableDarkMode();\n this.disableDarkMode();\n }\n \n /**\n * @private\n */\n private matchDarkTheme(): boolean {\n return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n}\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport { EventEmitter, Inject, Injectable } from '@angular/core';\nimport { ScrollBehavior } from '../../business';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that provides scrolling capabilities to your Angular application.\n */\nexport class ScrollService {\n\n /**\n * The callback function that is triggered when a scroll operation is performed.\n * \n * @typeParam `EventEmitter<Event>` The reference to the original scroll event.\n */\n public readonly onScroll: EventEmitter<Event> = new EventEmitter<Event>();\n\n /**\n * @private\n * Creates a new `ScrollService` instance.\n * \n * @param _document The reference to the `Document` singleton.\n */\n constructor(@Inject(DOCUMENT) private _document: Document) {\n window.addEventListener(\"scroll\", (e: Event) => {\n this.onScroll.next(e);\n });\n }\n\n /**\n * Scrolls the ancestor containers of the element with the specified selector such that \n * this element is visible to the user.\n * \n * @param selector The selector of the target element.\n * @param arg A `boolean` value:\n * If `true`, the top of the element will be aligned to the top of the visible area of the\n * scrollable ancestor.\n * If `false`, the bottom of the element will be aligned to the bottom of the visible area\n * of the scrollable ancestor. \n * @param arg A dictionary containing the scroll parameters.\n */\n public scrollIntoView(selector: string, arg?: boolean | ScrollIntoViewOptions | undefined): void {\n const elm: Element | null = this._document.querySelector(selector);\n if (elm) elm.scrollIntoView(arg);\n }\n\n /**\n * Scrolls the app viewport to the top of the browser window.\n * \n * @param behavior Specifies whether the scrolling should animate smoothly (`smooth`),\n * happen instantly in a single jump (`instant`), or let the browser\n * choose (`auto`, `default`).\n */\n public gotoTop(behavior: ScrollBehavior = 'smooth'): void {\n const options: ScrollToOptions = {\n top: 0,\n behavior: behavior as any\n };\n this.scroll(options);\n }\n\n /**\n * Scrolls the app viewport according to the specified options, into the browser window.\n * \n * @param options A dictionary containing the scroll parameters.\n */\n public scroll(options?: ScrollToOptions): void {\n window.scroll(options);\n }\n \n /**\n * Scrolls the app viewport by the specified `x/y` coordinates, into the browser window.\n * \n * @param x The horizontal pixel value that you want to scroll by.\n * @param y The vertical pixel value that you want to scroll by.\n */\n public scrollBy(x: number, y: number): void {\n window.scrollBy(x, y);\n }\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * An internal convenient object that defined default `ScrollIntoViewOptions` objects.\r\n */\r\nexport const DEFAULT_SCROLL_BEHAVIOR: ScrollIntoViewOptions = { behavior: \"smooth\", block: \"start\", inline: \"nearest\" };\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AppBridgeCommand } from \"../../model/business/lang/app-bridge-command\";\r\nimport { AppBridgeError } from \"../error\";\r\n\r\n/**\r\n * @private\r\n * The `AppBridge` class is an internal invoker utility that executes commans declared\r\n * by the `AppBridgeService` instance.\r\n */\r\nexport class AppBridge {\r\n \r\n /**\r\n * @private\r\n * Stores all commands registered by the `AppBridgeService` instance.\r\n */\r\n private readonly _commandMap: Map<string, AppBridgeCommand> = new Map<string, AppBridgeCommand>();\r\n\r\n /**\r\n * Executes the command with the specified `name` parameter.\r\n * \r\n * @param name The reference to the command to execute.\r\n * @param args The list of parmeters so be sent to the command.\r\n */\r\n public execute(name: string, ...args: any[]): void {\r\n const command: Function | undefined = this._commandMap.get(name);\r\n if (command) command.apply(null, args);\r\n else throw new AppBridgeError(`Invalid AppBridge command: method width name '${name}' does not exist.`);\r\n }\r\n \r\n /**\r\n * Registers a command.\r\n * \r\n * @param name The name of the command to register.\r\n * @param command The command to register.\r\n */\r\n public addCommand(name: string, command: AppBridgeCommand): void {\r\n this._commandMap.set(name, command);\r\n }\r\n \r\n /**\r\n * Unregisters a command.\r\n * \r\n * @param name The name of the command to unregister.\r\n * \r\n * @returns `true` whether the command existed and has been removed; `false` otherwise.\r\n */\r\n public removeCommand(name: string): boolean {\r\n return this._commandMap.delete(name);\r\n }\r\n\r\n /**\r\n * Returns the command with the specified name.\r\n * \r\n * @param name The name of the command to retrieve.\r\n * \r\n * @returns Returns the command associated with the specified name.\r\n * If no command is associated with the specified name, `undefined` is returned.\r\n */\r\n public getCommand(name: string): AppBridgeCommand | undefined {\r\n return this._commandMap.get(name);\r\n }\r\n\r\n /**\r\n * Returns a boolean indicating whether a command with the specified name exists or not.\r\n * \r\n * @param name The name of the command to retrieve.\r\n * \r\n * @returns Returns `true` whether the command exists; `false` otherwise.\r\n */\r\n public hasCommand(name: string): boolean {\r\n return this._commandMap.has(name);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Injectable, NgZone, Inject } from '@angular/core';\r\nimport { NavigationExtras, Router } from '@angular/router';\r\nimport { DEFAULT_SCROLL_BEHAVIOR } from '../../../util/default-scroll-behavior';\r\nimport { AppBridge } from '../../../core/bridge/app-bridge';\r\nimport { AppBridgeError } from '../../../core';\r\nimport { AppBridgeCommand } from '../../business/lang/app-bridge-command';\r\n\r\n/**\r\n * @private\r\n */\r\nexport const APP_PRIDGE_REF: string = \"appBridge\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst HREF: string = \"href\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst NATIVE_COMMANDS: string = \"navigate|goToAnchor|declareCommand|deleteCommand|getCommand\";\r\n\r\n/**\r\n * A utility service that allows dynamically injected HTML fragments, to interact with the Angular application.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppBridgeService {\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _defaultView: any;\r\n\r\n /**\r\n * @private\r\n * Thereference to the command invoker.\r\n */\r\n private readonly _appBridge: AppBridge;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _router: Router,\r\n private _zone: NgZone,\r\n @Inject(DOCUMENT) private _document: any) {\r\n this._defaultView = _document.defaultView;\r\n this._appBridge = new AppBridge();\r\n if(!this._defaultView[APP_PRIDGE_REF]) this._defaultView[APP_PRIDGE_REF] = this;\r\n }\r\n\r\n /**\r\n * Provides the ability to invoke the `navigate()` method of the Angular app router.\r\n * \r\n * @param commands The commands array as specified by the Angular router `navigate()` method.\r\n * @param extras The navigation options as specified by the Angular router `navigate()` method.\r\n * @return `Promise` that resolves to `true` when navigation succeeds, or `false` when navigation fails.\r\n * \r\n * @see https://angular.dev/api/router/Router#navigate\r\n */\r\n public navigate(commands: string[], extras?: NavigationExtras | undefined): Promise<boolean> {\r\n return this._zone.run(() => {\r\n return this._router.navigate(commands, extras);\r\n });\r\n }\r\n\r\n /**\r\n * Allows to scroll to the fragment specified by the `href` attribute when the user element interact with the associated element.\r\n * \r\n * @example\r\n * <a href=\"#myAnchor\" onclick=\"appBridge.goToAnchor(event)\">My Section</a></code>\r\n * \r\n * @param event The event that triggers the anchor navigation.\r\n * @return `Promise` that resolves to `true` when navigation succeeds, or `false` when navigation fails.\r\n * \r\n * @see https://angular.dev/api/router/Router#navigate\r\n */\r\n public goToAnchor(event: Event): Promise<boolean> {\r\n event.preventDefault();\r\n const anchor: string | null = (event.target as HTMLElement).getAttribute(HREF);\r\n if (!anchor) throw new ReferenceError(\"href attribute is not defined.\");\r\n const elm: HTMLElement = this._document.querySelector(anchor);\r\n if (!elm) return new Promise((resolve: Function) => resolve(false));\r\n elm.scrollIntoView(DEFAULT_SCROLL_BEHAVIOR);\r\n return this._zone.run(() => {\r\n return this._router.navigate([], { fragment: anchor.slice(1)});\r\n });\r\n }\r\n\r\n /**\r\n * Declares a new JavaScript command to be used with dynamically loaded documents.\r\n * \r\n * @param name The name of the command to declare.\r\n * @param command The reference to a JavaScript command to be used with dynamically loaded documents.\r\n */\r\n public declareCommand(name: string, command: AppBridgeCommand): void {\r\n this.checkCommandName(name);\r\n if(!this._appBridge.hasCommand(name)) {\r\n this._appBridge.addCommand(name, command);\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n get: function() {\r\n return this._appBridge.getCommand(name);\r\n }\r\n });\r\n }\r\n }\r\n \r\n /**\r\n * Unregisters a JavaScript command previously referenced with the `declareCommand()` method.\r\n * \r\n * @param name The name of the command to remove.\r\n * \r\n * @returns `true` whether the command existed and has been removed; `false` otherwise.\r\n */\r\n public deleteCommand(name: string): boolean {\r\n this.checkCommandName(name);\r\n if(!this._appBridge.removeCommand(name)) return false;\r\n delete this._defaultView[APP_PRIDGE_REF][name];\r\n return true;\r\n }\r\n \r\n /**\r\n * Returns the JavaScript command previously referenced with the `declareCommand()` method.\r\n * \r\n * @param name The name of the command to retrieve.\r\n * @returns The JavaScript command previously referenced with the specified `name` parameter.\r\n * If no command is found, returns `undefined`.\r\n */\r\n public getCommand(name: string): AppBridgeCommand | undefined { \r\n return this._appBridge.getCommand(name);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private checkCommandName(name: string): void {\r\n if (NATIVE_COMMANDS.includes(name)) throw new AppBridgeError(\"Command name cannot be the reference to a native command: \" + name);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter, Type } from \"@angular/core\";\r\nimport { Uuid } from \"../../../../util\";\r\nimport { Destroyable, WindowRef } from \"../../../business\";\r\n\r\n/**\r\n * The abstract class that must be implemented by services that provide\r\n * functionality to display Angular component within a new browser window.\r\n */\r\nexport abstract class AbstractWindowService implements Destroyable {\r\n\r\n /**\r\n * An event triggered each time a window is closed.\r\n */\r\n public readonly windowClose: EventEmitter<Uuid> = new EventEmitter();\r\n\r\n /**\r\n * @private\r\n */\r\n protected windowRefMap: Map<Uuid, WindowRef<any, any>> = new Map();\r\n\r\n /**\r\n * Returns the window reference object associated with the specified `Uuid` object.\r\n * \r\n * @param uuid The `Uuid` object associated with the window reference to get.\r\n * \r\n * @returns A `WindowRef` object, or `undefined` if the reference cannot be found.\r\n */\r\n public get(uuid: Uuid): WindowRef<any, any> | undefined {\r\n return this.windowRefMap.get(uuid);\r\n }\r\n\r\n /**\r\n * Returns all the window reference objects created by the service.\r\n * \r\n * @returns A list of `WindowRef` objects created by this service.\r\n */\r\n public getAll(): WindowRef<any, any>[] {\r\n return Array.from(this.windowRefMap.values());\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public destroy(): void {\r\n this.windowRefMap.clear();\r\n }\r\n\r\n /**\r\n * Opens a new browser window with the specified properties and attaches an instance of \r\n * the specified component into the window container.\r\n * \r\n * @param component The component to attach in the new window.\r\n * @param init The config used to initialize the window.\r\n * \r\n * @returns A `Uuid` object.\r\n */\r\n abstract open<T>(component: Type<T>, init?: any): Uuid;\r\n\r\n /**\r\n * Closes the window associated with the specified `Uuid` object.\r\n * \r\n * @param uuid The `Uuid` object associated with the window to close.\r\n * \r\n * @returns `true` whether the window exists and is closed; `false` otherwise.\r\n */\r\n abstract close(uuid: Uuid): boolean;\r\n\r\n /**\r\n * Closes all opened windows.\r\n */\r\n abstract closeAll(): void;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { WindowInit } from \"../../model\";\r\nimport { EMPTY_STRING } from \"../empty-string.const\";\r\n\r\n/**\r\n * A static builder that creates the features associated with a popup window created by\r\n * the `WindowService.open()` method.\r\n */\r\nexport class BrowserWindowFeaturesBuilder {\r\n\r\n /**\r\n * Builds a string that represents the features parameter of the `Window.open()` method.\r\n * \r\n * @param init A `WindowInit` object that contains data to initialize the features string.\r\n * \r\n * @returns A string that represents the features parameter of the `Window.open()` method.\r\n */\r\n public static build(init?: WindowInit): string {\r\n if (!init) return \"popup=true,left=100,top=100,width=800,height=450\";\r\n let features: string = \"popup=true\";\r\n if (init.center) BrowserWindowFeaturesBuilder.setCenterPos(init);\r\n features += BrowserWindowFeaturesBuilder.getLeft(init);\r\n features += BrowserWindowFeaturesBuilder.getTop(init);\r\n features += BrowserWindowFeaturesBuilder.getWidth(init);\r\n features += BrowserWindowFeaturesBuilder.getHeight(init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"directories\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"titlebar\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"scrollbars\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"toolbar\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"location\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"status\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"menubar\", init);\r\n return features;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static setCenterPos(init: WindowInit): void {\r\n const screen: Screen = window.screen;\r\n let meas: number = init.width || 800;\r\n init.left = (screen.width - meas) / 2;\r\n meas = init.height || 450;\r\n init.top = (screen.height - meas) / 2;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getLeft(init?: WindowInit): string {\r\n const v: number | undefined = init?.left;\r\n return \",left=\" + (v || 100);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getTop(init?: WindowInit): string {\r\n const v: number | undefined = init?.top;\r\n return \",top=\" + (v || 100);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getWidth(init?: WindowInit): string {\r\n const v: number | undefined = init?.width;\r\n return \",width=\" + (v || 800);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getHeight(init?: WindowInit): string {\r\n const v: number | undefined = init?.height;\r\n return \",height=\" + (v || 450);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getPopupProp(property: string, init?: WindowInit): string {\r\n if (!init) return EMPTY_STRING;\r\n const v: any = (init as any)[property as any];\r\n if (!v) return EMPTY_STRING;\r\n return `,${property}=${v}`;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { WindowInit } from \"../../model\";\r\n\r\n/**\r\n * A static utility class that creates header tags for windows created by the `WindowService.open()` method.\r\n */\r\nexport class WindowHeaderTagUtil {\r\n\r\n /**\r\n * Sets the title of the specified window if defined in the `WindowInit` config object.\r\n * \r\n * @param win The window for which to set the title.\r\n * @param init The `WindowInit` config object used to initialize the window.\r\n */\r\n public static setTitle(win: Window, init?: WindowInit): void {\r\n const title: string | undefined = init?.title;\r\n if (!title) return;\r\n win.document.title = title;\r\n }\r\n\r\n /**\r\n * Sets the icon of the specified window if defined in the `WindowInit` config object.\r\n * \r\n * @param win The window for which to set the icon.\r\n * @param init The `WindowInit` config object used to initialize the window.\r\n */\r\n public static setIcon(win: Window, init?: WindowInit): void {\r\n const icon: string | undefined = init?.icon;\r\n if (!icon) return;\r\n const doc: Document = win.document;\r\n const head: HTMLHeadElement = doc.getElementsByTagName('head')[0];\r\n const link: HTMLLinkElement = doc.createElement('link');\r\n link.rel = 'shortcut icon';\r\n link.href = icon;\r\n head.appendChild(link);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ApplicationRef, ComponentRef, Injectable, OnDestroy, Type } from \"@angular/core\";\r\nimport { EMPTY_STRING, Uuid } from \"../../../../util\";\r\nimport { WindowInit, WindowRef } from \"../../../business\";\r\nimport { WindowTarget } from \"../../../business/ui/window/window-target\";\r\nimport { BrowserWindowFeaturesBuilder } from \"../../../../util/window/window-features-builder\";\r\nimport { WindowHeaderTagUtil } from \"../../../../util/window/window-header-tag-util\";\r\nimport { AbstractWindowService } from \"./abstract-window.service\";\r\n\r\n/**\r\n * @private\r\n */\r\ntype EvtListener = (this: Window, ev: BeforeUnloadEvent) => any;\r\n\r\n/**\r\n * @private\r\n */\r\nconst EVT_TYPE: string = \"beforeunload\";\r\n\r\n/**\r\n * Provides functionality to display Angular component within a new browser window.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WindowService extends AbstractWindowService implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _appRef: ApplicationRef) {\r\n super();\r\n const beforeUnloadHandler: EvtListener = ()=> {\r\n this.ngOnDestroy();\r\n window.removeEventListener(EVT_TYPE, beforeUnloadHandler);\r\n };\r\n window.addEventListener(EVT_TYPE, beforeUnloadHandler);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public open<T>(component: Type<T>, init?: WindowInit): Uuid {\r\n const id: Uuid = Uuid.build();\r\n const features: string = BrowserWindowFeaturesBuilder.build(init);\r\n const win: WindowProxy = window.open(EMPTY_STRING, this.getTarget(init), features) as WindowProxy;\r\n WindowHeaderTagUtil.setTitle(win, init);\r\n WindowHeaderTagUtil.setIcon(win, init);\r\n const componentRef: ComponentRef<T> = this._appRef.bootstrap(component, win.document.body);\r\n const winRef: WindowRef<T, Window> = {\r\n window: win as Window,\r\n componentRef: componentRef\r\n };\r\n const unloadListener: EvtListener = ()=> {\r\n this.windowClose.emit(id);\r\n win.removeEventListener(EVT_TYPE, unloadListener);\r\n };\r\n win.addEventListener(EVT_TYPE, unloadListener);\r\n this.windowRefMap.set(id, winRef);\r\n return id;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public close(uuid: Uuid): boolean {\r\n const winRef: WindowRef<any, Window> | undefined = this.windowRefMap.get(uuid);\r\n if (!winRef) return false;\r\n this.windowRefMap.delete(uuid);\r\n winRef.window.close();\r\n winRef.window = null as any;\r\n winRef.componentRef.destroy();\r\n winRef.componentRef as any;\r\n return true;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public closeAll(): void {\r\n const keys: IterableIterator<Uuid> = this.windowRefMap.keys();\r\n for (const key of keys) this.close(key);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.closeAll();\r\n this.destroy();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getTarget(init?: WindowInit): WindowTarget {\r\n if (init) return init.target || WindowTarget.BLANK;\r\n return WindowTarget.BLANK;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { VERSION_CONFIG, VersionConfig, VersionManager } from '../../business';\r\nimport { AbstractVersionManager } from '../../../core';\r\n\r\n/**\r\n * A lightweight service that provides Semantic Versioning implementation for your Angular projects.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class VersionService extends AbstractVersionManager implements VersionManager {\r\n\r\n /**\r\n * Creates a new VersionService instance.\r\n * @param config the reference to the VersionConfig provider.\r\n */\r\n constructor(@Inject(VERSION_CONFIG) config: VersionConfig) {\r\n super(config);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * Provides the list of HTTP verbs.\r\n */\r\nexport enum HTTPMethodRef {\r\n\r\n /**\r\n * @private\r\n * A reference to the `connect` route associated with the `CONNECT` HTTP verb.\r\n */\r\n CONNECT = 'connect',\r\n \r\n /**\r\n * @private\r\n * A reference to the `delete` route associated with the `DELETE` HTTP verb.\r\n */\r\n DELETE = 'delete',\r\n \r\n /**\r\n * @private\r\n * A reference to the `get` route associated with the `GET` HTTP verb.\r\n */\r\n GET = 'get',\r\n \r\n /**\r\n * @private\r\n * A reference to the `head` route associated with the `HEAD` HTTP verb.\r\n */\r\n HEAD = 'head',\r\n \r\n /**\r\n * @private\r\n * A reference to the `options` route associated with the `OPTIONS` HTTP verb.\r\n */\r\n OPTIONS = 'options',\r\n \r\n /**\r\n * @private\r\n * A reference to the `patch` route associated with the `PATCH` HTTP verb.\r\n */\r\n PATCH = 'patch',\r\n \r\n /**\r\n * @private\r\n * A reference to the `post` route associated with the `POST` HTTP verb.\r\n */\r\n POST = 'post',\r\n \r\n /**\r\n * @private\r\n * A reference to the `put` route associated with the `PUT` HTTP verb.\r\n */\r\n PUT = 'put',\r\n \r\n /**\r\n * @private\r\n * A reference to the `trace` route associated with the `TRACE` HTTP verb.\r\n */\r\n TRACE = 'trace'\r\n }","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { TokenType } from \"./model/token-type\";\r\n\r\n/**\r\n * @private\r\n * The reference to the default delimiter.\r\n * Value is `\"/\"`.\r\n */\r\nexport const DEFAULT_DELIMITER: string = \"/\";\r\n\r\n/**\r\n * @private\r\n * The reference to the case insensitive flag.\r\n * Value is `\"i\"`.\r\n */\r\nexport const I_FLAG: string = \"i\";\r\n\r\n/**\r\n * @private\r\n * The reference to the global flag.\r\n * Value is `\"g\"`.\r\n */\r\nexport const G_FLAG: string = \"g\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `{` `TokenType`.\r\n */\r\nexport const LEFT_CURLY_BRACE: TokenType = \"{\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `}` `TokenType`.\r\n */\r\nexport const RIGHT_CURLY_BRACE: TokenType = \"}\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `*` `TokenType`.\r\n */\r\nexport const ASTERISK: TokenType = \"*\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `+` `TokenType`.\r\n */\r\nexport const PLUS: TokenType = \"+\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `?` `TokenType`.\r\n */\r\nexport const QUESTION_MARK: TokenType = \"?\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `NAME` `TokenType`.\r\n */\r\nexport const NAME: TokenType = \"NAME\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `PATTERN` `TokenType`.\r\n */\r\nexport const PATTERN: TokenType = \"PATTERN\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `CHAR` `TokenType`.\r\n */\r\nexport const CHAR: TokenType = \"CHAR\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `ESCAPED` `TokenType`.\r\n */\r\nexport const ESCAPED: TokenType = \"ESCAPED\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `END` `TokenType`.\r\n */\r\nexport const END: TokenType = \"END\";\r\n\r\n/**\r\n * @private\r\n * The reference to the semi colon (`;`) character.\r\n */\r\nexport const SEMI_COLON: TokenType = \";\";\r\n\r\n/**\r\n * @private\r\n * The reference to the colon (`:`) character.\r\n */\r\nexport const COLON: string = \":\";\r\n\r\n/**\r\n * @private\r\n * The reference to the left parenthesis (`(`) character.\r\n */\r\nexport const LEFT_PARENTHESIS: string = \"(\";\r\n\r\n/**\r\n * @private\r\n * The reference to the right parenthesis (`)`) character.\r\n */\r\nexport const RIGHT_PARENTHESIS: string = \")\";\r\n\r\n/**\r\n * @private\r\n * The reference to the escaped back slash (`\\\\`) character.\r\n */\r\nexport const ESC_BACK_SLASH: string = \"\\\\\";\r\n\r\n/**\r\n * @private\r\n * The reference to the carret (`^`) character.\r\n */\r\nexport const CARRET: string = \"^\";\r\n\r\n/**\r\n * @private\r\n * The reference to the carret (`$`) character.\r\n */\r\nexport const DOLLAR: string = \"$\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { Encode } from \"./model/encode\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst ESCAPE_REGEXP: RegExp = /([.+*?=^!:${}()[\\]|/\\\\])/g;\r\n\r\n/**\r\n * @private\r\n */\r\nconst ESCAPE_VALUE: string = \"\\\\$1\";\r\n\r\n/**\r\n * @private\r\n * Escape a regular expression string.\r\n * \r\n * @param str The regular expression string to escape.\r\n * @returns An escaped a regular expression string.\r\n */\r\nexport const escapeRegexpString: Encode = (str: string)=> {\r\n return str.replace(ESCAPE_REGEXP, ESCAPE_VALUE);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { I_FLAG } from \"./constants\";\r\n\r\n/**\r\n * @private\r\n * Get the flags for a regexp from the spcified options.\r\n * \r\n * @param options The options used to determine the flags for a regexp.\r\n * @returns The flags for a regexp depending on the spcified options.\r\n */\r\nexport const getFlags: (options: { sensitive?: boolean })=> string = (options: { sensitive?: boolean }): string=> {\r\n return options.sensitive ? EMPTY_STRING : I_FLAG;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { ASTERISK, PLUS, QUESTION_MARK } from \"./constants\";\r\nimport { DecodeKeyToString } from \"./model/decode-key-to-string\";\r\nimport { Encode } from \"./model/encode\";\r\nimport { escapeRegexpString } from \"./escape-to-regexp-string\";\r\nimport { Key } from \"./model/key\";\r\n\r\n/**\r\n * @private\r\n * Returns a function that converts a token into a regexp string.\r\n */\r\nexport const toKeyRegexp: (stringify: Encode, delimiter: string)=> DecodeKeyToString = (stringify: Encode, delimiter: string): DecodeKeyToString => {\r\n const segmentPattern: string = `[^${escapeRegexpString(delimiter)}]+?`;\r\n return (key: Key): string => {\r\n const prefix: string = key.prefix ? stringify(key.prefix) : EMPTY_STRING;\r\n const suffix: string = key.suffix ? stringify(key.suffix) : EMPTY_STRING;\r\n const modifier = key.modifier || EMPTY_STRING;\r\n if (key.name) {\r\n const pattern: string = key.pattern || segmentPattern;\r\n if (key.modifier === PLUS || key.modifier === ASTERISK) {\r\n const mod: string = key.modifier === ASTERISK ? QUESTION_MARK : EMPTY_STRING;\r\n const split: string = key.separator ? stringify(key.separator) : EMPTY_STRING;\r\n return `(?:${prefix}((?:${pattern})(?:${split}(?:${pattern}))*)${suffix})${mod}`;\r\n }\r\n return `(?:${prefix}(${pattern})${suffix})${modifier}`;\r\n }\r\n return `(?:${prefix}${suffix})${modifier}`;\r\n };\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { escapeRegexpString } from \"./escape-to-regexp-string\";\r\nimport { LooseReplacerProvider } from \"./model/loose-replacer-provider\";\r\n\r\n/**\r\n * @private\r\n * Escape and repeat loose characters for regular expressions.\r\n * \r\n * @param value The string expression to escape.\r\n * @param loose \r\n * @returns The escaped string transfromed from the original string expression.\r\n */\r\nexport const looseReplacer: LooseReplacerProvider = (value: string, loose: string): string => {\r\n return loose ? `${escapeRegexpString(value)}+` : escapeRegexpString(value);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { G_FLAG } from \"./constants\";\r\nimport { escapeRegexpString } from \"./escape-to-regexp-string\";\r\nimport { looseReplacer } from \"./loose-replacer\";\r\nimport { Encode } from \"./model/encode\";\r\nimport { NonDelimiterEncoderProvider } from \"./model/non-delimiter-encoder-provider\";\r\n\r\n/**\r\n * @private\r\n * Encode all non-delimiter characters using the encode function.\r\n */\r\nexport const toStringify: NonDelimiterEncoderProvider = (loose: boolean, delimiter: string): Encode => {\r\n if (!loose) return escapeRegexpString;\r\n const re: RegExp = new RegExp(`[^${escapeRegexpString(delimiter)}]+|(.)`, G_FLAG);\r\n return (value: string) => value.replace(re, looseReplacer);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING, STRING } from \"../../../../util\";\r\nimport { CARRET, DOLLAR } from \"./constants\";\r\nimport { Encode } from \"./model/encode\";\r\nimport { escapeRegexpString } from \"./escape-to-regexp-string\";\r\nimport { Key } from \"./model/key\";\r\nimport { getFlags } from \"./get-flags\";\r\nimport { PathToRegexpOptions } from \"./model/path-to-regexp-options\";\r\nimport { TokenData } from \"./token-data\";\r\nimport { DecodeKeyToString } from \"./model/decode-key-to-string\";\r\nimport { toKeyRegexp } from \"./to-key-regexp\";\r\nimport { toStringify } from \"./to-stringify\";\r\nimport { TokenDataRegExpFactory } from \"./model/token-data-regexp-factory\";\r\n\r\n/**\r\n * @Private\r\n * Expose a function for taking tokens and returning a RegExp.\r\n */\r\nexport const tokenDataToRegexp: TokenDataRegExpFactory = (data: TokenData, keys: Key[], options: PathToRegexpOptions): RegExp => {\r\n const {\r\n trailing = true,\r\n start = true,\r\n end = true,\r\n loose = true,\r\n } = options;\r\n const stringify: Encode = toStringify(loose, data.delimiter);\r\n const keyToRegexp: DecodeKeyToString = toKeyRegexp(stringify, data.delimiter);\r\n let pattern: string = start ? CARRET : EMPTY_STRING;\r\n \r\n for (const token of data.tokens as any) {\r\n if (typeof token === STRING) {\r\n pattern += stringify(token);\r\n } else {\r\n if (token.name) keys.push(token);\r\n pattern += keyToRegexp(token);\r\n }\r\n }\r\n\r\n if (trailing) pattern += `(?:${stringify(data.delimiter)})?`;\r\n pattern += end ? DOLLAR : `(?=${escapeRegexpString(data.delimiter)}|$)`;\r\n\r\n // URLs in general are case-sensitive (with the exception of machine names).\r\n // See https://www.w3.org/TR/WD-html40-970708/htmlweb.html\r\n // Note that default modifier is \"i\".\r\n return new RegExp(pattern, getFlags(options));\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { Token } from \"./model/token\";\r\n\r\n/**\r\n * @private\r\n * Tokenized path instance.\r\n */\r\nexport class TokenData {\r\n\r\n /**\r\n * @private\r\n * Creates a new `TokenData` instance.\r\n * \r\n * @param tokens A list of `Token` objects.\r\n * @param delimiter the string delimiter for this `TokenData` instance.\r\n */\r\n constructor(public readonly tokens: Token[],\r\n public readonly delimiter: string) {}\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { ASTERISK, CHAR, ESCAPED, PLUS, QUESTION_MARK } from \"./constants\";\r\nimport { LexToken } from \"./model/lex-token\";\r\n\r\n/**\r\n * @private\r\n */\r\nexport class Iter {\r\n\r\n /**\r\n * @private\r\n */\r\n private _index: number = 0;\r\n\r\n /**\r\n * @private \r\n */\r\n constructor(private _tokens: LexToken[]) {}\r\n\r\n /**\r\n * @private\r\n */\r\n public tryConsume(type: LexToken[\"type\"]): string | undefined {\r\n const token: LexToken = this.peek();\r\n if (token.type !== type) return;\r\n this._index++;\r\n return token.value;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public consume(type: LexToken[\"type\"]): string {\r\n const value: string | undefined = this.tryConsume(type);\r\n if (value !== undefined) return value;\r\n const { type: nextType, index } = this.peek();\r\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: https://git.new/pathToRegexpError`);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public text(): string {\r\n let result = EMPTY_STRING;\r\n let value: string | undefined;\r\n while ((value = this.tryConsume(CHAR) || this.tryConsume(ESCAPED))) {\r\n result += value;\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public modifier(): string {\r\n return this.tryConsume(QUESTION_MARK) || this.tryConsume(ASTERISK) || this.tryConsume(PLUS) || EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public peek(): LexToken {\r\n return this._tokens[this._index];\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { TokenType } from \"./token-type\";\r\n\r\n/**\r\n * @private\r\n * A markup interface for token types consumed by `Lexer` objects.\r\n */\r\nexport const SIMPLE_TOKENS: Record<string, TokenType> = {\r\n \"!\": \"!\",\r\n \"@\": \"@\",\r\n \";\": \";\",\r\n \"*\": \"*\",\r\n \"+\": \"+\",\r\n \"?\": \"?\",\r\n \"{\": \"{\",\r\n \"}\": \"}\",\r\n};\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { ESC_BACK_SLASH, CHAR, COLON, END, ESCAPED, LEFT_PARENTHESIS, NAME, PATTERN, QUESTION_MARK, RIGHT_PARENTHESIS } from \"./constants\";\r\nimport { Iter } from \"./iter\";\r\nimport { LexToken } from \"./model/lex-token\";\r\nimport { Lexer } from \"./model/lexer-type\";\r\nimport { SIMPLE_TOKENS } from \"./model/simple-tokens\";\r\nimport { TokenType } from \"./model/token-type\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst ID_CHAR: RegExp = /^\\p{XID_Continue}$/u;\r\n\r\n/**\r\n * @private\r\n * A lexer method that tokenizes input string.\r\n * \r\n * @param str The string expression to analyse.\r\n * @returns A new `Iter`object instance built from the specified input string.\r\n */\r\nexport const lexer: Lexer = (str: string): Iter => {\r\n const chars: string[] = [...str];\r\n const tokens: LexToken[] = [];\r\n let i: number = 0;\r\n\r\n while (i < chars.length) {\r\n const value: string = chars[i];\r\n const type: TokenType = SIMPLE_TOKENS[value];\r\n\r\n if (type) {\r\n tokens.push({ type, index: i++, value });\r\n continue;\r\n }\r\n\r\n if (value === ESC_BACK_SLASH) {\r\n tokens.push({ type: ESCAPED, index: i++, value: chars[i++] });\r\n continue;\r\n }\r\n\r\n if (value === COLON) {\r\n let name: string = EMPTY_STRING;\r\n\r\n while (ID_CHAR.test(chars[++i])) {\r\n name += chars[i];\r\n }\r\n\r\n if (!name) {\r\n throw new TypeError(`Missing parameter name at ${i}`);\r\n }\r\n\r\n tokens.push({ type: NAME, index: i, value: name });\r\n continue;\r\n }\r\n\r\n if (value === LEFT_PARENTHESIS) {\r\n const pos: number = i++;\r\n let count: number = 1;\r\n let pattern: string = EMPTY_STRING;\r\n\r\n if (chars[i] === QUESTION_MARK) {\r\n throw new TypeError(`Pattern cannot start with \"?\" at ${i}`);\r\n }\r\n\r\n while (i < chars.length) {\r\n if (chars[i] === ESC_BACK_SLASH) {\r\n pattern += chars[i++] + chars[i++];\r\n continue;\r\n }\r\n\r\n if (chars[i] === RIGHT_PARENTHESIS) {\r\n count--;\r\n if (count === 0) {\r\n i++;\r\n break;\r\n }\r\n } else if (chars[i] === LEFT_PARENTHESIS) {\r\n count++;\r\n if (chars[i + 1] !== QUESTION_MARK) {\r\n throw new TypeError(`Capturing groups are not allowed at ${i}`);\r\n }\r\n }\r\n\r\n pattern += chars[i++];\r\n }\r\n\r\n if (count) throw new TypeError(`Unbalanced pattern at ${pos}`);\r\n if (!pattern) throw new TypeError(`Missing pattern at ${pos}`);\r\n\r\n tokens.push({ type: PATTERN, index: i, value: pattern });\r\n continue;\r\n }\r\n\r\n tokens.push({ type: CHAR, index: i, value: chars[i++] });\r\n }\r\n\r\n tokens.push({ type: END, index: i, value: EMPTY_STRING });\r\n \r\n return new Iter(tokens);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { ASTERISK, RIGHT_CURLY_BRACE, DEFAULT_DELIMITER, END, NAME, LEFT_CURLY_BRACE, PATTERN, SEMI_COLON } from \"./constants\";\r\nimport { Iter } from \"./iter\";\r\nimport { ParseOptions } from \"./model/parse-options\";\r\nimport { Token } from \"./model/token\";\r\nimport { TokenData } from \"./token-data\";\r\nimport { lexer } from \"./lexer\";\r\nimport { Encode } from \"./model/encode\";\r\nimport { RouteStringTokenizer } from \"./model/route-string-tokenizer\";\r\nimport { LexToken } from \"./model/lex-token\";\r\n\r\n/**\r\n * @private\r\n * A NOOP `Endoder` function.\r\n * @param value The input string value.\r\n * @returns The input string value.\r\n */\r\nconst NOOP_VALUE: Encode = (value: string): string => value;\r\n\r\n/**\r\n * @private\r\n * Parse a string for the raw tokens.\r\n */\r\nexport const stringToTokenData: RouteStringTokenizer = (str: string, options: ParseOptions = {}): TokenData => {\r\n const {\r\n delimiter = DEFAULT_DELIMITER,\r\n encodePath = NOOP_VALUE,\r\n } = options;\r\n const tokens: Token[] = [];\r\n const it: Iter = lexer(str);\r\n let keyIndex: number = 0;\r\n\r\n do {\r\n const path: string = it.text();\r\n if (path) tokens.push(encodePath(path));\r\n const name: string | undefined = it.tryConsume(NAME);\r\n const pattern: string | undefined = it.tryConsume(PATTERN);\r\n if (name || pattern) {\r\n tokens.push({\r\n name: name || String(keyIndex++),\r\n pattern,\r\n });\r\n const next: LexToken = it.peek();\r\n if (next.type === ASTERISK) {\r\n throw new TypeError(\r\n `Unexpected * at ${next.index}, you probably want \\`/*\\` or \\`{/:foo}*\\`: https://git.new/pathToRegexpError`,\r\n );\r\n }\r\n continue;\r\n }\r\n const asterisk = it.tryConsume(ASTERISK);\r\n if (asterisk) {\r\n tokens.push({\r\n name: String(keyIndex++),\r\n pattern: `[^${escape(delimiter)}]*`,\r\n modifier: ASTERISK,\r\n separator: delimiter,\r\n });\r\n continue;\r\n }\r\n\r\n const open: string | undefined = it.tryConsume(LEFT_CURLY_BRACE);\r\n if (open) {\r\n const prefix: string = it.text();\r\n const name: string | undefined = it.tryConsume(NAME);\r\n const pattern: string | undefined = it.tryConsume(PATTERN);\r\n const suffix: string = it.text();\r\n const separator: string | undefined = it.tryConsume(SEMI_COLON) ? it.text() : prefix + suffix;\r\n\r\n it.consume(RIGHT_CURLY_BRACE);\r\n\r\n const modifier = it.modifier();\r\n\r\n tokens.push({\r\n name: name || (pattern ? String(keyIndex++) : EMPTY_STRING),\r\n prefix: encodePath(prefix),\r\n suffix: encodePath(suffix),\r\n pattern,\r\n modifier,\r\n separator,\r\n });\r\n continue;\r\n }\r\n\r\n it.consume(END);\r\n break;\r\n } while (true);\r\n\r\n return new TokenData(tokens, delimiter);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Destroyable, HttpMockProductionPolicy } from \"../model\";\r\nimport { HttpMockingFrameworkConfig } from \"../model/business/mock/http/config/http-mocking-framework-config\";\r\nimport { HttpMockServiceError } from \"../core\";\r\nimport { HTTPMethodRef } from \"../framework/mock/http/util/http-method-ref.enum\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst POLICY_WARNING: string = \"HTTP Mocking Framework is running in production mode\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst POLICY_ERROR: HttpMockServiceError = new HttpMockServiceError(POLICY_WARNING + \": remove all framework references or change the 'productionPolicy' property value of the HTTP_MOCKING_FRAMEWORK_CONFIG provider.\");\r\n\r\n/**\r\n * @private\r\n */\r\nconst FLAG_ID: string = \"http-mocking-framework-flag\";\r\n\r\n/**\r\n * The object that manages the HTTP Mocking Framework options.\r\n */\r\nexport class HttpMockingFrameworkConfigManager implements Destroyable {\r\n\r\n /**\r\n * @private\r\n */\r\n private _document!: Document;\r\n \r\n /**\r\n * @private\r\n */\r\n private _config?: HttpMockingFrameworkConfig;\r\n \r\n /**\r\n * @private\r\n */\r\n private readonly _isProdMode: boolean;\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _prodPolicy: HttpMockProductionPolicy;\r\n\r\n /**\r\n * Returns the value specified by the `disableVisualFlag` of the `HttpMockingFrameworkConfig` provider,\r\n * or `false` when no provider is defined.\r\n */\r\n public get disableVisualFlag(): boolean {\r\n const cfg: HttpMockingFrameworkConfig | undefined = this._config;\r\n return cfg && cfg.disableVisualFlag ? cfg.disableVisualFlag : false;\r\n }\r\n\r\n /**\r\n * Returns the value specified by the `productionPolicy` of the `HttpMockingFrameworkConfig` provider,\r\n * or `HttpMockProductionPolicy.ERROR` when no provider is defined.\r\n */\r\n public get productionPolicy(): HttpMockProductionPolicy {\r\n return this._prodPolicy;\r\n }\r\n\r\n /**\r\n * @private\r\n * Creates and Initializes the manager with the specified config.\r\n * \r\n * @param document The reference to the `Document` object, injected by Angular.\r\n * @param isDevMode Indicates wheter Angular runs in development mode (`true`), or in production mode (`false`).\r\n * @param config The `HttpMockingFrameworkConfi` provider.\r\n */\r\n constructor(document: Document, isDevMode: boolean, config?: HttpMockingFrameworkConfig) {\r\n this._isProdMode = !isDevMode;\r\n this._document = document;\r\n this._config = config;\r\n this._prodPolicy = config && config.productionPolicy !== undefined ? config.productionPolicy : HttpMockProductionPolicy.ERROR;\r\n this.checkPolicy();\r\n this.createVisualFlag(document, config);\r\n }\r\n \r\n /**\r\n * Apply a strategy depending on the current production policy and environment.\r\n * @param route An optional parameter used when the methhod is associated to a HTTP request.\r\n * Must be the representation of the intercepted route path.\r\n * @param method An optional parameter used when the methhod is associated to a HTTP request.\r\n * Must be the representation of the intercepted HTTP method.\r\n */\r\n public checkPolicy(route?: string, method: HTTPMethodRef | undefined = undefined): void {\r\n if (!this._isProdMode) return;\r\n if (this._prodPolicy === HttpMockProductionPolicy.ERROR) throw POLICY_ERROR;\r\n if (this._prodPolicy === HttpMockProductionPolicy.SILENT) return;\r\n const routeMsg: string = route ? `: intercepted request=[path=${route}, method=${method?.toUpperCase()}]` : \".\";\r\n console.warn(POLICY_WARNING + routeMsg);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public destroy(): void {\r\n const cfg: HttpMockingFrameworkConfig | undefined = this._config;\r\n const noFlag: boolean = (cfg && cfg.disableVisualFlag) === true;\r\n this._config = null as any;\r\n if (noFlag) return;\r\n const doc: Document = this._document;\r\n const flag: HTMLElement | null = doc.getElementById(FLAG_ID);\r\n if (flag) {\r\n flag.onmouseover = flag.onmouseout =null;\r\n doc.body.removeChild(flag);\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private createVisualFlag(document: Document, config?: HttpMockingFrameworkConfig): void {\r\n if (config && config.disableVisualFlag) return;\r\n const flag: HTMLDivElement = document.createElement(\"div\");\r\n const text: Text = document.createTextNode(\"HTTP Mocking Framwork\");\r\n const style: CSSStyleDeclaration = flag.style;\r\n const body = document.body;\r\n flag.setAttribute(\"id\", FLAG_ID);\r\n style.backgroundColor = \"red\";\r\n style.color = \"white\";\r\n style.textAlign = \"center\";\r\n style.position = \"fixed\";\r\n style.width = \"100%\";\r\n style.overflow = \"hidden\";\r\n style.height = \"26px\";\r\n style.transition = \"all 0.25s ease-in-out\";\r\n style.zIndex = \"10000\";\r\n style.opacity = \"1\";\r\n style.userSelect = \"none\";\r\n flag.onmouseover = ()=> {\r\n style.height = \"26px\";\r\n style.opacity = \"1\";\r\n };\r\n flag.onmouseout = ()=> {\r\n style.height = \"6px\";\r\n style.opacity = \"0.35\";\r\n };\r\n flag.appendChild(text);\r\n body.insertBefore(flag, body.firstChild);\r\n setTimeout(()=> {\r\n style.height = \"4px\";\r\n style.opacity = \"0.35\";\r\n }, 4000);\r\n }\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Inject, Injectable, isDevMode, OnDestroy, Optional } from '@angular/core';\r\nimport { HttpMockInterceptor, HttpMockConfig, HttpMethodMock, HttpMockEndpoint, HTTP_MOCKING_FRAMEWORK_CONFIG, HttpMockProductionPolicy } from '../../../business';\r\nimport { HTTPMethodRef } from '../../../../framework/mock/http/util/http-method-ref.enum';\r\nimport { tokenDataToRegexp } from '../../../../framework/mock/http/path-to-regexp/token-data-to-regexp';\r\nimport { RouteMockConfig } from '../../../../framework/mock/http/config/route-mock-config';\r\nimport { Key } from '../../../../framework/mock/http/path-to-regexp/model/key';\r\nimport { stringToTokenData } from '../../../../framework/mock/http/path-to-regexp/string-to-token-data';\r\nimport { DEFAULT_DELIMITER } from '../../../../framework/mock/http/path-to-regexp/constants';\r\nimport { Uuid } from '../../../../util';\r\nimport { TokenData } from '../../../../framework/mock/http/path-to-regexp/token-data';\r\nimport { HttpMockServiceError } from '../../../../core/error';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { HttpMockingFrameworkConfigManager } from '../../../../util/http-mocking-framework-config.manager';\r\nimport { HttpMockingFrameworkConfig } from '../../../business/mock/http/config/http-mocking-framework-config';\r\nimport { IdentifiableComponent } from '../../../../core';\r\n\r\n/**\r\n * @private\r\n * Reference to the original type for this class.\r\n */\r\nexport const HTTP_MOCK_SERVICE: string = \"HttpMockService\";\r\n\r\n/**\r\n * @private\r\n * An internal utility for storring references to endpoint mock configs.\r\n */\r\ninterface HttpMockEndpointStorage {\r\n methodMock: HttpMethodMock;\r\n regexp: RegExp;\r\n keys: Key[];\r\n configId: string;\r\n}\r\n\r\n/**\r\n * The `HttpMockService` class provides the API for managing HTTP mock configuration objects.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpMockService extends IdentifiableComponent implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n * Ensures that class type is still accessible after TypeScript compilation.\r\n */\r\n public readonly type: string = HTTP_MOCK_SERVICE;\r\n\r\n /**\r\n * @private\r\n * The list of IDs associated with each config object.\r\n */\r\n private _configIdList: Uuid[] = [];\r\n\r\n /**\r\n * @private\r\n * Stores the complete collection of mocking behaviors for each registered config.\r\n */\r\n private _configList: Map<string, Map<string, HttpMockEndpointStorage[]>> = new Map<string, Map<string, HttpMockEndpointStorage[]>>();\r\n\r\n /**\r\n * @private\r\n * The reference to the current app URL origin.\r\n */\r\n private readonly APP_ORIGIN: string = window.location.origin;\r\n\r\n /**\r\n * @private\r\n * The reference to the èHttpMockingFrameworkConfigManager` instance.\r\n */\r\n private readonly _configMmanager: HttpMockingFrameworkConfigManager;\r\n\r\n /**\r\n * Returns the vreference to the `HttpMockingFrameworkConfigManager` instance,\r\n * associated with this service.\r\n */\r\n public get configMmanager(): HttpMockingFrameworkConfigManager {\r\n return this._configMmanager;\r\n }\r\n\r\n /**\r\n * @private\r\n * Creates a new `HttpMockService` instance.\r\n * \r\n * @param _document The reference to the app document.\r\n * @param config The optional config provider for the HTTP Mocking Framework.\r\n */\r\n constructor(@Inject(DOCUMENT) document: Document, @Optional() @Inject(HTTP_MOCKING_FRAMEWORK_CONFIG) config: HttpMockingFrameworkConfig) {\r\n super(HTTP_MOCK_SERVICE);\r\n this._configMmanager = new HttpMockingFrameworkConfigManager(document, isDevMode(), config);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this._configMmanager.checkPolicy();\r\n this._configMmanager.destroy();\r\n }\r\n\r\n /**\r\n * Adds the specified `HttpMockConfig` object to this `HttpMockService` instance.\r\n * \r\n * @param config The `HttpMockConfig` object to add to this `HttpMockService` instance.\r\n * @Returns The `Uuid` instance associated with the added `HttpMockConfig` object.\r\n */\r\n public addConfig(config: HttpMockConfig): Uuid {\r\n const origin: string = config.origin || this.APP_ORIGIN;\r\n this._configMmanager.checkPolicy();\r\n this.checkOrigin(origin);\r\n let id: Uuid | undefined = config.id;\r\n if (!id) {\r\n id = Uuid.build();\r\n config.id = id;\r\n } else {\r\n if (this.hasRegisteredConfig(id)) throw new HttpMockServiceError(`A config object has already been registered with the id: [\"${id.toString()}\"].`) ;\r\n }\r\n this._configIdList.push(id);\r\n const uuid: string = id.toString();\r\n config.interceptors.forEach((interceptor: HttpMockInterceptor) => this.extractConfig(interceptor, origin, uuid) );\r\n return id;\r\n }\r\n\r\n /**\r\n * Returns the current app URL origin.\r\n * \r\n * @returns A string that represents the current app URL origin.\r\n */\r\n public getAppOrigin(): string {\r\n return this.APP_ORIGIN;\r\n }\r\n\r\n /**\r\n * Removes the configuration registered with the specified `uuid` from this `HttpMockService` instance.\r\n * \r\n * @param uuid The UUID of the configuration to remove.\r\n */\r\n public removeConfig(uuid: Uuid): void {\r\n this._configMmanager.checkPolicy();\r\n if (!this.hasRegisteredConfig(uuid)) return;\r\n const configId: string = uuid.toString();\r\n this._configList.forEach((value: Map<string, HttpMockEndpointStorage[]>, key: string) => {\r\n this.deleteConfigById(value, configId);\r\n if (value.size === 0) this._configList.delete(key);\r\n });\r\n this._configIdList.splice(this._configIdList.indexOf(uuid), 1);\r\n }\r\n\r\n /**\r\n * Removes all registred configurations from this `HttpMockService` instance.\r\n */\r\n public clearConfigs(): void {\r\n this._configMmanager.checkPolicy();\r\n this._configList.clear();\r\n this._configIdList.length = 0;\r\n }\r\n /**\r\n * Returns a boolean value that indicates whether a config with the specified UUID has been registered\r\n * (`true`), or not (`false`).\r\n * \r\n * @param uuid The UUID of the config to check.\r\n * @returns `true` whether a config with the specified UUID has been registered; `false` otherwise.\r\n */\r\n public hasRegisteredConfig(uuid: Uuid): boolean {\r\n return this._configIdList.indexOf(uuid) !== -1;\r\n }\r\n\r\n /**\r\n * Returns the `RouteMockConfig` object associated with the specified `URL` instance and HTTP method.\r\n * \r\n * @param url The `URL` instance for which to find a route config.\r\n * @param method The HTTP method for which to find a route config.\r\n * @returns The `RouteMockConfig` object associated with the specified `URL` instance and HTTP method whether it exists;\r\n * `undefined` otherwise.\r\n */\r\n public getRouteConfig(url: URL, method: HTTPMethodRef): RouteMockConfig | undefined {\r\n const urlConfigList: Map<string, HttpMockEndpointStorage[]> | undefined = this._configList.get(url.origin);\r\n const route: string = url.pathname;\r\n this._configMmanager.checkPolicy(route, method);\r\n let result: RouteMockConfig | undefined = undefined;\r\n if (!urlConfigList) return result;\r\n const methodList: HttpMockEndpointStorage[] | undefined = urlConfigList.get(method);\r\n if (!methodList) return result;\r\n let len: number = methodList.length - 1;\r\n while (len >= 0 ) {\r\n const methodMap: HttpMockEndpointStorage = methodList[len];\r\n const regexp: RegExp = methodMap.regexp;\r\n if (regexp.test(route)) {\r\n result = {\r\n methodConfig: methodMap.methodMock,\r\n parameters: this.buildParameters(regexp, methodMap.keys, route),\r\n searchParams: url.searchParams\r\n };\r\n break;\r\n }\r\n len--;\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private buildParameters(regexp: RegExp, keys: Key[], route: string): any {\r\n const execResult: RegExpExecArray | null = regexp.exec(route);\r\n if (!execResult) return null;\r\n const params: any = {};\r\n let len: number = execResult.length - 1;\r\n let i: number = 1;\r\n for (; i <= len; ++i) {\r\n const key: Key = keys[i - 1];\r\n params[key.name] = execResult[i];\r\n }\r\n return params;\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private extractConfig(interceptor: HttpMockInterceptor, globalOrigin: string, configId: string): void {\r\n const endpoints: HttpMockEndpoint[] = interceptor.endpoints;\r\n let origin: string | undefined = interceptor.origin;\r\n if (origin) this.checkOrigin(origin);\r\n else origin = globalOrigin;\r\n if (!this._configList.has(origin)) this._configList.set(origin, new Map<string, HttpMockEndpointStorage[]>());\r\n endpoints.forEach((endpoint: HttpMockEndpoint) => {\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.GET, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.POST, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.PUT, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.DELETE, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.HEAD, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.OPTIONS, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.PATCH, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.CONNECT, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.TRACE, configId);\r\n });\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private extractEndpointConfig(origin: string, endpoint: HttpMockEndpoint, method: HTTPMethodRef, configId: string): void {\r\n const ep: any = endpoint;\r\n if (!ep[method as any]) return;\r\n const originConfig: Map<string, HttpMockEndpointStorage[]> = this._configList.get(origin) as any;\r\n const route: string = endpoint.route;\r\n const data: TokenData = stringToTokenData(route);\r\n const keys: Key[] = [];\r\n const regexp: RegExp = tokenDataToRegexp(data, keys, {});\r\n if (!originConfig.has(method)) originConfig.set(method, []);\r\n const methodConfig: HttpMockEndpointStorage[] = originConfig.get(method) as any;\r\n methodConfig.push({\r\n regexp: regexp,\r\n keys: keys,\r\n methodMock: ep[method],\r\n configId: configId\r\n });\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private checkOrigin(origin: string): void {\r\n if (origin.endsWith(DEFAULT_DELIMITER)) throw new SyntaxError(`Origin must not end with a / character: [\"${origin}\"].`);\r\n }\r\n \r\n /**\r\n * @rivate \r\n */\r\n private deleteConfigById(storageMap: Map<string, HttpMockEndpointStorage[]>, configId: string): void {\r\n storageMap.forEach((storage: HttpMockEndpointStorage[], key: string) => {\r\n const cleanedConfig: HttpMockEndpointStorage[] = this.cleanConfig(storage, configId);\r\n if (cleanedConfig.length) storageMap.set(key, cleanedConfig);\r\n else storageMap.delete(key);\r\n });\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private cleanConfig(storage: HttpMockEndpointStorage[], configId: string): HttpMockEndpointStorage[] {\r\n return storage.filter((value: HttpMockEndpointStorage)=> value.configId !== configId);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogLevel } from \"../../../model\";\r\n\r\n/**\r\n * @private\r\n * \r\n * The default implementation of the `Log` interface.\r\n */\r\nexport class LogImpl implements Log {\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly caller: string;\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly message: string;\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly level: LogLevel;\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly timestamp: number;\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly metadata: any;\r\n\r\n /**\r\n * @private\r\n * Creates a new `LogImpl` instance.\r\n * \r\n * @param caller Ahuman readable reference for the invoker associated with this log.\r\n * @param message The message associated with this log.\r\n * @param level The criticality level of this log.\r\n * @param metadata Optional metada associated with this log.\r\n */\r\n constructor(caller: string, message: string, level: LogLevel, metadata?: any) {\r\n this.caller = caller;\r\n this.message = message;\r\n this.level = level;\r\n this.metadata = metadata;\r\n this.timestamp = Date.now();\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogConnector } from \"../../../model\";\r\n\r\n/**\r\n * The default ATX log connector. Allows to process logs silently.\r\n * This can be useful for removing logs from production environments, if needed.\r\n */\r\nexport class DefaultLogConnector implements LogConnector {\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public destroy(): void {}\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public init(logList: Log[]): void {}\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public sendLog(log: Log): void { }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public clearLogs(): void { }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public copyLogs(): void { }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogConnector, LogLevel } from \"../../../model\";\r\n\r\n/**\r\n * An implementation of the `LogConnector` interface that sends logs to the JavaScript\r\n * native `console` object.\r\n */\r\nexport class ConsoleLogConnector implements LogConnector {\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public destroy(): void {}\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public init(logList: Log[]): void {\r\n logList.forEach(log=> this.sendLog(log));\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public sendLog(log: Log): void {\r\n const level: LogLevel = log.level;\r\n if (level === LogLevel.INFO) return console.info(log);\r\n if (level === LogLevel.CONFIG) return console.log(log);\r\n if (level === LogLevel.ERROR) return console.error(log) ;\r\n console.warn(log);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public clearLogs(): void {\r\n console.clear();\r\n }\r\n\r\n /**\r\n * Not supported.\r\n */\r\n public copyLogs(): void {}\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogConnector, LogLevel } from \"../../../model\";\r\nimport { EMPTY_STRING } from \"../../../util\";\r\nimport { LogUtil } from \"../util\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst DIV: string = \"div\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst SPAN: string = \"span\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_INFO: string = \"atx-log\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_CONFIG: string = \"atx-config-log\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_ERROR: string = \"atx-error-log\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_WARN: string = \"atx-warn-log\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_TIME: string = \"atx-log-time\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_LEVEL: string = \"atx-log-level\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_CALLER: string = \"atx-log-caller\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_MSG: string = \"atx-log-message\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_METADA: string = \"atx-log-metadata\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst STYLE_ID: string = 'atx-log-container-style';\r\n\r\n/**\r\n * An implementation of the `LogConnector` interface that processes logs as HTML renderable elements.\r\n */\r\nexport class HtmlLogConnector implements LogConnector {\r\n\r\n /**\r\n * @private\r\n */\r\n private _logs: Log[] = [];\r\n \r\n /**\r\n * @private\r\n */\r\n private _tgt: HTMLElement;\r\n\r\n /**\r\n * Creates a new `HtmlLogConnector` instance.\r\n * \r\n * @param target The HTML element where the logs will be rendered.\r\n * @param injectStyle Indicates whether the ATX default HTML styles are injected into the current document (`true`), or not (`false`).\r\n */\r\n constructor(target: HTMLElement, injectStyle: boolean = true) {\r\n this._tgt = target;\r\n if (injectStyle) this.injectStyle()\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public init(logList: Log[]): void {\r\n const len: number = logList.length - 1;\r\n let i: number = 0;\r\n for (; i <= len; ++i) this.sendLog(logList[i]);\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public sendLog(log: Log): void {\r\n this._logs.push(log);\r\n this._tgt.appendChild(this.buildLog(log));\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public destroy(): void {\r\n this._tgt = null as any;\r\n this._logs.length = 0;\r\n this._logs = null as any;\r\n this.deleteStyle();\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public clearLogs(): void {\r\n this._logs.length = 0;\r\n this._tgt.innerHTML = EMPTY_STRING;\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public copyLogs(): void {\r\n const logs: string = LogUtil.logListToString(this._logs);\r\n navigator.clipboard.writeText(logs);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private buildLog(log: Log): HTMLElement {\r\n const d: HTMLElement = document.createElement(DIV);\r\n d.classList.add(this.getCssClassName(log.level));\r\n d.appendChild(\r\n this.getSpan(`[${LogUtil.dateToHHMMSS(log.timestamp)}]`, S_LOG_TIME)\r\n );\r\n d.appendChild(\r\n this.getSpan(`[${LogUtil.getLevelString(log.level)}]`, S_LOG_LEVEL)\r\n );\r\n d.appendChild(\r\n this.getSpan(`[${log.caller}]`, S_LOG_CALLER)\r\n );\r\n d.appendChild(\r\n this.getSpan(`[${log.message}]`, S_LOG_MSG)\r\n );\r\n d.appendChild(\r\n this.getSpan(LogUtil.metadataToString(log.metadata), S_LOG_METADA)\r\n );\r\n return d;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getCssClassName(level: LogLevel) : string {\r\n if (level === LogLevel.INFO) return S_LOG_INFO;\r\n if (level === LogLevel.CONFIG) return S_LOG_CONFIG;\r\n if (level === LogLevel.ERROR) return S_LOG_ERROR;\r\n return S_WARN;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getSpan(value: any, style: string | null = null): HTMLElement {\r\n const s: HTMLElement = document.createElement(SPAN);\r\n if(style) s.classList.add(style);\r\n s.innerText = value;\r\n return s;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private injectStyle() {\r\n const style: HTMLStyleElement = document.createElement('style');\r\n style.id = STYLE_ID;\r\n style.innerHTML = \".atx-log-container{width:100%;background:black;font-family:monospace;font-size:14px;padding:10px 12px}.atx-log,.atx-config-log{color:white}.atx-error-log{color:red}.atx-warn-log{color:gold}.atx-log-metadata{color:#469afa}\";\r\n this._tgt.classList.add(\"atx-log-container\");\r\n this.getHead().appendChild(style);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private deleteStyle(): void {\r\n const style: HTMLElement | null = document.getElementById(STYLE_ID);\r\n if (style) this.getHead().removeChild(style);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getHead(): HTMLHeadElement {\r\n return document.getElementsByTagName('head')[0];\r\n }\r\n}","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Log, LogConnector, Logger, TransactionalLogger, LogLevel } from \"../../../model\";\nimport { DefaultLogConnector } from \"../connector\";\nimport { LogBuilder } from \"../util\";\n\n/**\n * A convenient immutable instance of the `DefaultLogConnector` class.\n */\nexport const DEFAULT_LOG_CONNECTOR: LogConnector = new DefaultLogConnector();\n\n/**\n * The base class for all `Logger` objects.\n */\nexport abstract class AbstractLogger implements Logger, TransactionalLogger {\n\n /**\n * @inheritdoc\n */\n public minLogLevel: LogLevel = LogLevel.INFO;\n\n /**\n * The list of logs sent to this logger.\n */\n protected logs: Log[] = [];\n\n /**\n * The reference to the log connector associated with this logger.\n */\n protected logConnector: LogConnector = DEFAULT_LOG_CONNECTOR;\n\n /**\n * @inheritdoc\n */\n public setLogConnector(value: LogConnector | null): void {\n this.logConnector = value || DEFAULT_LOG_CONNECTOR;\n this.logConnector.init(this.logs);\n }\n \n /**\n * @inheritdoc\n */\n public getLogConnector(): LogConnector {\n return this.logConnector;\n }\n\n /**\n * @inheritdoc\n */\n public getLogs(): Log[] {\n return this.logs;\n }\n\n /**\n * @inheritdoc\n */\n public info(caller: string | any, msg: string, metadata?: any): void {\n this.addLog(caller, msg, LogLevel.INFO, metadata);\n }\n\n /**\n * @inheritdoc\n */\n public config(caller: string | any, msg: string, metadata?: any): void {\n this.addLog(caller, msg, LogLevel.CONFIG, metadata);\n }\n\n /**\n * @inheritdoc\n */\n public error(caller: string | any, msg: string, metadata?: any): void {\n this.addLog(caller, msg, LogLevel.ERROR, metadata);\n }\n \n /**\n * @inheritdoc\n */\n public warn(caller: string | any, msg: string, metadata?: any): void {\n this.addLog(caller, msg, LogLevel.WARNING, metadata);\n }\n\n /**\n * @inheritdoc\n */\n public destroy(): void {\n this.logConnector = null as any;\n this.clearLogs();\n }\n\n /**\n * @inheritdoc\n */\n public clearLogs(): void {\n this.logs.length = 0;\n }\n\n /**\n * @private\n */\n private addLog(caller: string | any, msg: string, level: LogLevel, metadata?: any): void {\n if (level < this.minLogLevel) return;\n const log: Log = LogBuilder.build(caller, msg, level, metadata);\n this.logs.push(log);\n this.logConnector.sendLog(log);\n }\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogLevel } from \"../../../model\";\r\nimport { LogImpl } from \"../impl\";\r\n\r\n/**\r\n * A static builder that creates new `Log` objects.\r\n */\r\nexport class LogBuilder {\r\n\r\n /**\r\n * Builds and returns a new `Log` object initialized with the specified parameters.\r\n * \r\n * @param caller The reference to the object that sends the new log.\r\n * @param message The message of the new log.\r\n * @param level The level of the new log.\r\n * @param metadata The optional metadata associated with the new log.\r\n * \r\n * @returns A new `Log` object.\r\n */\r\n public static build(caller: string, message: string, level: LogLevel = LogLevel.INFO, metadata?: any): Log {\r\n return new LogImpl(caller, message, level, metadata);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A convenient string used to identify logs of LogLevel.INFO.\r\n */\r\nexport const LOG_INFO_STRING: string = \"INFO\";\r\n\r\n/**\r\n * A convenient string used to identify logs of LogLevel.CONFIG.\r\n */\r\nexport const LOG_CONFIG_STRING: string = \"CONFIG\";\r\n\r\n/**\r\n * A convenient string used to identify logs of LogLevel.WARNING.\r\n */\r\nexport const LOG_WARNING_STRING: string = \"WARNING\";\r\n\r\n/**\r\n * A convenient string used to identify logs of LogLevel.ERROR.\r\n */\r\nexport const LOG_ERROR_STRING: string = \"ERROR\";","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { formatDate } from \"@angular/common\";\r\nimport { Log, LogLevel} from \"../../../model\";\r\nimport { EMPTY_STRING, OBJECT, STRING } from \"../../../util\";\r\nimport { LOG_CONFIG_STRING, LOG_ERROR_STRING, LOG_INFO_STRING, LOG_WARNING_STRING } from \"./log.constant\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst TS_FMT: string = \"hh:mm:ss\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst SEPARATOR: string = \", \";\r\n\r\n/**\r\n * @private\r\n */\r\nconst R_BRACKET: string = \"[\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst L_BRACKET: string = \"]\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst LOCALE: string = \"en-us\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst getStringEnd: Function = (cusror: number, size: number) => {\r\n return cusror !== size ? SEPARATOR : EMPTY_STRING;\r\n}\r\n\r\n/**\r\n * A convenient utility class for formatting logs.\r\n */\r\nexport class LogUtil {\r\n\r\n /**\r\n * Turns the specified log list into a human redeable string.\r\n * \r\n * @param logList The list of logs to format.\r\n * @returns The formatted log list.\r\n */\r\n public static logListToString(logList: Log[]): string {\r\n const len: number = logList.length - 1,\r\n getLevelString = LogUtil.getLevelString;\r\n let logs: string = EMPTY_STRING,\r\n i: number = 0,\r\n levelTxt: string = EMPTY_STRING;\r\n for(; i <= len; ++i) {\r\n const log: Log = logList[i];\r\n logs += `[${LogUtil.dateToHHMMSS(log.timestamp)}][${getLevelString(log.level)}][${log.caller}][${log.message}]${LogUtil.metadataToString(log.metadata)}\\n`;\r\n }\r\n return logs;\r\n }\r\n\r\n /**\r\n * Turns the specified log level into a human redeable string.\r\n * \r\n * @param level The log level to format.\r\n * @returns The formatted log level.\r\n */\r\n public static getLevelString(level: LogLevel): string {\r\n if (level === LogLevel.INFO) return LOG_INFO_STRING;\r\n if (level === LogLevel.CONFIG) return LOG_CONFIG_STRING;\r\n if (level === LogLevel.WARNING) return LOG_WARNING_STRING;\r\n if (level === LogLevel.ERROR) return LOG_ERROR_STRING;\r\n return EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Return a string that represents the specified metadata object.\r\n * \r\n * @param obj The metadata object to format.\r\n * @returns A string that represents the specified metadata object.\r\n */\r\n public static metadataToString(obj: any): string {\r\n let result: string = EMPTY_STRING;\r\n if (!obj) return result;\r\n if (Array.isArray(obj)) return LogUtil.formatArray(obj);\r\n const keys: string[] = Object.keys(obj),\r\n len: number = keys.length - 1;\r\n let i: number = 0;\r\n for(; i <= len; ++i) {\r\n const key: string = keys[i];\r\n const value: any = obj[key];\r\n if (value === null) result += `${key}=null${getStringEnd(i, len)}`;\r\n else if (value === undefined) result += `${key}=undefined${getStringEnd(i, len)}`;\r\n else if (typeof value === STRING) result += `${key}=\"${value}\"${getStringEnd(i, len)}`;\r\n else if (Array.isArray(value)) result += `${key}=${LogUtil.formatArray(value)}${getStringEnd(i, len)}`;\r\n else if (typeof value === OBJECT) result += `${key}=${LogUtil.metadataToString(value)}${getStringEnd(i, len)}`;\r\n else result += `${key}=${value}${getStringEnd(i, len)}`;\r\n };\r\n if(result.endsWith(SEPARATOR)) {\r\n result = result.slice(0, - 2);\r\n }\r\n return result !== EMPTY_STRING ? R_BRACKET + result + L_BRACKET : result;\r\n }\r\n \r\n /**\r\n * Returns a string that represents the specified timestamp under the form of `\"hh:mm:ss\"`.\r\n * \r\n * @param timestamp The timestamp to format.\r\n * @returns A string that represents the specified timestamp under the form of `\"hh:mm:ss\"`.\r\n */\r\n public static dateToHHMMSS(timestamp: number): string {\r\n return formatDate(timestamp, TS_FMT, LOCALE);\r\n }\r\n \r\n /**\r\n * Returns a string that represents the specified array.\r\n * \r\n * @param array The array to format.\r\n * @returns A tring that represents the specified array.\r\n */\r\n private static formatArray(array: any[]): string {\r\n const len: number = array.length - 1;\r\n let i: number = 0,\r\n result: string = EMPTY_STRING;\r\n for(; i <= len; ++i) {\r\n const value: any = array[i];\r\n if (typeof value === STRING) result += `\"${value}\"${getStringEnd(i, len)}`;\r\n else if (Array.isArray(value)) result += `${LogUtil.formatArray(value)}${getStringEnd(i, len)}`;\r\n else if (typeof value === OBJECT) result += `${LogUtil.metadataToString(value)}${getStringEnd(i, len)}`;\r\n else result += `${value}${getStringEnd(i, len)}`;\r\n }\r\n return `[${result}]`;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AbstractLogger } from \"../../../logging\";\r\n\r\n/**\r\n * @private\r\n * The `Logger` implementation used by the `HttpMockLoggingService` class to manage logs.\r\n */\r\nexport class HttpMockLogger extends AbstractLogger {}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A utility enum that stores constants used by the `HttpMockLoggingService` to create log messages.\r\n */\r\nexport enum HttpMockLoggingConstant {\r\n \r\n /**\r\n * @private\r\n * The \"caller\" reference for all logs of the HTTP Mocking Framework.\r\n */\r\n CALLER = \"HTTP Mocking Framework\",\r\n \r\n /**\r\n * @private\r\n * The \"message\" reference for all valid logs of the HTTP Mocking Framework.\r\n */\r\n RESPONSE_MESSAGE = \"HTTP response\",\r\n\r\n /**\r\n * @private\r\n * The \"message\" reference for all error logs of the HTTP Mocking Framework.\r\n */\r\n ERROR_MESSAGE = \"HTTP error\",\r\n\r\n /**\r\n * @private\r\n * The \"message\" reference for all prefetch logs of the HTTP Mocking Framework.\r\n */\r\n CONFIG_MESSAGE = \"HTTP prefetch\"\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { HttpMockLogger } from \"../../../../../framework/mock/http/logging/http-mock-logger\";\r\nimport { TransactionalLogger, HttpMockLoggingMetadata, LogConnector, Log, HttpMockLoggingPrefetchMetadata } from \"../../../../business\";\r\nimport { HttpMockLoggingConstant } from \"../../../../business/logging/http-mock-logging-constant.enum\";\r\n\r\n/**\r\n * @private\r\n * \r\n * The utility service that manages the HTTP Mocking Framework logs.\r\n */\r\n@Injectable({\r\n providedIn: 'platform'\r\n})\r\nexport class HttpMockLoggingService implements TransactionalLogger, OnDestroy {\r\n\r\n /**\r\n * Returns the number of logs currently processed by this logger.\r\n */\r\n public get size(): number {\r\n return this._logger.getLogs().length;\r\n }\r\n\r\n /**\r\n * The `HttpMockLogger` instance encapsulated by this service.\r\n */\r\n private _logger: HttpMockLogger;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor() {\r\n this._logger = new HttpMockLogger();\r\n }\r\n\r\n /**\r\n * Processes information logs with the specified metadata.\r\n * \r\n * @param metadata The metadata associated with the HTTP method to log.\r\n * \r\n * @return The log for the specified metadata.\r\n */\r\n public info(metadata: HttpMockLoggingMetadata): Log {\r\n this._logger.info(HttpMockLoggingConstant.CALLER, HttpMockLoggingConstant.RESPONSE_MESSAGE, metadata);\r\n return this.getLastLog();\r\n }\r\n\r\n /**\r\n * Processes error logs with the specified metadata.\r\n * \r\n * @param metadata The metadata associated with the HTTP method to log.\r\n * \r\n * @return The log for the specified metadata.\r\n */\r\n public error(metadata: HttpMockLoggingMetadata): Log {\r\n this._logger.error(HttpMockLoggingConstant.CALLER, HttpMockLoggingConstant.ERROR_MESSAGE, metadata);\r\n return this.getLastLog();\r\n }\r\n\r\n /**\r\n * @private\r\n * Processes a special kind of logs that are used to indicate that a HTTP operation\r\n * started and no response is available yet.\r\n * \r\n * @param metadata The metadata associated with the HTTP method to log.\r\n */\r\n public prefetch(metadata: HttpMockLoggingPrefetchMetadata): void {\r\n this._logger.config(HttpMockLoggingConstant.CALLER, HttpMockLoggingConstant.CONFIG_MESSAGE, metadata);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public clearLogs(): void {\r\n this._logger.clearLogs();\r\n this._logger.getLogConnector().clearLogs();\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public setLogConnector(value: LogConnector | null): void {\r\n this._logger.setLogConnector(value);\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public getLogConnector(): LogConnector {\r\n return this._logger.getLogConnector();\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public destroy(): void {\r\n this.clearLogs()\r\n this._logger.destroy();\r\n this._logger = null as any;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public getLogs(): Log[] {\r\n return this._logger.getLogs();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getLastLog(): Log {\r\n const logs: Log[] = this._logger.getLogs();\r\n return logs[logs.length - 1];\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AtxConsoleJson } from '../../../model/business/atx-console-json';\r\n\r\n/**\r\n * @private\r\n * The component that recursively renders `AtxConsoleJson` objects in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-json-viewer-panel',\n imports: [\n CommonModule\n ],\n templateUrl: './json-viewer-panel.component.html',\n styleUrl: './json-viewer-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxJsonViewerPanelComponent {\r\n\r\n /**\r\n * @private\r\n * The data to be rendererd whithin this component.\r\n */\r\n @Input()\r\n public data: AtxConsoleJson | null = null;\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (data) {\r\n @if (data.children) {\r\n <details>\r\n <summary>\r\n @if (data.label) {\r\n <span class=\"atx-prop-label\">{{ data.label }}</span>:\r\n <span [ngClass]=\"data.typeClass\">{{ data.value }}</span>\r\n } @else {\r\n {{ data.value }}\r\n }\r\n </summary>\r\n @for (item of data.children; track item) {\r\n <atx-json-viewer-panel [data]=\"item\"/>\r\n }\r\n </details>\r\n } @else {\r\n <div class=\"primitive\">\r\n <span class=\"atx-prop-label\">{{ data.label }}</span>: <span [ngClass]=\"data.typeClass\">{{ data.value }}</span>\r\n </div>\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * The list of object types used to qualify parsed objects.\r\n */\r\nexport enum ConsoleBodyType {\r\n\r\n /**\r\n * @private\r\n * Indicates that the type of object is not supported.\r\n */\r\n INVALID = -1,\r\n \r\n /**\r\n * @private\r\n * Indicates that the object is null.\r\n */\r\n NULL = 0,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is a Json.\r\n */\r\n JSON = 1,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is a string.\r\n */\r\n TEXT = 2,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is a Blob instance.\r\n */\r\n BLOB = 3,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is a FormData instance.\r\n */\r\n FORM_DATA = 4,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is an ArrayBuffer instance.\r\n */\r\n ARRAY_BUFFER = 5\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * The list of CSS class types for rendered objects.\r\n */\r\nexport enum ConsoleTypeClass {\r\n\r\n /**\r\n * @private\r\n * The class type for JS vanilla objects.\r\n */\r\n OBJECT = \"atx-object\",\r\n \r\n /**\r\n * @private\r\n * The class type for JS string primitives.\r\n */\r\n STRING = \"atx-string\",\r\n\r\n /**\r\n * @private\r\n * The class type for JS number primitives.\r\n */\r\n NUMBER= \"atx-number\",\r\n\r\n /**\r\n * @private\r\n * The class type for JS boolean primitives.\r\n */\r\n BOOLEAN= \"atx-boolean\",\r\n \r\n /**\r\n * @private\r\n * The class type for JS Arrays.\r\n */\r\n ARRAY= \"atx-array\",\r\n\r\n /**\r\n * @private\r\n * The class type for the JS `null` type.\r\n */\r\n NULL= \"atx-null\"\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { BOOLEAN, NUMBER, OBJECT, STRING } from '../../../../util';\r\nimport { AtxConsoleJson } from '../model/business/atx-console-json';\r\nimport { ConsoleBodyType } from './console-body-type';\r\nimport { ConsoleTypeClass } from './console-type-class';\r\n\r\nconst NULL: string = \"null\";\r\nconst ARR_END: string = '...]';\r\nconst OBJ_END: string = '...}'\r\n\r\n/**\r\n * @private\r\n * A utility class for managing metadata objects.\r\n */\r\nexport class DataUtil {\r\n\r\n /**\r\n * @private\r\n * Parses the specified object and returns a `AtxConsoleJson` tree that represents\r\n * the structure of parsed object.\r\n * \r\n * @param obj The object to parse.\r\n * @param label An optional `label` used to set the label property of the `AtxConsoleJson` object.\r\n * @returns a `AtxConsoleJson` tree object.\r\n */\r\n public static parseJson(obj: any, label?: string): AtxConsoleJson {\r\n const primitive: string = typeof obj;\r\n let type: ConsoleTypeClass = ConsoleTypeClass.OBJECT,\r\n value: any = obj,\r\n children: any = null;\r\n if (primitive === STRING) type = ConsoleTypeClass.STRING;\r\n else if (primitive === NUMBER) type = ConsoleTypeClass.NUMBER;\r\n else if (primitive === BOOLEAN) type = ConsoleTypeClass.BOOLEAN;\r\n else if (Array.isArray(obj)) {\r\n const rawValue: string = JSON.stringify(obj);\r\n let len: number = obj.length - 1;\r\n let idx: number = 0;\r\n type = ConsoleTypeClass.ARRAY;\r\n value = rawValue.length > 50 ? rawValue.substring(0, 46) + ARR_END : rawValue;\r\n children = [];\r\n for (; len >= 0; len--) {\r\n children.push(DataUtil.parseJson(obj[len], String(idx)));\r\n idx++;\r\n }\r\n } else if (obj === null) {\r\n type = ConsoleTypeClass.NULL;\r\n value = NULL;\r\n }\r\n else {\r\n const keys: string[] = Object.keys(obj);\r\n const rawValue: string = JSON.stringify(obj);\r\n let len: number = keys.length - 1;\r\n children = [];\r\n for (; len >= 0; len--) {\r\n const key: string = keys[len];\r\n children.push(DataUtil.parseJson(obj[key], key));\r\n }\r\n value = rawValue.length > 50 ? rawValue.substring(0, 46) + OBJ_END : rawValue;\r\n }\r\n return {\r\n label: label,\r\n typeClass: type,\r\n value: value,\r\n children: children\r\n }\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns a constant of the ConsoleBodyType enum, depending on the type of the specified object.\r\n * \r\n * @param obj The object for wich to get the type.\r\n * @returns A constant of the ConsoleBodyType enum.\r\n */\r\n public static getBodyType(obj: any): ConsoleBodyType {\r\n const primitive: string = typeof obj;\r\n if (obj === null || obj === undefined) return ConsoleBodyType.NULL;\r\n if (primitive === STRING) return ConsoleBodyType.TEXT;\r\n if (obj instanceof Blob) return ConsoleBodyType.BLOB;\r\n if (obj instanceof FormData) return ConsoleBodyType.FORM_DATA;\r\n if (obj instanceof ArrayBuffer) return ConsoleBodyType.ARRAY_BUFFER;\r\n if (primitive === OBJECT) return ConsoleBodyType.JSON;\r\n return ConsoleBodyType.INVALID;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { AtxJsonViewerPanelComponent } from '../json-viewer-panel/json-viewer-panel.component';\r\nimport { AtxConsoleJson } from '../../../model/business/atx-console-json';\r\nimport { DataUtil } from '../../../util/data.util';\r\n\r\n/**\r\n * @private\r\n * The component that renders JSON data in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-json-viewer',\n imports: [\n AtxJsonViewerPanelComponent\n ],\n templateUrl: './json-viewer.component.html',\n styleUrl: './json-viewer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxJsonViewerComponent {\r\n\r\n /**\r\n * @private\r\n */\r\n protected parsedData: AtxConsoleJson | null = null;\r\n\r\n /**\r\n * @private\r\n * Sets the data to be rendererd whithin this component.\r\n */\r\n @Input()\r\n public set data(value: any) {\r\n if (!value) {\r\n this.parsedData = null;\r\n return;\r\n }\r\n this.parsedData = DataUtil.parseJson(value);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<atx-json-viewer-panel [data]=\"parsedData\"/>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log } from '../../../../../model';\r\n\r\n/**\r\n * @private\r\n * The base class for all components that display logs information in the ATX monitoring console.\r\n */\r\nexport class AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected currLog: Log | null = null;\r\n\r\n /**\r\n * @private\r\n * Sets the log for which to render information.\r\n */\r\n public set log(value: Log | null) {\r\n this.currLog = value;\r\n }\r\n\r\n /**\r\n * @private\r\n * Gets the log for which to render information.\r\n */\r\n public get log(): Log | null {\r\n return this.currLog;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { Log } from '../../../../../../model';\r\nimport { HttpParams, HttpRequest } from '@angular/common/http';\r\nimport { AtxJsonViewerComponent } from '../json-viewer/json-viewer.component';\r\nimport { DataUtil } from '../../../util/data.util';\r\nimport { ConsoleBodyType } from '../../../util/console-body-type';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\n\r\n/**\r\n * @private\r\n * The component that displays payload data associated with an HTTP request in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-payload-renderer',\n imports: [\n AtxJsonViewerComponent\n ],\n templateUrl: './payload-renderer.component.html',\n styleUrl: './payload-renderer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxPayloadRendererComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected json: any = null;\r\n\r\n /**\r\n * @private\r\n */\r\n protected formData: any | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected queryParams: any[] | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log (value: Log | null) {\r\n super.log = value;\r\n this.json = this.formData = this.queryParams = null;\r\n if(!value) return;\r\n const request: HttpRequest<any> = value.metadata.request;\r\n const params: HttpParams = request.params;\r\n const paramsKeys: string[] = params.keys();\r\n const body: any = request.body;\r\n const bodyType: ConsoleBodyType = DataUtil.getBodyType(body);\r\n if (paramsKeys.length > 0) {\r\n this.queryParams = [];\r\n paramsKeys.forEach(key=> this.queryParams?.push( { key: key, value: params.get(key) } ));\r\n }\r\n if (bodyType === ConsoleBodyType.FORM_DATA) {\r\n this.formData = Array.from(body);\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.TEXT) {\r\n this.json = JSON.parse(body);\r\n }\r\n }\r\n}\r\n","\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (queryParams) {\r\n <details>\r\n <summary>\r\n Query String Parameters\r\n </summary>\r\n <div class=\"content\">\r\n @for (item of queryParams; track item) {\r\n <dl>\r\n <dt>{{ item.key }}:</dt>\r\n <dd>{{ item.value }}</dd>\r\n </dl>\r\n }\r\n </div>\r\n </details>\r\n} @else if (json) {\r\n <details>\r\n <summary>\r\n Request Payload\r\n </summary>\r\n <div class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </div>\r\n </details>\r\n} @else if (formData) {\r\n <details>\r\n <summary>\r\n Form Data\r\n </summary>\r\n <div class=\"content\">\r\n <ul>\r\n @for (entry of formData; track entry) {\r\n <li>[ {{ entry }} ]</li>\r\n }\r\n </ul>\r\n </div>\r\n </details>\r\n} \r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockRequestMetadata } from \"../../../../model\";\r\nimport { AtxTimelineData } from \"../model/business/atx-timeline-data\";\r\n\r\n/**\r\n * @private\r\n * A utility class for computing the timeline data of an HTTP request.\r\n */\r\nexport class TimelineUtil {\r\n\r\n /**\r\n * @private\r\n * Returns the timeline data for the specified HTTP log.\r\n * \r\n * @param metadata The HTTP metadata for which to get the timeline data.\r\n * @returns A `AtxTimelineData` object.\r\n */\r\n public static getTimelineData(metadata: HttpMockRequestMetadata): AtxTimelineData {\r\n const duration: number = metadata.duration;\r\n if (duration === 0) return { downloadStart: 0, downloadLength: 0 };\r\n const downloadLength: number = Math.round(100 * (duration - metadata.stalled) / duration);\r\n return { downloadStart: 100 - downloadLength, downloadLength: downloadLength };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { HttpMockLoggingMetadata, HttpMockRequestMetadata, Log } from '../../../../../../model';\r\nimport { DatePipe } from '@angular/common';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { TimelineUtil } from '../../../util/timeline.util';\r\n\r\n/**\r\n * @private\r\n * The component that displays the timeline of an HTTP response in the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-timing-renderer',\r\n imports: [\r\n DatePipe\r\n ],\r\n templateUrl: './timing-renderer.component.html',\r\n styleUrl: './timing-renderer.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AtxTimingRendererComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected hasData: boolean = false;\r\n \r\n /**\r\n * @private\r\n */\r\n protected start: number = NaN;\r\n \r\n /**\r\n * @private\r\n */\r\n protected downloadStart: number = NaN;\r\n \r\n /**\r\n * @private\r\n */\r\n protected downloadLength: number = NaN;\r\n \r\n /**\r\n * @private\r\n */\r\n protected duration: number = 0;\r\n \r\n /**\r\n * @private\r\n */\r\n protected error: boolean = false;\r\n\r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n if (!value) {\r\n this.hasData = this.error = false;\r\n this.start = this.downloadStart = this.downloadLength = NaN;\r\n this.duration = 0;\r\n return;\r\n }\r\n const metadata: HttpMockLoggingMetadata = value.metadata;\r\n const response: HttpResponse<any> | undefined = metadata.response;\r\n if (!response) return;\r\n const requestMetadata: HttpMockRequestMetadata = metadata.requestMetadata;\r\n this.error = response.status >= 400;\r\n this.hasData = true;\r\n this.start = requestMetadata.start;\r\n this.duration = requestMetadata.duration;\r\n const timelineData = TimelineUtil.getTimelineData(requestMetadata);\r\n this.downloadStart = timelineData.downloadStart;\r\n this.downloadLength = timelineData.downloadLength;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (hasData) {\r\n <section class=\"content\">\r\n <dl>\r\n <dt>Connection start</dt>\r\n <dd>{{ start | date: 'short' }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request/Response</dt>\r\n <dd class=\"timeline\">\r\n <div>\r\n <div [attr.style]=\"'width:' + downloadStart + '%'\">\r\n stalled\r\n <div class=\"stalled\"></div>\r\n <div class=\"time\">{{ downloadStart }} ms</div>\r\n </div>\r\n <div [attr.style]=\"'width:' + downloadLength + '%;margin-left:' + downloadStart + '%'\">\r\n download\r\n <div class=\"download\" [class.error]=\"error\"></div>\r\n <div class=\"time\">{{ duration }} ms</div>\r\n </div>\r\n </div>\r\n </dd>\r\n </dl>\r\n </section>\r\n} \r\n\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser'\r\nimport { PipeTransform, Pipe } from \"@angular/core\";\r\n\r\n/**\r\n * A basic implementation of a HTML sanitization pipe.\r\n */\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: true\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _sanitizer: DomSanitizer) {}\r\n\r\n /**\r\n * Transforms the HTML input string value into a `SafeHtml` instance and returns the result\r\n * of the transformation.\r\n * \r\n * @param value The HTML input value to transform into a `SafeHtml` instance.\r\n * @returns A `SafeHtml` instance based on the specified input value.\r\n */\r\n public transform(value: string): SafeHtml {\r\n return this._sanitizer.bypassSecurityTrustHtml(value);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log } from \"../../../../model\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst SLASH: string = \"/\";\r\n\r\n/**\r\n * @private\r\n * A utility class for managing request resources path.\r\n */\r\nexport class UrlUtil {\r\n\r\n /**\r\n * @private\r\n * Returns the resource name from the specified HTTP log.\r\n * \r\n * @param log The HTTP log for which to get the resource name.\r\n * @returns A string that represents the resource name of the specified HTTP log.\r\n */\r\n public static getResourceName(log: Log): string {\r\n return UrlUtil.getResourceNameFromPath(UrlUtil.getResourcePath(log));\r\n }\r\n\r\n /**\r\n * @private\r\n * Returns the resource name from the specified URL path.\r\n * \r\n * @param pathname The URL path for which to get the resource name.\r\n * @returns A string that represents the resource name of the specified URL path.\r\n */\r\n public static getResourceNameFromPath(pathname: string): string {\r\n const pos: number = pathname.length - 1;\r\n if (pathname.lastIndexOf(SLASH) === pos) pathname = pathname.substring(0, pos);\r\n return pathname.substring(pathname.lastIndexOf(SLASH) + 1);\r\n }\r\n\r\n /**\r\n * @private\r\n * Returns the resource path from the specified HTTP log.\r\n * \r\n * @param log The HTTP log for which to get the resource path.\r\n * @returns A string that represents the resource path of the specified HTTP log.\r\n */\r\n public static getResourcePath(log: Log): string {\r\n return log.metadata.requestMetadata.url.pathname;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\r\nimport { AtxJsonViewerComponent } from '../json-viewer/json-viewer.component';\r\nimport { DataUtil } from '../../../util/data.util';\r\nimport { ConsoleBodyType } from '../../../util/console-body-type';\r\nimport { SafeHtmlPipe } from '../../../../../../pipe';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { UrlUtil } from '../../../util/url.util';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\nimport { HttpMockLoggingMetadata, Log } from '../../../../../../model';\r\n\r\n/**\r\n * @Private\r\n */\r\nconst IMG_TYPE: string = 'image/';\r\n\r\n/**\r\n * @private\r\n * The component that displays HTTP response data preview in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-response-preview-renderer',\n imports: [\n AtxJsonViewerComponent,\n SafeHtmlPipe\n ],\n templateUrl: './response-preview-renderer.component.html',\n styleUrl: './response-preview-renderer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxResponsePreviewRendererComponent extends AtxLogRendererBase implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n protected json: any = null;\r\n\r\n /**\r\n * @private\r\n */\r\n protected text: string | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected response: any = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected imgUrl: string | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected trustUrl: SafeUrl | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected resourceName!: string;\r\n \r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n this.ngOnDestroy();\r\n if (!value) return;\r\n const metadata: HttpMockLoggingMetadata = value.metadata; \r\n const response: HttpResponse<any> = metadata.response;\r\n if (!response) return\r\n const body: any = response.body;\r\n this.response = value;\r\n this.json = this.text = this.imgUrl = this.trustUrl = null;\r\n if (!body) return;\r\n const bodyType: ConsoleBodyType = DataUtil.getBodyType(body);\r\n if (bodyType === ConsoleBodyType.TEXT) {\r\n this.text = body;\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.JSON) {\r\n this.json = body;\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.BLOB) {\r\n const type = body.type;\r\n if (type.startsWith(IMG_TYPE)) {\r\n this.resourceName = UrlUtil.getResourceNameFromPath((response as any).url);\r\n const url: string = URL.createObjectURL(body);\r\n this.imgUrl = url;\r\n this.trustUrl = this.sanitizer.bypassSecurityTrustUrl(url);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private sanitizer: DomSanitizer) {\r\n super();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.revokeObjectURL();\r\n this.json = this.text = this.json = this.response = this.imgUrl = this.trustUrl = null;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected revokeObjectURL(): void {\r\n if (this.imgUrl) URL.revokeObjectURL(this.imgUrl);\r\n }\r\n}\r\n","\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (response) {\r\n @if (text) {\r\n <section class=\"content\" [innerHTML]=\"text | safeHtml \"></section>\r\n } @else if (json) {\r\n <section class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </section>\r\n } @else if (imgUrl) {\r\n <section class=\"content img-preview\">\r\n <div>\r\n <img [src]=\"imgUrl\" (load)=\"revokeObjectURL()\" [alt]=\"resourceName\" [title]=\"resourceName\">\r\n </div>\r\n </section>\r\n } @else {\r\n <section class=\"content center-content\">\r\n <strong>Preview not available</strong>\r\n </section>\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { DataUtil } from '../../../util/data.util';\r\nimport { ConsoleBodyType } from '../../../util/console-body-type';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\nimport { HttpMockLoggingMetadata, Log } from '../../../../../../model';\r\n\r\n/**\r\n * @private\r\n * The component that displays HTTP response data in the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-response-body-renderer',\r\n templateUrl: './response-body-renderer.component.html',\r\n styleUrl: './response-body-renderer.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AtxResponseBodyRendererComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected text: string | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected body: any = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected blob: Blob | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected arrayBuffer: ArrayBuffer | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n this.ngOnDestroy();\r\n if (!value) return;\r\n const metadata: HttpMockLoggingMetadata = value.metadata; \r\n const response: HttpResponse<any> = metadata.response;\r\n if (!response) return\r\n const body: any = response.body;\r\n this.body = body;\r\n if (!body) return;\r\n const bodyType: ConsoleBodyType = DataUtil.getBodyType(body);\r\n if (bodyType === ConsoleBodyType.TEXT) {\r\n this.text = body;\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.JSON) {\r\n this.text = JSON.stringify(body);\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.BLOB) {\r\n this.blob = body;\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.ARRAY_BUFFER) this.arrayBuffer = body;\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.text = this.body = this.blob = this.arrayBuffer = null;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (body) {\r\n <section class=\"content\">\r\n @if (text) {\r\n {{ text }}\r\n } @else if (blob) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Blob</dd>\r\n </dl>\r\n <dl>\r\n <dt>size:</dt>\r\n <dd>{{ blob.size }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>type:</dt>\r\n <dd>{{ blob.type }}</dd>\r\n </dl>\r\n } @else if (arrayBuffer) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Array Buffer</dd>\r\n </dl>\r\n <dl>\r\n <dt>byte length:</dt>\r\n <dd>{{ arrayBuffer.byteLength }}</dd>\r\n </dl>\r\n } @else {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n }\r\n </section>\r\n} @else if (currLog) {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * A utility class that indicates the type of user's action.\r\n */\r\nexport enum AtxConsoleActionType {\r\n\r\n /**\r\n * @private\r\n * Idincates that the logs must be cleared.\r\n */\r\n CLEAR_LOGS = 0,\r\n\r\n /**\r\n * @private\r\n * Idincates that the logs must be exported.\r\n */\r\n EXPORT_LOGS = 1,\r\n\r\n /**\r\n * @private\r\n * Idincates that logs must be imported.\r\n */\r\n IMPORT_LOGS = 2,\r\n \r\n /**\r\n * @private\r\n * Idincates that the a log is selected.\r\n */\r\n LOG_SELECT = 3,\r\n\r\n /**\r\n * @private\r\n * Idincates that the details panel must be closed.\r\n */\r\n CLOSE_DETAILS_PANEL = 4\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { HttpMockLoggingMetadata, Log } from '../../../../../../model';\r\nimport { NgStyle } from '@angular/common';\r\nimport { HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\n\r\n/**\r\n * @private\r\n * The component that displays HTTP request info in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-request-info-renderer',\n imports: [\n NgStyle,\n ],\n templateUrl: './request-info-renderer.component.html',\n styleUrl: './request-info-renderer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxRequesInfoComponent extends AtxLogRendererBase {\r\n \r\n /**\r\n * @private\r\n */\r\n protected request!: HttpRequest<any>;\r\n \r\n /**\r\n * @private\r\n */\r\n protected response!: HttpResponse<any>;\r\n\r\n /**\r\n * @private\r\n * Gest or sets the log for which to display general information.\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n if (!value) {\r\n this.request = this.response = null as any;\r\n return;\r\n }\r\n const metadata: HttpMockLoggingMetadata = value.metadata; \r\n const request: HttpRequest<any> = metadata.request; \r\n this.request = request;\r\n this.response = metadata.response;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<details open>\r\n <summary>General</summary>\r\n <section>\r\n <dl>\r\n <dt>Request URL:</dt>\r\n <dd>{{ request.url }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request Method:</dt>\r\n <dd>{{ request.method }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Status Code:</dt>\r\n <dd class=\"status-container\">\r\n @if (response) {\r\n <svg [ngStyle]=\"{ fill: response.status < 400 ? 'green' : 'red' }\" \r\n width=\"13\" height=\"13\" viewBox=\"0 0 16 16\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\"/>\r\n </svg>\r\n {{ response.status }} {{ response.statusText }}\r\n } @else {\r\n <svg fill=\"orange\" width=\"13\" height=\"13\" viewBox=\"0 0 16 16\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\"/>\r\n </svg>\r\n prefetch\r\n }\r\n </dd>\r\n </dl>\r\n </section>\r\n</details>\r\n<details>\r\n <summary>Response Headers</summary>\r\n <section>\r\n @if (response) {\r\n @for( item of response.headers.keys(); track item) {\r\n <dl>\r\n <dt>{{ item }}</dt>\r\n <dd>{{ response.headers.get(item) }}</dd>\r\n </dl>\r\n \r\n }\r\n }\r\n </section>\r\n</details>\r\n<details>\r\n <summary>Request Headers</summary>\r\n <section>\r\n @for(item of request.headers.keys(); track item) {\r\n <dl>\r\n <dt>{{ item }}</dt>\r\n <dd>{{ request.headers.get(item) }}</dd>\r\n </dl>\r\n }\r\n </section>\r\n</details>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter, Injectable, Output } from \"@angular/core\";\r\nimport { AtxConsoleAction } from \"../business/atx-console-action\";\r\nimport { AtxConsoleActionType } from \"../business/atx-console-action-type\";\r\n\r\n/**\r\n * @private\r\n * The service responsible for sending user's actions to the controller.\r\n */\r\n@Injectable()\r\nexport class AtxUserActionService {\r\n\r\n /**\r\n * @private\r\n * An event emitter that triggers event representing user's actions.\r\n */\r\n @Output()\r\n public readonly action: EventEmitter<AtxConsoleAction> = new EventEmitter(true);\r\n \r\n /**\r\n * @private\r\n * Sends a user's actions to the system.\r\n * \r\n * @param type The type of action to send.\r\n * @param data Optional data associated with the user's actions.\r\n */\r\n public sendAction(type: AtxConsoleActionType, data: any = null): void {\r\n this.action.emit( { type: type, data: data } );\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { HttpMockLoggingMetadata, Log } from '../../../../../model';\r\nimport { HttpRequest } from '@angular/common/http';\r\nimport { AtxPayloadRendererComponent } from '../renderer/payload-renderer/payload-renderer.component';\r\nimport { AtxTimingRendererComponent } from '../renderer/timing-renderer/timing-renderer.component';\r\nimport { AtxResponsePreviewRendererComponent } from '../renderer/response-preview-renderer/response-preview-renderer.component';\r\nimport { AtxResponseBodyRendererComponent } from '../renderer/response-body-renderer/response-body-renderer.component';\r\nimport { AtxUserActionService } from '../../model/service/atx-user-action.service';\r\nimport { AtxConsoleActionType } from '../../model/business/atx-console-action-type';\r\nimport { AtxRequesInfoComponent } from '../renderer/request-info-renderer/request-info-renderer.component';\r\nimport { AtxLogRendererBase } from '../abstract/log-renderer-base';\r\n\r\n/**\r\n * @private\r\n * The component that layouts all the logs details in the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-monitoring-console-details',\r\n imports: [\r\n AtxPayloadRendererComponent,\r\n AtxTimingRendererComponent,\r\n AtxResponsePreviewRendererComponent,\r\n AtxResponseBodyRendererComponent,\r\n AtxRequesInfoComponent\r\n ],\r\n templateUrl: './request-details.component.html',\r\n styleUrl: './request-details.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AtxRequestDetailsComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected hasPayload: boolean = false;\r\n \r\n /**\r\n * @private\r\n */\r\n protected readonly actionType: any = AtxConsoleActionType;\r\n \r\n /**\r\n * @private\r\n */\r\n protected currSection: number = 0;\r\n\r\n /**\r\n * @private\r\n * Gest or sets the log for which to display details.\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n if (value) {\r\n const metadata: HttpMockLoggingMetadata = value.metadata; \r\n const request: HttpRequest<any> = metadata.request;\r\n this.checkPayload(request);\r\n this._cdr.detectChanges();\r\n return;\r\n }\r\n this.hasPayload = false;\r\n this._cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected action: AtxUserActionService,\r\n private _cdr: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected changeSection(idx: number): void {\r\n this.currSection = idx;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private checkPayload(request: HttpRequest<any>): void {\r\n const hasBody: boolean = (request.body !== null && request.body !== undefined);\r\n this.hasPayload = (request.params.keys().length > 0 || hasBody);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (currLog) {\r\n <header>\r\n <menu>\r\n <li role=\"button\" (click)=\"changeSection(0)\"><span [class.selected]=\"currSection === 0\">Headers</span></li>\r\n @if (hasPayload) {\r\n <li role=\"button\" (click)=\"changeSection(1)\"><span [class.selected]=\"currSection === 1\">Payload</span></li>\r\n }\r\n <li role=\"button\" (click)=\"changeSection(2)\"><span [class.selected]=\"currSection === 2\">Preview</span></li>\r\n <li role=\"button\" (click)=\"changeSection(3)\"><span [class.selected]=\"currSection === 3\">Response</span></li>\r\n <li role=\"button\" (click)=\"changeSection(4)\"><span [class.selected]=\"currSection === 4\">Timing</span></li>\r\n <div role=\"button\" (click)=\"action.sendAction(actionType.CLOSE_DETAILS_PANEL)\" title=\"Close\" class=\"header-btn\">\r\n <svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708\"/>\r\n </svg>\r\n </div>\r\n </menu>\r\n </header>\r\n <main>\r\n @if (currSection === 0) {\r\n <atx-request-info-renderer [log]=\"currLog\"/>\r\n } @else if (currSection === 1) {\r\n <atx-payload-renderer [log]=\"currLog\"/>\r\n } @else if (currSection === 2) {\r\n <atx-response-preview-renderer [log]=\"currLog\"/>\r\n } @else if (currSection === 3) {\r\n <section class=\"raw-response\">\r\n <atx-response-body-renderer [log]=\"currLog\"/>\r\n </section>\r\n } @else if (currSection === 4) {\r\n <atx-timing-renderer [log]=\"currLog\"/>\r\n }\r\n </main>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst B: string = \" B\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst KB: string = \" KB\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst MB: string = \" MB\";\r\n\r\n/**\r\n * @private\r\n * A utility class for managing request data size.\r\n */\r\nexport class SizeUtil {\r\n\r\n /**\r\n * The string reference to the initial data size.\r\n */\r\n public static readonly INITIAL_SIZE: string = \"0 B\";\r\n\r\n /**\r\n * @private\r\n * Returns the size of the specified object in bytes.\r\n * \r\n * @param obj The object for which to get the size.\r\n * @returns The size of the specified object.\r\n */\r\n public static getSize(obj: any): number {\r\n if (!obj) return 0;\r\n return new TextEncoder().encode(JSON.stringify(obj)).length;\r\n }\r\n \r\n /**\r\n * @private\r\n * \r\n * Returns the string representation of the specified size.\r\n * @param size The size, in bytes, for which to get the string representation.\r\n * @returns The string representation of the specified size.\r\n */\r\n public static sizeToString(size: number): string {\r\n if (size < 1024) return size + B;\r\n size = size / 1024;\r\n if (size < 1024) return size.toFixed(2) + KB;\r\n return (size / 1024).toFixed(2) + MB;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Log, LogLevel } from '../../../../../model';\r\nimport { Uuid } from '../../../../../util';\r\nimport { SizeUtil } from \"../../util/size.util\";\r\n\r\n/**\r\n * @private\r\n * A convenient service that stores the state of an `AtxMonitoringConsoleComponent` instance.\r\n */\r\n@Injectable()\r\nexport class AtxMonitoringConsoleState {\r\n\r\n /**\r\n * @private\r\n * Returns the `Log` object currently selected, or `null` if no log is selected.\r\n */\r\n public get selectedLog(): Log | null {\r\n return this._selectedLog;\r\n };\r\n\r\n /**\r\n * @private\r\n * Returns a string that represents the size of all requests stored within this service.\r\n * The string is in the format defined by the `SizeUtil.sizeToString()` method.\r\n */\r\n public get cumulativeSize(): string {\r\n return this._cumulativeSize;\r\n };\r\n\r\n /**\r\n * @private\r\n * Returns the list of logs stored within this service.\r\n */\r\n public get logs(): Log[] {\r\n return this._logs;\r\n };\r\n\r\n /**\r\n * @private\r\n * Returns the number of logs stored within this service.\r\n */\r\n public get numLogs(): number {\r\n return this._logs.length;\r\n };\r\n\r\n /**\r\n * @private\r\n */\r\n private _selectedLog: Log | null = null;\r\n\r\n /**\r\n * @private\r\n */\r\n private _cumulativeSize: string = SizeUtil.INITIAL_SIZE;\r\n\r\n /**\r\n * @private\r\n */\r\n private _logs: Log[] = [];\r\n\r\n /**\r\n * @private\r\n */\r\n private _size: number = 0;\r\n\r\n /**\r\n * @private\r\n * Initializes the service.\r\n * Allows to inject the logs previously collected by the `HttpMockLoggingService` singleton.\r\n * \r\n * @param logs The list of logs that must be stored within this service.\r\n */\r\n public init(logs: Log[]): void {\r\n const len: number = logs.length - 1;\r\n let i: number = 0;\r\n for (; i <= len; ++i) this.addLog(logs[i]);\r\n }\r\n\r\n /**\r\n * @private\r\n * Adds the specified log to the service for storage purpose.\r\n * \r\n * @param log The log to add to this service.\r\n */\r\n public addLog(log: Log): void {\r\n if (log.level !== LogLevel.CONFIG) {\r\n const size: number = SizeUtil.getSize(log.metadata.response.body);\r\n const id: Uuid = log.metadata.requestMetadata.id;\r\n this._size += size;\r\n this._cumulativeSize = SizeUtil.sizeToString(this._size);\r\n const idx: number = this._logs.findIndex(prefetch => prefetch.metadata.requestMetadata.id === id);\r\n idx > -1 ? this._logs.splice(idx, 1, log) : this._logs.push(log);\r\n if (this.selectedLog?.metadata.requestMetadata.id === id) this._selectedLog = log;\r\n } else this._logs.push(log);\r\n }\r\n\r\n /**\r\n * @private\r\n * Removes all the logs stored within this service and sets all service properties\r\n * to their default value.\r\n */\r\n public clearLogs(): void {\r\n this._selectedLog = null;\r\n this._size = this._logs.length = 0;\r\n this._cumulativeSize = SizeUtil.INITIAL_SIZE;\r\n }\r\n\r\n /**\r\n * @private\r\n * Indicates that the specified log is the currently selected log.\r\n * \r\n * @param log The log to set as the currently selected log.\r\n */\r\n public selectLog(log: Log | null): void {\r\n this._selectedLog = log;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\nimport { AtxMonitoringConsoleState } from '../../model/service/atx-monitoring-console.state';\r\n\r\n/**\r\n * @private\r\n * Represents the footer element of the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-console-footer',\r\n standalone: true,\r\n templateUrl: './console-footer.component.html',\r\n styleUrl: './console-footer.component.scss'\r\n})\r\nexport class AtxConsoleFooterComponent {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected state: AtxMonitoringConsoleState) {}\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<footer>\r\n <div>\r\n {{ state.numLogs }} request(s)\r\n </div>\r\n <div class=\"menu-separator\"></div>\r\n <div>\r\n {{ state.cumulativeSize }} resources\r\n </div>\r\n</footer>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\nimport { AtxConsoleActionType } from '../../model/business/atx-console-action-type';\r\nimport { AtxUserActionService } from '../../model/service/atx-user-action.service';\r\n\r\n/**\r\n * @private\r\n * Represents the user's action menu element of the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-console-menu',\r\n standalone: true,\r\n templateUrl: './console-menu.component.html',\r\n styleUrl: './console-menu.component.scss'\r\n})\r\nexport class AtxConsoleMenuComponent {\r\n\r\n /**\r\n * @private\r\n */\r\n protected readonly actionType: any = AtxConsoleActionType;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected action: AtxUserActionService) {}\r\n\r\n /**\r\n * @private\r\n */\r\n protected onFileSelect(event: Event): void {\r\n this.action.sendAction(AtxConsoleActionType.IMPORT_LOGS, (event.target as HTMLInputElement).files);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n<menu>\r\n <li id=\"clear-btn\" role=\"button\" title=\"Clear network log\" (click)=\"action.sendAction(actionType.CLEAR_LOGS)\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16\"/>\r\n <path d=\"M11.354 4.646a.5.5 0 0 0-.708 0l-6 6a.5.5 0 0 0 .708.708l6-6a.5.5 0 0 0 0-.708\"/>\r\n </svg>\r\n </li>\r\n <div class=\"menu-separator\"></div>\r\n <li id=\"filter-btn\" title=\"Filter\" class=\"disabled\">\r\n <svg width=\"19\" height=\"19\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10 8.692V13.5a.5.5 0 0 1-.342.474l-3 1A.5.5 0 0 1 6 14.5V8.692L1.628 3.834A.5.5 0 0 1 1.5 3.5zm1 .5v1.308l4.372 4.858A.5.5 0 0 1 7 8.5v5.306l2-.666V8.5a.5.5 0 0 1 .128-.334L13.5 3.308V2z\"/>\r\n </svg>\r\n </li>\r\n <li id=\"search-btn\" title=\"Search\" class=\"disabled\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0\"/>\r\n </svg>\r\n </li>\r\n <div class=\"menu-separator\"></div>\r\n <li id=\"import-btn\" role=\"button\" title=\"Import\" (click)=\"importField.click()\">\r\n <svg width=\"19\" height=\"19\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5\"/>\r\n <path d=\"M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z\"/>\r\n </svg>\r\n <input type=\"file\" #importField accept=\".hmfl\" (change)=\"onFileSelect($event)\">\r\n </li>\r\n <li id=\"export-btn\" role=\"button\" title=\"Export\" (click)=\"action.sendAction(actionType.EXPORT_LOGS)\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5\"/>\r\n <path d=\"M7.646 1.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 2.707V11.5a.5.5 0 0 1-1 0V2.707L5.354 4.854a.5.5 0 1 1-.708-.708z\"/>\r\n </svg>\r\n </li>\r\n</menu>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpContextToken } from \"@angular/common/http\";\r\n\r\n/**\r\n * @private\r\n * A HTTP context value that indicates whether the specified log is imported (`true`), or not (`false`).\r\n */\r\nexport const ATX_IS_IMPORTED_LOG: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => false);","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\n\r\n/**\r\n * @private\r\n * A spinner icon component.\r\n */\r\n@Component({\r\n selector: 'atx-spinner',\r\n standalone: true,\r\n templateUrl: './spinner.component.html',\r\n styleUrl: './spinner.component.scss'\r\n})\r\nexport class AtxSpinnerComponent {}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41m-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9\"/>\r\n <path fill-rule=\"evenodd\" d=\"M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5 5 0 0 0 8 3M3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9z\"/>\r\n</svg>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { Log } from '../../../../../../model';\r\nimport { ATX_IS_IMPORTED_LOG } from '../../../model/business/atx-is-imported-log';\r\nimport { ConsoleBodyType } from '../../../util/console-body-type';\r\nimport { DataUtil } from '../../../util/data.util';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { AtxSpinnerComponent } from '../spinner/spinner.component';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\n\r\n/**\r\n * @private\r\n * The component responsible for managing icons the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-icon-renderer',\n templateUrl: './icon-renderer.component.html',\n styleUrl: './icon-renderer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AtxSpinnerComponent\n ]\n})\r\nexport class AtxIconRendererComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected bodyType: ConsoleBodyType = ConsoleBodyType.INVALID;\r\n\r\n /**\r\n * @private\r\n */\r\n protected hasReponse: boolean = false;\r\n \r\n /**\r\n * @private\r\n */\r\n protected isImported: boolean = false;\r\n\r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n if (!value) {\r\n this.hasReponse = this.isImported = false;\r\n this.bodyType = ConsoleBodyType.INVALID;\r\n return;\r\n }\r\n const response: HttpResponse<any> = value.metadata.response;\r\n const complete: boolean = response !== null && response !== undefined;\r\n this.hasReponse = complete;\r\n this.bodyType = complete ? DataUtil.getBodyType(response.body) : ConsoleBodyType.INVALID;\r\n this.isImported = value.metadata.request?.context.get(ATX_IS_IMPORTED_LOG);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (hasReponse) {\r\n <svg width=\"24\" height=\"24\" fill=\"currentColor\">\r\n @if (bodyType == 0) {\r\n <use href=\"#empty-icon\"/>\r\n } @else if (bodyType == 1) {\r\n <use href=\"#json-icon\"/>\r\n } @else if (bodyType == 2) {\r\n <use href=\"#text-icon\"/>\r\n } @else if (bodyType == 3) {\r\n <use href=\"#blob-icon\"/>\r\n } @else if (bodyType == 5) {\r\n <use href=\"#bin-icon\"/>\r\n }\r\n </svg>\r\n @if (isImported) {\r\n <svg width=\"24\" height=\"24\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\" d=\"M3.5 6a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h9a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 1 0-1h2A1.5 1.5 0 0 1 14 6.5v8a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 14.5v-8A1.5 1.5 0 0 1 3.5 5h2a.5.5 0 0 1 0 1z\"/>\r\n <path fill-rule=\"evenodd\" d=\"M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z\"/>\r\n </svg>\r\n }\r\n} @else if (currLog) {\r\n <atx-spinner />\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\nimport { Log } from '../../../../../../model';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { SizeUtil } from '../../../util/size.util';\r\nimport { UrlUtil } from '../../../util/url.util';\r\nimport { AtxIconRendererComponent } from '../icon-renderer/icon-renderer.component';\r\nimport { AtxMonitoringConsoleState } from '../../../model/service/atx-monitoring-console.state';\r\nimport { AtxUserActionService } from '../../../model/service/atx-user-action.service';\r\nimport { AtxConsoleActionType } from '../../../model/business/atx-console-action-type';\r\n\r\n/**\r\n * @private\r\n */\r\nconst TPL_DASH: string = \"---\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst PREFETCH: string = \"prefetch\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst MS_SUFIX: string = \" ms\";\r\n\r\n/**\r\n * @private\r\n * The component that layouts HTTP logs via a table element in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-request-list-renderer',\n imports: [\n AtxIconRendererComponent\n ],\n templateUrl: './request-list-renderer.component.html',\n styleUrl: './request-list-renderer.component.scss'\n})\r\nexport class AtxRequestListRendererComponent {\r\n \r\n /**\r\n * @private\r\n */\r\n protected readonly actionType: any = AtxConsoleActionType;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected state: AtxMonitoringConsoleState,\r\n protected action: AtxUserActionService) {}\r\n\r\n /**\r\n * @private\r\n * Returns the data size for the specified log.\r\n */\r\n protected getSize(log: Log): string {\r\n const response: HttpResponse<any> | null = log.metadata.response;\r\n if (response) {\r\n const size: number = SizeUtil.getSize(response.body);\r\n return SizeUtil.sizeToString(size);\r\n }\r\n return TPL_DASH;\r\n }\r\n\r\n /**\r\n * @private\r\n * Returns the HTTP status for the specified log.\r\n */\r\n protected getStatus(log: Log): string | number { const response: HttpResponse<any> | null = log.metadata.response;\r\n if (response) return response.status;\r\n return PREFETCH;\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns the transaction duration for the specified log.\r\n */\r\n protected getTime(log: Log): string {\r\n const response: HttpResponse<any> | null = log.metadata.response;\r\n if (response) return log.metadata.requestMetadata.duration + MS_SUFIX;\r\n return TPL_DASH;\r\n }\r\n\r\n /**\r\n * @private\r\n * RIndicates whether the specified log is an error (true), or not (false).\r\n */\r\n protected isError(log: Log): boolean {\r\n const response: HttpResponse<any> | null = log.metadata.response;\r\n if (response) return response.status >= 400;\r\n return false;\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns the resource name for the specified log.\r\n */\r\n protected getResourceName(log: Log): string {\r\n return UrlUtil.getResourceName(log);\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns the resource path for the specified log.\r\n */\r\n protected getResourcePath(log: Log): string {\r\n return UrlUtil.getResourcePath(log);\r\n }\r\n\r\n /**\r\n * @private\r\n * Applies user's filters to the spefivied log (previously unreleased).\r\n */\r\n protected checkFilters(log: Log): boolean {\r\n return true;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n<table id=\"request-list\" >\r\n <thead>\r\n <tr>\r\n <th class=\"name-header\">\r\n Name\r\n <div role=\"button\" title=\"Expand\" class=\"header-btn\" (click)=\"action.sendAction(actionType.CLOSE_DETAILS_PANEL)\">\r\n <svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n @if (this.state.selectedLog) {\r\n <path fill-rule=\"evenodd\" d=\"M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8m-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5\"/>\r\n }\r\n </svg>\r\n </div>\r\n </th>\r\n @if (!this.state.selectedLog) {\r\n <th>Status</th>\r\n <th>Size</th>\r\n <th>Time</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (log of this.state.logs; track log.metadata.requestMetadata.id) {\r\n @if (checkFilters(log)) {\r\n <tr [class.error-row]=\"isError(log)\" role=\"button\" (click)=\"action.sendAction(actionType.LOG_SELECT, log)\"\r\n [class.selected-row]=\"this.state.selectedLog === log\">\r\n <td [title]=\"getResourcePath(log)\">\r\n <atx-icon-renderer [log]=\"log\"/>\r\n <div class=\"resource-cell\">\r\n {{ getResourceName(log) }}\r\n <br>\r\n {{ getResourcePath(log) }}\r\n </div>\r\n </td>\r\n @if (!this.state.selectedLog) {\r\n <td>{{ getStatus(log) }}</td>\r\n <td>{{ getSize(log) }}</td>\r\n <td>{{ getTime(log) }}</td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n</table>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockLoggingConstant } from \"../../../../../model/business/logging/http-mock-logging-constant.enum\";\r\nimport { LogLevel } from \"../../../../../model\";\r\n\r\n/**\r\n * @private\r\n * A utility class that returns a human-readable message depending on the specified level.\r\n */\r\nexport class LogMessageUtil {\r\n \r\n /**\r\n * @private\r\n * Returns a human-readable message depending on the specified level.\r\n * \r\n * @param level The level for which to get the message.\r\n * @returns A string.\r\n */\r\n public static getMessageFromLevel(level: LogLevel): HttpMockLoggingConstant {\r\n if (level === LogLevel.INFO) return HttpMockLoggingConstant.RESPONSE_MESSAGE;\r\n if (level === LogLevel.ERROR) return HttpMockLoggingConstant.ERROR_MESSAGE;\r\n return HttpMockLoggingConstant.CONFIG_MESSAGE;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockRequestMetadata } from \"../../../../../model\";\r\nimport { AtxHttpRequestMetadataDto } from \"../../model/business/io/atx-http-request-metadata.dto.ts\";\r\nimport { Uuid } from \"../../../../../util\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpMockRequestMetadata` objects into `AtxHttpRequestMetadataDto` objects.\r\n */\r\nexport class RequestMetadataConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpMockRequestMetadata` object into an `AtxHttpRequestMetadataDto` object.\r\n * \r\n * @param headers The `HttpMockRequestMetadata` object to convert.\r\n * @returns A new `AtxHttpRequestMetadataDto` object.\r\n */\r\n public static requestMetadataToDto(metadata: HttpMockRequestMetadata): AtxHttpRequestMetadataDto {\r\n return {\r\n duration: metadata.duration,\r\n id: metadata.id.toString(),\r\n stalled: metadata.stalled,\r\n start: metadata.start,\r\n url: metadata.url.toString()\r\n };\r\n }\r\n \r\n /**\r\n * @private\r\n * Converts an `AtxHttpRequestMetadataDto` object into a `HttpMockRequestMetadata` object.\r\n * \r\n * @param headersDto The `AtxHttpRequestMetadataDto` objects to convert.\r\n * @returns A new `HttpMockRequestMetadata` objects.\r\n */\r\n public static dtoToRequestMetadata(dto: AtxHttpRequestMetadataDto): HttpMockRequestMetadata {\r\n return {\r\n duration: dto.duration,\r\n id: Uuid.fromString(dto.id),\r\n stalled: dto.stalled,\r\n start: dto.start,\r\n url: new URL(dto.url)\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { AtxHeaderDto } from \"../../model/business/io/atx-header-dto\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpHeaders` instances into lists of `AtxHeaderDto` objects.\r\n */\r\nexport class HttpHeadersConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpHeaders` instance into a list of `AtxHeaderDto` object.\r\n * \r\n * @param headers The `HttpHeaders` instance to convert.\r\n * @returns A new `AtxHeaderDto` object.\r\n */\r\n public static headersToDto(headers: HttpHeaders): AtxHeaderDto[] {\r\n const dtoList: AtxHeaderDto[] = [];\r\n const keys: string[] = headers.keys();\r\n let cursor: number = keys.length - 1;\r\n for(; cursor >= 0; cursor--) {\r\n const key: string = keys[cursor];\r\n dtoList.push({\r\n name: key,\r\n value: headers.getAll(key)\r\n });\r\n }\r\n return dtoList;\r\n }\r\n\r\n /**\r\n * @private\r\n * Converts a list of `AtxHeaderDto` objects into a `HttpHeaders` instance.\r\n * \r\n * @param headersDto The list of `AtxHeaderDto` objects to convert.\r\n * @returns A new `HttpHeaders` instance.\r\n */\r\n public static dtoToHeaders(headersDto: AtxHeaderDto[]): HttpHeaders {\r\n let headers: HttpHeaders = new HttpHeaders();\r\n let cursor: number = headersDto.length - 1;\r\n for(; cursor >= 0; cursor--) {\r\n const entry: AtxHeaderDto = headersDto[cursor];\r\n const value: string[] | null = entry.value;\r\n if (value) headers = headers.append(entry.name, value);\r\n \r\n }\r\n return headers;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * A utility class that unserialize the `FormData` objects.\r\n */\r\nexport class FormDataSerializer {\r\n\r\n /**\r\n * @private\r\n * Unserializes the specified `FormData` objects.\r\n * \r\n * @param data The string to turn into a `FormData` object.\r\n * @returns A `FormData` object, or null whether the `data` string is not a Array string.\r\n */\r\n public static unserialize(data: string): FormData | null {\r\n const result: FormData = new FormData();\r\n const arr: any[] = JSON.parse(data);\r\n if (!Array.isArray(arr)) return null;\r\n let cursor: number = arr.length - 1;\r\n for(; cursor >= 0; cursor--) {\r\n const entry: string[] = arr[cursor];\r\n result.append(entry[0], entry[1]);\r\n }\r\n return result;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ConsoleBodyType } from \"../console-body-type\";\r\nimport { FormDataSerializer } from \"./form-data-serializer\";\r\n\r\n/**\r\n * @private\r\n * A utility class that serialize and unserialize the objects rendered into the monitoring console.\r\n */\r\nexport class BodySerializer {\r\n\r\n /**\r\n * @private\r\n * Serializes the specified object depending on the `type` parameter.\r\n * \r\n * @param data The object to serialize.\r\n * @param type The type of the object to serialize.\r\n * @returns A string, or `null` whether the object type is not supported.\r\n */\r\n public static serialize(data: any, type: ConsoleBodyType): string | null {\r\n if (type === ConsoleBodyType.TEXT) return data;\r\n if (type === ConsoleBodyType.JSON) return JSON.stringify(data);\r\n if (type === ConsoleBodyType.BLOB) return null;\r\n if (type === ConsoleBodyType.FORM_DATA) return JSON.stringify(Array.from(data));\r\n if (type === ConsoleBodyType.ARRAY_BUFFER) null;\r\n return null;\r\n }\r\n \r\n /**\r\n * @private\r\n * Unserializes the specified string depending on the `type` parameter.\r\n * \r\n * @param data The string to unserialize.\r\n * @param type The type of the object to unserialize.\r\n * @returns An object, or `null` whether the object type is not supported.\r\n */\r\n public static unserialize(data: any, type: ConsoleBodyType): any {\r\n if (type === ConsoleBodyType.TEXT) return data;\r\n if (type === ConsoleBodyType.JSON) return JSON.parse(data);\r\n if (type === ConsoleBodyType.BLOB) return null;\r\n if (type === ConsoleBodyType.FORM_DATA) return FormDataSerializer.unserialize(data);\r\n if (type === ConsoleBodyType.ARRAY_BUFFER) null;\r\n return null;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ConsoleBodyType } from \"../console-body-type\";\r\nimport { DataUtil } from \"../data.util\";\r\nimport { AtxBodyDto } from \"../../model/business/io/atx-body-dto\";\r\nimport { BodySerializer } from \"./body-serializer\";\r\n\r\n/**\r\n * @private\r\n * A utility class that performs conversions between JavaScript objects and `AtxBodyDto` objects.\r\n */\r\nexport class BodyConverter {\r\n\r\n /**\r\n * @private\r\n * Turns a JavaScript object into an `AtxBodyDto` object and returns the result of the conversion.\r\n * \r\n * @param body The JavaScript object to convert.\r\n * @returns An `AtxBodyDto` object.\r\n */\r\n public static bodyToDto(body: any): AtxBodyDto {\r\n const bodyType: ConsoleBodyType = DataUtil.getBodyType(body);\r\n return {\r\n type: bodyType,\r\n data: BodySerializer.serialize(body, bodyType)\r\n };\r\n }\r\n\r\n /**\r\n * @private\r\n * Turns an `AtxBodyDto` object into a JavaScript object and returns the result of the conversion.\r\n * \r\n * @param dto The `AtxBodyDto` object to convert.\r\n * @returns A JavaScript object.\r\n */\r\n public static dtoToBody(dto: AtxBodyDto): any {\r\n return BodySerializer.unserialize(dto.data, dto.type);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpContext, HttpParams, HttpParamsOptions, HttpRequest } from \"@angular/common/http\";\r\nimport { AtxHttpRequestDto } from \"../../model/business/io/atx-http-request.dto\";\r\nimport { HttpHeadersConverter } from \"./log-headers-converter\";\r\nimport { BodyConverter } from \"./body-converter\";\r\nimport { ATX_IS_IMPORTED_LOG } from \"../../model/business/atx-is-imported-log\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpRequest` instances into `AtxHttpRequestDto` objects.\r\n */\r\nexport class HttpRequestConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpRequest` instance into an `AtxHttpRequestDto` object.\r\n * \r\n * @param request The `HttpRequest` instance to convert.\r\n * @returns A new `AtxHttpRequestDto` object.\r\n */\r\n public static buildRequestDto(request: HttpRequest<any>): AtxHttpRequestDto {\r\n return {\r\n body: BodyConverter.bodyToDto(request.body),\r\n reportProgress: request.reportProgress,\r\n withCredentials: request.withCredentials,\r\n responseType: request.responseType,\r\n method: request.method,\r\n url: request.url,\r\n params: request.params.toString(),\r\n headers: HttpHeadersConverter.headersToDto(request.headers)\r\n }\r\n }\r\n \r\n /**\r\n * @private\r\n * Converts an `AtxHttpRequestDto` object into a `HttpRequest` instance.\r\n * \r\n * @param dto The `AtxHttpRequestDto` object to convert.\r\n * @returns A new `HttpRequest` instance.\r\n */\r\n public static buildHttpRequest(dto: AtxHttpRequestDto): HttpRequest<any> {\r\n const ctx: HttpContext = new HttpContext();\r\n const paramsOpt: HttpParamsOptions = {\r\n fromString: dto.params\r\n };\r\n const init: any = {\r\n headers: HttpHeadersConverter.dtoToHeaders(dto.headers),\r\n reportProgress: dto.reportProgress,\r\n responseType: dto.responseType,\r\n withCredentials: dto.withCredentials,\r\n params: new HttpParams(paramsOpt),\r\n context: ctx\r\n };\r\n const body: any = BodyConverter.dtoToBody(dto.body);\r\n const request: HttpRequest<any> = new HttpRequest<any>(dto.method, dto.url, body, init);\r\n ctx.set(ATX_IS_IMPORTED_LOG, true);\r\n return request;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpResponse } from \"@angular/common/http\";\r\nimport { HttpHeadersConverter } from \"./log-headers-converter\";\r\nimport { AtxHttpResponseDto } from \"../../model/business/io/atx-http-response.dto\";\r\nimport { BodyConverter } from \"./body-converter\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpResponse` instances into `AtxHttpResponseDto` objects.\r\n */\r\nexport class HttpResponseConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpResponse` instance into an `AtxHttpResponseDto` object.\r\n * \r\n * @param response The `HttpResponse` instance to convert.\r\n * @returns A new `AtxHttpResponseDto` object.\r\n */\r\n public static buildResponseDto(response: HttpResponse<any>): AtxHttpResponseDto {\r\n return {\r\n body: BodyConverter.bodyToDto(response.body),\r\n headers: HttpHeadersConverter.headersToDto(response.headers),\r\n status: response.status,\r\n statusText: response.statusText,\r\n url: response.url\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * Converts an `AtxHttpResponseDto` object into a `HttpResponse` instance.\r\n * \r\n * @param dto The `AtxHttpResponseDto` object to convert.\r\n * @returns A new `HttpResponse` instance.\r\n */\r\n public static buildHttpResponse(dto: AtxHttpResponseDto): HttpResponse<any> {\r\n const init: any = {\r\n body: BodyConverter.dtoToBody(dto.body),\r\n headers: HttpHeadersConverter.dtoToHeaders(dto.headers),\r\n status: dto.status,\r\n statusText: dto.statusText,\r\n url: dto.url\r\n };\r\n return new HttpResponse(init);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockLoggingMetadata } from \"../../../../../model\";\r\nimport { AtxHttpLogMetadataDto } from \"../../model/business/io/atx-http-log-metadata.dto\";\r\nimport { RequestMetadataConverter } from \"./request-metadata-converter\";\r\nimport { HttpRequestConverter } from \"./http-request-converter\";\r\nimport { HttpResponseConverter } from \"./http-response-converter\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpMockLoggingMetadata` objects into `AtxHttpLogMetadataDto` objects.\r\n */\r\nexport class LogMetadataConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpMockLoggingMetadata` object into an `AtxHttpLogMetadataDto` object.\r\n * \r\n * @param headers The `HttpMockLoggingMetadata` object to convert.\r\n * @returns A new `AtxHttpLogMetadataDto` object.\r\n */\r\n public static metadataToDto(metadata: HttpMockLoggingMetadata): AtxHttpLogMetadataDto {\r\n return {\r\n request: HttpRequestConverter.buildRequestDto(metadata.request),\r\n response: HttpResponseConverter.buildResponseDto(metadata.response),\r\n requestMetadata: RequestMetadataConverter.requestMetadataToDto(metadata.requestMetadata)\r\n };\r\n }\r\n\r\n /**\r\n * @private\r\n * Converts an `AtxHttpLogMetadataDto` object into a `HttpMockLoggingMetadata` object.\r\n * \r\n * @param headersDto The `AtxHttpLogMetadataDto` objects to convert.\r\n * @returns A new `HttpMockLoggingMetadata` objects.\r\n */\r\n public static dtoToMetadata(dto: AtxHttpLogMetadataDto): HttpMockLoggingMetadata {\r\n return {\r\n request: HttpRequestConverter.buildHttpRequest(dto.request),\r\n response: HttpResponseConverter.buildHttpResponse(dto.response),\r\n requestMetadata: RequestMetadataConverter.dtoToRequestMetadata(dto.requestMetadata)\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The type of parameter objects associated with a HTTP call.\r\n */\r\nexport type HttpMockParameters = { [key: string]: any };\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Uuid } from \"../../../../util\";\r\nimport { HTTP_MOCK_SERVICE, HttpMockConfig, HttpMockService } from \"../../../../model\";\r\n\r\n/**\r\n * The definition function for the `@HttpMock` decorator.\r\n * \r\n * @param config The `HttpMockConfig` object used to initialize the HTTP Mocking Framework.\r\n */\r\nexport const HttpMock: Function = (config: HttpMockConfig): Function => {\r\n return (constructor: any)=> {\r\n const getMockService = (instance: any): HttpMockService | undefined => {\r\n return Object.values(instance).find((v: any)=> {\r\n return (v.hasOwnProperty('type') && v.type === HTTP_MOCK_SERVICE);\r\n }) as any;\r\n };\r\n const ngOnInit = constructor.prototype.ngOnInit;\r\n const ngOnDestroy = constructor.prototype.ngOnDestroy;\r\n const uiid: Uuid = config.id || Uuid.build();\r\n if (!ngOnDestroy) throw new ReferenceError(\"Component must implement the OnDestroy interface.\");\r\n if (!ngOnInit) throw new ReferenceError(\"Component must implement the OnInit interface.\");\r\n if (!config.id) config.id = uiid;\r\n constructor.prototype.ngOnInit = function() {\r\n const mockService: HttpMockService | undefined = getMockService(this);\r\n if (!mockService) throw new ReferenceError(\"No provider found for HttpMockService.\");\r\n mockService.addConfig(config);\r\n ngOnInit.call(this);\r\n };\r\n constructor.prototype.ngOnDestroy = function() {\r\n const mockService: HttpMockService | undefined = getMockService(this);\r\n // An exception is already thrown by the ngOnInit() method when HttpMockService is not provided.\r\n // Following check statement prevents failure during Unit Testing:\r\n if (mockService) mockService.removeConfig(uiid);\r\n ngOnDestroy.call(this);\r\n };\r\n };\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\n\r\n/**\r\n * A statefull builder for creating new `HttpHeaders` instances.\r\n */\r\nexport class HttpHeadersMockBuilder {\r\n\r\n /**\r\n * @private\r\n */\r\n private _headers: HttpHeaders = new HttpHeaders();\r\n\r\n /**\r\n * Sets the `\"Cache-Control\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Cache-Control\"` property of the new `HttpHeaders` instance.\r\n * Default value is `\"no-cache\"`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public cacheControl(value: string = \"no-cache\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Cache-Control\", value);\r\n return this;\r\n }\r\n \r\n /**\r\n * Sets the `\"CContent-Type\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Content-Type\"` property of the new `HttpHeaders` instance.\r\n * Default value is `\"application/json; charset=utf-8\"`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public contentType(value: string = \"application/json; charset=utf-8\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Content-Type\", value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"Priority\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Priority\"` property of the new `HttpHeaders` instance.\r\n * Default value is `\"u=0, i\"`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public priority(value: string = \"u=0, i\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Priority\", value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"User-Agent\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"User-Agent\"` property of the new `HttpHeaders` instance.\r\n * Default value is the navigator user agent.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public userAgent(value: string | null = null): HttpHeadersMockBuilder {\r\n this.setHeader(\"User-Agent\", value || navigator.userAgent);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"Accept-Language\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Accept-Language\"` property of the new `HttpHeaders` instance.\r\n * Default value is the navigator language.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public acceptLanguage(value: string | null = null): HttpHeadersMockBuilder {\r\n this.setHeader(\"Accept-Language\", value || navigator.language);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"Accept\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Accept\"` property of the new `HttpHeaders` instance.\r\n * Default value is `'*\\/*'`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public accept(value: string = \"*/*\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Accept\", value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"Accept-Encoding\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Accept-Encoding\"` property of the new `HttpHeaders` instance.\r\n * Default value is `\"ngzip, deflate, br, zstd\"`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public acceptEncoding(value: string = \"gzip, deflate, br, zstd\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Accept-Encoding\", value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets or modifies a value of the new `HttpHeaders` instance.\r\n *\r\n * @param name The header name.\r\n * @param value The value or values to set or override for the given header.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public set(name: string, value: string | string[]): HttpHeadersMockBuilder {\r\n this.setHeader(name, value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Return a new `HttpHeaders` instance, built from the properties specified with the\r\n * `HttpHeadersMockBuilder` methods.\r\n * \r\n * @returns A new `HttpHeaders` instance.\r\n */\r\n public headers(): HttpHeaders {\r\n return this._headers;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private setHeader(name: string, value: string | string[]): void {\r\n const values: string = Array.isArray(value) ? value.join(\", \") : value;\r\n this._headers = this._headers.set(name, values);\r\n }\r\n}\r\n\r\n/**\r\n * A utility function used to create new \"chainable\" `HttpHeadersMockBuilder` instances.\r\n * \r\n * @returns A new `HttpHeadersMockBuilder` instance;\r\n */\r\nexport const httpHeadersMock:()=> HttpHeadersMockBuilder = ()=> new HttpHeadersMockBuilder();","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { httpHeadersMock } from \"./http-headers-mock.builder\";\r\n\r\n/**\r\n * @private\r\n * Internal reference to a new line character.\r\n */\r\nconst CRLF: string = \"\\r\\n\";\r\n\r\n/**\r\n * @private\r\n * A set of static utilities for manipulating `HttpHeaders` objects.\r\n */\r\nexport class HttpHeadersUtil {\r\n\r\n /**\r\n * @private\r\n * Returns a string representation the the specified `HttpHeaders `object, compatible with the format\r\n * expected by the `XMLHttpRequest.getAllResponseHeaders()` method.\r\n * \r\n * @param headers The `HttpHeaders` object to format.\r\n * \r\n * @returns A string compatible with the format expected by the `XMLHttpRequest.getAllResponseHeaders()` method.\r\n */\r\n public static stringify(headers: HttpHeaders | undefined): string {\r\n let result: string = EMPTY_STRING;\r\n if (!headers) return result;\r\n const keys: string[] = headers.keys();\r\n const last: number = keys.length - 1;\r\n keys.forEach((key: string, index: number)=> {\r\n result += `${key}: ${headers.getAll(key)}${index !== last ? CRLF : EMPTY_STRING}`;\r\n });\r\n return result;\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns a `HttpHeaders` object built from the string returns by the `XMLHttpRequest.getAllResponseHeaders()` method,\r\n * or `null` wheher `XMLHttpRequest.getAllResponseHeaders()` return `null`.\r\n * \r\n * @param value The string to turn into a `HttpHeaders `object.\r\n * \r\n * @returns A `HttpHeaders` object, or `null`.\r\n */\r\n public static encode(value: string | null): HttpHeaders | null {\r\n if (value === null) return null;\r\n return new HttpHeaders(value);\r\n }\r\n \r\n /**\r\n * @private\r\n * Creates the default `HttpHeaders` object for a mocked HTTP request.\r\n * \r\n * @returns The default `HttpHeaders` object for a mocked HTTP request.\r\n */\r\n public static createDefaultRequestHeaders(): HttpHeaders {\r\n // \"Accept\" header is set by Angular framework when missing\r\n return httpHeadersMock().cacheControl()\r\n .acceptEncoding()\r\n .acceptLanguage()\r\n .priority()\r\n .userAgent()\r\n .headers();\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A convenient constant that represents the maximum value for a delayed HTTP response.\r\n */\r\nexport const HTTP_MOCK_MAX_DELAY: number = 10000;\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The list of all HTTP status text.\r\n */\r\nexport enum HttpStatusText {\r\n\r\n //https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\r\n // Informational\r\n\r\n /**\r\n * The status text associated with the status code `100`.\r\n */\r\n CONTINUE = \"Continue\",\r\n\r\n /**\r\n * The status text associated with the status code `101`.\r\n */\r\n SWITCHING_PROTOCOLS = \"Switching Protocols\",\r\n\r\n /**\r\n * The status text associated with the status code `102`.\r\n */\r\n PROCESSING = \"Processing\",\r\n \r\n /**\r\n * The status text associated with the status code `103`.\r\n */\r\n EARLY_HINTS = \"Early Hints\",\r\n \r\n // Success\r\n\r\n /**\r\n * The status text associated with the status code `200`.\r\n */\r\n OK = \"OK\",\r\n\r\n /**\r\n * The status text associated with the status code `201`.\r\n */\r\n CREATED = \"Created\",\r\n\r\n /**\r\n * The status text associated with the status code `202`.\r\n */\r\n ACCEPTED = \"Accepted\",\r\n\r\n /**\r\n * The status text associated with the status code `203`.\r\n */\r\n NON_AUTHORITATIVE_INFORMATION = \"Non-authoritative Information\",\r\n\r\n /**\r\n * The status text associated with the status code `204`.\r\n */\r\n NO_CONTENT = \"No Content\",\r\n\r\n /**\r\n * The status text associated with the status code `205`.\r\n */\r\n RESET_CONTENT = \"Reset Content\",\r\n\r\n /**\r\n * The status text associated with the status code `206`.\r\n */\r\n PARTIAL_CONTENT = \"Partial Content\",\r\n\r\n /**\r\n * The status text associated with the status code `207`.\r\n */\r\n MULTI_STATUS = \"Multi-Status\",\r\n\r\n /**\r\n * The status text associated with the status code `208`.\r\n */\r\n ALREADY_REPORTED = \"Already Reported\",\r\n\r\n /**\r\n * The status text associated with the status code `226`.\r\n */\r\n IM_USED = \"IM Used\",\r\n\r\n // Redirection\r\n\r\n /**\r\n * The status text associated with the status code `300`.\r\n */\r\n MULTIPLE_CHOICES = \"Multiple Choices\",\r\n\r\n /**\r\n * The status text associated with the status code `301`.\r\n */\r\n MOVED_PERMANENTLY = \"Moved Permanently\",\r\n\r\n /**\r\n * The status text associated with the status code `302`.\r\n */\r\n FOUND = \"Found\",\r\n\r\n /**\r\n * The status text associated with the status code `303`.\r\n */\r\n SEE_OTHER = \"See Other\",\r\n\r\n /**\r\n * The status text associated with the status code `304`.\r\n */\r\n NOT_MODIFIED = \"Not Modified\",\r\n\r\n /**\r\n * The status text associated with the status code `307`.\r\n */\r\n TEMPORARY_REDIRECT = \"Temporary Redirect\",\r\n\r\n /**\r\n * The status text associated with the status code `308`.\r\n */\r\n PERMANENT_REDIRECT = \"Permanent Redirect\",\r\n\r\n // Client Error\r\n \r\n /**\r\n * The status text associated with the status code `400`.\r\n */\r\n BAD_REQUEST = \"Bad Request\",\r\n\r\n /**\r\n * The status text associated with the status code `401`.\r\n */\r\n UNAUTHORIZED = \"Unauthorized\",\r\n\r\n /**\r\n * The status text associated with the status code `402`.\r\n */\r\n PAYMENT_REQUIRED = \"Payment Required\",\r\n\r\n /**\r\n * The status text associated with the status code `403`.\r\n */\r\n FORBIDDEN = \"Forbidden\",\r\n\r\n /**\r\n * The status text associated with the status code `404`.\r\n */\r\n NOT_FOUND = \"Not Found\",\r\n\r\n /**\r\n * The status text associated with the status code `405`.\r\n */\r\n METHOD_NOT_ALLOWED = \"Method Not Allowed\",\r\n\r\n /**\r\n * The status text associated with the status code `406`.\r\n */\r\n NOT_ACCEPTABLE = \"Not Acceptable\",\r\n\r\n /**\r\n * The status text associated with the status code `407`.\r\n */\r\n PROXY_AUTHENTICATION_REQUIRED = \"Proxy Authentication Required\",\r\n\r\n /**\r\n * The status text associated with the status code `408`.\r\n */\r\n REQUEST_TIMEOUT = \"Request Timeout\",\r\n\r\n /**\r\n * The status text associated with the status code `409`.\r\n */\r\n CONFLICT = \"Conflict\",\r\n\r\n /**\r\n * The status text associated with the status code `410`.\r\n */\r\n GONE = \"Gone\",\r\n\r\n /**\r\n * The status text associated with the status code `411`.\r\n */\r\n LENGTH_REQUIRED = \"Length Required\",\r\n\r\n /**\r\n * The status text associated with the status code `412`.\r\n */\r\n PRECONDITION_FAILED = \"Precondition Failed\",\r\n\r\n /**\r\n * The status text associated with the status code `413`.\r\n */\r\n PAYLOAD_TOO_LARGE = \"Payload Too Large\",\r\n\r\n /**\r\n * The status text associated with the status code `414`.\r\n */\r\n URI_TOO_LONG = \"URI Too Long\",\r\n\r\n /**\r\n * The status text associated with the status code `415`.\r\n */\r\n UNSUPPORTED_MEDIA_TYPE = \"Unsupported Media Type\",\r\n\r\n /**\r\n * The status text associated with the status code `416`.\r\n */\r\n RANGE_NOT_SATISFIABLE = \"Range Not Satisfiable\",\r\n\r\n /**\r\n * The status text associated with the status code `417`.\r\n */\r\n EXPECTATION_FAILED = \"Expectation Failed\",\r\n\r\n /**\r\n * The status text associated with the status code `418`.\r\n */\r\n I_M_A_TEAPOT = \"I'm a teapot\",\r\n\r\n /**\r\n * The status text associated with the status code `421`.\r\n */\r\n MISDIRECTED_REQUEST = \"Misdirected Request\",\r\n\r\n /**\r\n * The status text associated with the status code `422`.\r\n */\r\n UNPROCESSABLE_ENTITY = \"Unprocessable Entity\",\r\n\r\n /**\r\n * The status text associated with the status code `423`.\r\n */\r\n LOCKED = \"Locked\",\r\n\r\n /**\r\n * The status text associated with the status code `424`.\r\n */\r\n FAILED_DEPENDENCY = \"Failed Dependency\",\r\n\r\n /**\r\n * The status text associated with the status code `426`.\r\n */\r\n UPGRADE_REQUIRED = \"Upgrade Required\",\r\n\r\n /**\r\n * The status text associated with the status code `428`.\r\n */\r\n PRECONDITION_REQUIRED = \"Precondition Required\",\r\n\r\n /**\r\n * The status text associated with the status code `429`.\r\n */\r\n TOO_MANY_REQUESTS = \"Too Many Requests\",\r\n\r\n /**\r\n * The status text associated with the status code `431`.\r\n */\r\n REQUEST_HEADER_FIELDS_TOO_LARGE = \"Request Header Fields Too Large\",\r\n\r\n /**\r\n * The status text associated with the status code `451`.\r\n */\r\n UNAVAILABLE_FOR_LEGAL_REASONS = \"Unavailable For Legal Reasons\",\r\n\r\n //Server Error\r\n\r\n /**\r\n * The status text associated with the status code `500`.\r\n */\r\n INTERNAL_SERVER_ERROR = \"Internal Server Error\",\r\n \r\n /**\r\n * The status text associated with the status code `501`.\r\n */\r\n NOT_IMPLEMENTED = \"Not Implemented\",\r\n \r\n /**\r\n * The status text associated with the status code `502`.\r\n */\r\n BAD_GATEWAY = \"Bad Gateway\",\r\n \r\n /**\r\n * The status text associated with the status code `503`.\r\n */\r\n SERVICE_UNAVAILABLE = \"Service Unavailable\",\r\n \r\n /**\r\n * The status text associated with the status code `504`.\r\n */\r\n GATEWAY_TIMEOUT = \"Gateway Timeout\",\r\n \r\n /**\r\n * The status text associated with the status code `505`.\r\n */\r\n HTTP_VERSION_NOT_SUPPORTED = \"HTTP Version Not Supported\",\r\n \r\n /**\r\n * The status text associated with the status code `506`.\r\n */\r\n VARIANT_ALSO_NEGOTIATES = \"Variant Also Negotiates\",\r\n \r\n /**\r\n * The status text associated with the status code `507`.\r\n */\r\n INSUFFICIENT_STORAGE = \"Insufficient Storage\",\r\n \r\n /**\r\n * The status text associated with the status code `508`.\r\n */\r\n LOOP_DETECTED = \"Loop Detected\",\r\n \r\n /**\r\n * The status text associated with the status code `510`.\r\n */\r\n NOT_EXTENDED = \"Not Extended\",\r\n \r\n /**\r\n * The status text associated with the status code `511`.\r\n */\r\n NETWORK_AUTHENTICATION_REQUIRED = \"Network Authentication Required\",\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpStatusCode } from \"@angular/common/http\";\r\nimport { HttpStatusText } from \"./http-status-text.enum\";\r\n\r\n/**\r\n * @private\r\n * A utility class that helps to retreive a status text depending on its status code.\r\n */\r\nexport class HttpStatusTextFinder {\r\n\r\n /**\r\n * @private\r\n * Retreives and return a status text depending on its status code.\r\n * \r\n * @param code The status code for which to find the status text.\r\n * @returns A `HttpStatusText` constant.\r\n */\r\n public static getStatusText(code: HttpStatusCode): HttpStatusText {\r\n if(code === HttpStatusCode.Continue) return HttpStatusText.CONTINUE;\r\n if(code === HttpStatusCode.SwitchingProtocols) return HttpStatusText.SWITCHING_PROTOCOLS;\r\n if(code === HttpStatusCode.Processing) return HttpStatusText.PROCESSING;\r\n if(code === HttpStatusCode.EarlyHints) return HttpStatusText.EARLY_HINTS;\r\n if(code === HttpStatusCode.Ok) return HttpStatusText.OK;\r\n if(code === HttpStatusCode.Created) return HttpStatusText.CREATED;\r\n if(code === HttpStatusCode.Accepted) return HttpStatusText.ACCEPTED;\r\n if(code === HttpStatusCode.NonAuthoritativeInformation) return HttpStatusText.NON_AUTHORITATIVE_INFORMATION;\r\n if(code === HttpStatusCode.NoContent) return HttpStatusText.NO_CONTENT;\r\n if(code === HttpStatusCode.ResetContent) return HttpStatusText.RESET_CONTENT;\r\n if(code === HttpStatusCode.PartialContent) return HttpStatusText.PARTIAL_CONTENT;\r\n if(code === HttpStatusCode.MultiStatus) return HttpStatusText.MULTI_STATUS;\r\n if(code === HttpStatusCode.AlreadyReported) return HttpStatusText.ALREADY_REPORTED;\r\n if(code === HttpStatusCode.ImUsed) return HttpStatusText.IM_USED;\r\n if(code === HttpStatusCode.MultipleChoices) return HttpStatusText.MULTIPLE_CHOICES;\r\n if(code === HttpStatusCode.MovedPermanently) return HttpStatusText.MOVED_PERMANENTLY;\r\n if(code === HttpStatusCode.Found) return HttpStatusText.FOUND;\r\n if(code === HttpStatusCode.SeeOther) return HttpStatusText.SEE_OTHER;\r\n if(code === HttpStatusCode.NotModified) return HttpStatusText.NOT_MODIFIED;\r\n if(code === HttpStatusCode.TemporaryRedirect) return HttpStatusText.TEMPORARY_REDIRECT;\r\n if(code === HttpStatusCode.PermanentRedirect) return HttpStatusText.PERMANENT_REDIRECT;\r\n if(code === HttpStatusCode.BadRequest) return HttpStatusText.BAD_REQUEST;\r\n if(code === HttpStatusCode.Unauthorized) return HttpStatusText.UNAUTHORIZED;\r\n if(code === HttpStatusCode.PaymentRequired) return HttpStatusText.PAYMENT_REQUIRED;\r\n if(code === HttpStatusCode.Forbidden) return HttpStatusText.FORBIDDEN;\r\n if(code === HttpStatusCode.NotFound) return HttpStatusText.NOT_FOUND;\r\n if(code === HttpStatusCode.MethodNotAllowed) return HttpStatusText.METHOD_NOT_ALLOWED;\r\n if(code === HttpStatusCode.NotAcceptable) return HttpStatusText.NOT_ACCEPTABLE;\r\n if(code === HttpStatusCode.ProxyAuthenticationRequired) return HttpStatusText.PROXY_AUTHENTICATION_REQUIRED;\r\n if(code === HttpStatusCode.RequestTimeout) return HttpStatusText.REQUEST_TIMEOUT;\r\n if(code === HttpStatusCode.Conflict) return HttpStatusText.CONFLICT;\r\n if(code === HttpStatusCode.Gone) return HttpStatusText.GONE;\r\n if(code === HttpStatusCode.LengthRequired) return HttpStatusText.LENGTH_REQUIRED;\r\n if(code === HttpStatusCode.PreconditionFailed) return HttpStatusText.PRECONDITION_FAILED;\r\n if(code === HttpStatusCode.PayloadTooLarge) return HttpStatusText.PAYLOAD_TOO_LARGE;\r\n if(code === HttpStatusCode.UriTooLong) return HttpStatusText.URI_TOO_LONG;\r\n if(code === HttpStatusCode.UnsupportedMediaType) return HttpStatusText.UNSUPPORTED_MEDIA_TYPE;\r\n if(code === HttpStatusCode.RangeNotSatisfiable) return HttpStatusText.RANGE_NOT_SATISFIABLE;\r\n if(code === HttpStatusCode.ExpectationFailed) return HttpStatusText.EXPECTATION_FAILED;\r\n if(code === HttpStatusCode.ImATeapot) return HttpStatusText.I_M_A_TEAPOT;\r\n if(code === HttpStatusCode.MisdirectedRequest) return HttpStatusText.MISDIRECTED_REQUEST;\r\n if(code === HttpStatusCode.UnprocessableEntity) return HttpStatusText.UNPROCESSABLE_ENTITY;\r\n if(code === HttpStatusCode.Locked) return HttpStatusText.LOCKED;\r\n if(code === HttpStatusCode.FailedDependency) return HttpStatusText.FAILED_DEPENDENCY;\r\n if(code === HttpStatusCode.UpgradeRequired) return HttpStatusText.UPGRADE_REQUIRED;\r\n if(code === HttpStatusCode.PreconditionRequired) return HttpStatusText.PRECONDITION_REQUIRED;\r\n if(code === HttpStatusCode.TooManyRequests) return HttpStatusText.TOO_MANY_REQUESTS;\r\n if(code === HttpStatusCode.RequestHeaderFieldsTooLarge) return HttpStatusText.REQUEST_HEADER_FIELDS_TOO_LARGE;\r\n if(code === HttpStatusCode.UnavailableForLegalReasons) return HttpStatusText.UNAVAILABLE_FOR_LEGAL_REASONS;\r\n if(code === HttpStatusCode.InternalServerError) return HttpStatusText.INTERNAL_SERVER_ERROR;\r\n if(code === HttpStatusCode.NotImplemented) return HttpStatusText.NOT_IMPLEMENTED;\r\n if(code === HttpStatusCode.BadGateway) return HttpStatusText.BAD_GATEWAY;\r\n if(code === HttpStatusCode.ServiceUnavailable) return HttpStatusText.SERVICE_UNAVAILABLE;\r\n if(code === HttpStatusCode.GatewayTimeout) return HttpStatusText.GATEWAY_TIMEOUT;\r\n if(code === HttpStatusCode.HttpVersionNotSupported) return HttpStatusText.HTTP_VERSION_NOT_SUPPORTED;\r\n if(code === HttpStatusCode.VariantAlsoNegotiates) return HttpStatusText.VARIANT_ALSO_NEGOTIATES;\r\n if(code === HttpStatusCode.InsufficientStorage) return HttpStatusText.INSUFFICIENT_STORAGE;\r\n if(code === HttpStatusCode.LoopDetected) return HttpStatusText.LOOP_DETECTED;\r\n if(code === HttpStatusCode.NotExtended) return HttpStatusText.NOT_EXTENDED;\r\n if(code === HttpStatusCode.NetworkAuthenticationRequired) return HttpStatusText.NETWORK_AUTHENTICATION_REQUIRED;\r\n return HttpStatusText.INTERNAL_SERVER_ERROR;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders, HttpStatusCode } from \"@angular/common/http\";\r\nimport { HttpMockError, HttpResponseMock } from \"../../../../model\";\r\nimport { HttpHeadersUtil } from \"./http-headers.util\";\r\nimport { HTTP_MOCK_MAX_DELAY } from \"./http-mock-max-delay\";\r\nimport { HttpStatusTextFinder } from \"./http-status-text-finder\";\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\n\r\n/**\r\n * A statefull builder for creating new `HttpResponseMock` instances.\r\n */\r\nexport class HttpResponseMockBuilder {\r\n\r\n /**\r\n * @private\r\n */\r\n private _response: HttpResponseMock = {\r\n url: null,\r\n body: null,\r\n status: HttpStatusCode.Ok,\r\n statusText: EMPTY_STRING,\r\n error: null,\r\n delay: 0\r\n };\r\n\r\n /**\r\n * Sets the body property of the new `HttpResponseMock` instance with the specified `body` value.\r\n * \r\n * @param body The value used to set the body property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public body(body: any): HttpResponseMockBuilder {\r\n this._response.body = body;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the headers property of the new `HttpResponseMock` instance with the specified `headers` value.\r\n * \r\n * @param headers The value used to set the `headers` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public headers(headers: HttpHeaders): HttpResponseMockBuilder {\r\n this._response.headers = headers;\r\n return this;\r\n }\r\n\r\n /**\r\n * Add the list of HTTP headers generated by the `HttpHeadersUtil.createDefaultRequestHeaders()`\r\n * to the mock response.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public defaultHeaders(): HttpResponseMockBuilder {\r\n const defaultHeaders: HttpHeaders = HttpHeadersUtil.createDefaultRequestHeaders();\r\n let headers: HttpHeaders | undefined = this._response.headers;\r\n if (headers) {\r\n const keys: string[] = defaultHeaders.keys();\r\n keys.forEach(key=> headers?.append(key, defaultHeaders.get(key) as any))\r\n } else headers = defaultHeaders;\r\n this._response.headers = headers;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `status` property of the new `HttpResponseMock` instance with the specified `status` value.\r\n * \r\n * @param status The value used to set the `status` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public status(status: number): HttpResponseMockBuilder {\r\n this._response.status = status;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `url` property of the new `HttpResponseMock` instance with the specified `url` value.\r\n * \r\n * @param url The value used to set the `url` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public url(url: string | null): HttpResponseMockBuilder {\r\n this._response.url = url;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `delay` property of the new `HttpResponseMock` instance with the specified `timer` duration.\r\n * Maximum value is `10000` miliseconds (10 seconds).\r\n * \r\n * @param timer The value used to set the `delay` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public delay(timer?: number): HttpResponseMockBuilder;\r\n \r\n /**\r\n * Sets the `delay` property of the new `HttpResponseMock` instance with the specified `timer` duration.\r\n * Maximum value is `10000` miliseconds (10 seconds).\r\n * \r\n * @param timer The value used to set the `delay` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public delay(min?: number, max?: number): HttpResponseMockBuilder;\r\n\r\n /**\r\n * @private\r\n * Overload implementation \r\n */\r\n public delay(...arg: any): HttpResponseMockBuilder {\r\n if (arg.length <= 1) {\r\n let timer: number = arg[0] || NaN;\r\n if (isNaN(timer)) {\r\n this._response.delay = HTTP_MOCK_MAX_DELAY - Math.random() * HTTP_MOCK_MAX_DELAY;\r\n return this;\r\n }\r\n if (timer > HTTP_MOCK_MAX_DELAY) {\r\n this._response.delay = HTTP_MOCK_MAX_DELAY;\r\n return this;\r\n }\r\n if (timer < 0) timer = 0;\r\n this._response.delay = timer;\r\n return this;\r\n }\r\n let min: number = arg[0], max: number = arg[1];\r\n if (max > HTTP_MOCK_MAX_DELAY) max = HTTP_MOCK_MAX_DELAY;\r\n if (min < 0 || min > max) min = 0;\r\n this._response.delay = Math.floor(Math.random() * (max - min) + min);\r\n return this;\r\n }\r\n\r\n /**\r\n * Returns a new `HttpResponseMock` instance, built from the properties specified with the\r\n * `HttpResponseMockBuilder` methods.\r\n * \r\n * @param error An optional value used to set the `error` property of the new `HttpResponseMock` instance.\r\n * The `error` parameter values take precedence over all other properties of the `HttpResponseMock`\r\n * instance.\r\n * @returns A new `HttpResponseMock` instance.\r\n */\r\n public response(error: HttpMockError | null = null): HttpResponseMock {\r\n this._response.error = error;\r\n this._response.statusText = HttpStatusTextFinder.getStatusText(this._response.status);\r\n return this._response;\r\n }\r\n}\r\n\r\n/**\r\n * A utility function used to create new \"chainable\" `HttpResponseMockBuilder` instances.\r\n * \r\n * @returns A new `HttpResponseMockBuilder` instance.\r\n */\r\nexport const httpResponseMock:()=> HttpResponseMockBuilder = ()=> new HttpResponseMockBuilder();","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the possible values for the `responseType` property of the\r\n * `FetchClientBuilder.buildFetchClient()` method.\r\n */\r\nexport enum FetchClientResponseType {\r\n\r\n /**\r\n * Allows to return the response as a promise that resolves with an `ArrayBuffer`.\r\n */\r\n ARRAY_BUFFER = \"arrayBuffer\",\r\n \r\n /**\r\n * Allows to return the response as a promise that resolves with a `Blob`.\r\n */\r\n BLOB = \"blob\",\r\n\r\n /**\r\n * Allows to return the response as a promise that resolves with a `FormData` object.\r\n */\r\n FORM_DATA = \"formData\",\r\n\r\n /**\r\n * Allows to return the response as a promise which resolves with the result of parsing the body text as JSON.\r\n */\r\n JSON = \"json\",\r\n \r\n /**\r\n * Allows to return the response as a promise that resolves with a `String`.\r\n * The response is always decoded using UTF-8.\r\n */\r\n TEXT = \"text\",\r\n \r\n /**\r\n * Allows to return the response as a promise that resolves with a `Response` object.\r\n */\r\n RESPONSE = \"response\"\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { FetchClient } from \"../../../../model\";\r\nimport { from } from \"rxjs\";\r\nimport { FetchClientResponseType } from \"./fetch-client-response-type.enum\";\r\n\r\n/**\r\n * A static utility class for building `FetchClient` objects.\r\n */\r\nexport class FetchClientBuilder {\r\n\r\n /**\r\n * Builds and returns a new `FetchClient` object.\r\n * \r\n * @param input The definition of the resource to fetch.\r\n * @param init The object containing options to configure the request.\r\n * @param responseType Specifies the type of response for the resource to fetch.\r\n * \r\n * @returns A new `FetchClient` object.\r\n */\r\n public static buildFetchClient(input: RequestInfo | URL, init: RequestInit | null = null, responseType: FetchClientResponseType = FetchClientResponseType.JSON): FetchClient {\r\n return from(fetch(input, init || undefined).then((response: Response) => {\r\n const rspType: FetchClientResponseType = responseType;\r\n if (response.ok) return rspType !== FetchClientResponseType.RESPONSE ? FetchClientBuilder.buildResponseStrategy(response, rspType) : response;\r\n throw new HttpErrorResponse({\r\n status: response.status,\r\n statusText: response.statusText\r\n });\r\n }));\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private static buildResponseStrategy(response: Response, responseType: FetchClientResponseType): Promise<any>{\r\n if (responseType === FetchClientResponseType.JSON) return response.json();\r\n if (responseType === FetchClientResponseType.BLOB) return response.blob();\r\n if (responseType === FetchClientResponseType.FORM_DATA) return response.formData();\r\n if (responseType === FetchClientResponseType.ARRAY_BUFFER) return response.arrayBuffer();\r\n if (responseType === FetchClientResponseType.TEXT) return response.text();\r\n return response.json();\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * A utility class used by delegate `XhrProxy` instances to dispatch `ProgressEvent`\r\n * instances.\r\n * \r\n * This class is not exposed.\r\n */\r\nexport class ProgressEventMock extends ProgressEvent {\r\n \r\n /**\r\n * @private\r\n */\r\n private _total: number = NaN;\r\n\r\n /**\r\n * A 64-bit unsigned integer indicating the size, in bytes, of the data already\r\n * transmitted or processed. \r\n */\r\n override set total(value: number) {\r\n this._total = value;\r\n }\r\n override get total(): number {\r\n return this._total;\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private _loaded: number = 0;\r\n\r\n /**\r\n * A 64-bit unsigned integer indicating the total size, in bytes, of the data being\r\n * transmitted or processed. \r\n */\r\n override set loaded(value: number) {\r\n this._loaded = value;\r\n }\r\n override get loaded(): number {\r\n return this._loaded;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/benlesh/event-target-polyfill\r\n * - Copyright (c) 2020 Ben Lesh\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/benlesh/event-target-polyfill/blob/master/LICENSE\r\n */\r\n\r\nimport { FUNCTION } from \"../../../../util\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst ADD: string = \"addEventListener\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst REMOVE: string = \"removeEventListener\";\r\n\r\n/**\r\n * @private\r\n * A utility class the provides an implementation for the `EventTarget` interface.\r\n * This class is used internally by the framework; please do not expose it.\r\n * \r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\r\n */\r\nexport class EventTargetImpl implements EventTarget {\r\n\r\n /**\r\n * @private\r\n */\r\n private _listenerList: Map<string, any>;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor() {\r\n this._listenerList = new Map<string, any>();\r\n }\r\n\r\n /**\r\n * @private\r\n * Sets up a function that will be called whenever the specified event is delivered to the target.\r\n * \r\n * @param type a case-sensitive string representing the event type to listen for.\r\n * @param listener the object that receives a notification (an object that implements the\r\n * `Event` interface) when an event of the specified type occurs. \r\n * @param options an object that specifies characteristics about the event listener.\r\n * \r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n */\r\n public addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions | undefined): void {\r\n this.checkArgLength(arguments.length, ADD);\r\n const ll: Map<string, any> = this._listenerList;\r\n if (!ll.has(type)) ll.set(type, new Map());\r\n const listenersForType: Map<any, any> = ll.get(type);\r\n if (!listenersForType.has(listener)) {\r\n // Any given listener is only registered once\r\n listenersForType.set(listener, options);\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * Removes an event listener previously registered with `EventTarget.addEventListener()` from the target. \r\n * \r\n * @param type a case-sensitive which specifies the type of event for which to remove an event listener.\r\n * @param listener the event listener function of the event handler to remove from the event target.\r\n * @param options An options object that specifies characteristics about the event listener.\r\n * \r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\r\n */\r\n public removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions | undefined): void {\r\n this.checkArgLength(arguments.length, REMOVE);\r\n const ll: Map<string, any> = this._listenerList;\r\n if (ll.has(type)) {\r\n const listenersForType: Map<any, any> = ll.get(type);\r\n if (listenersForType.has(listener)) listenersForType.delete(listener);\r\n if (listenersForType.size === 0) ll.delete(type);\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * Sends an `Event` to this to the `Event` object, (synchronously) invoking the affected event listeners\r\n * in the appropriate order.\r\n *\r\n * @param event the `Event object to dispatch. Its Event.target property will be set to the current EventTarget.\r\n * @returns true since there are no cancellable events on a base `EventTarget`.\r\n * \r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent\r\n */\r\n public dispatchEvent(event: Event): boolean {\r\n if (!(event instanceof Event)) {\r\n throw new TypeError(\r\n \"Failed to execute 'dispatchEvent' on 'EventTarget': parameter 1 is not of type 'Event'.\"\r\n );\r\n }\r\n const type: string = event.type;\r\n const ll: Map<string, any> = this._listenerList;\r\n const listenersForType = ll.get(type);\r\n if (!listenersForType) return true;\r\n for (const listnerEntry of listenersForType.entries()) {\r\n const listener: any = listnerEntry[0];\r\n const options: any = listnerEntry[1];\r\n // Listener functions must be executed with the EventTarget as the `this` context.\r\n if (typeof listener === FUNCTION) listener.call(this, event);\r\n // Listener objects have their handleEvent method called, if they have one\r\n else if (listener && typeof listener.handleEvent === FUNCTION) listener.handleEvent(event);\r\n if (options && options.once) listenersForType.delete(listener);\r\n if (listenersForType.size === 0) ll.delete(type);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Checks whether the `EventTarget` object has any listeners registered for a specific type of event.\r\n * \r\n * @param type The type of event.\r\n * \r\n * @return A value of `true` if a listener of the specified type is registered; `false` otherwise.\r\n */\r\n public hasEventListener(type: string): boolean {\r\n return this._listenerList.has(type);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private checkArgLength(argLen: number, method: string): void {\r\n if (argLen < 2) {\r\n throw new TypeError(\r\n `TypeError: Failed to execute '${method}' on 'EventTarget': 2 arguments required, but ${argLen === 1 ? 'only 1' : '0'} present.`\r\n );\r\n }\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventTargetImpl } from \"../event/event-target.impl\";\r\n\r\n/**\r\n * @private\r\n * \r\n * Elemenets marked as \"Useless\" are never invoked by the Angular framework.\r\n */\r\nexport class XhrBase extends EventTargetImpl {\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly UNSENT = 0;\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly OPENED = 1;\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly HEADERS_RECEIVED = 2;\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly LOADING = 3;\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly DONE = 4;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n get responseXML(): Document | null {\r\n return null;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n withCredentials: boolean = false;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n timeout!: number;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onabort: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onerror: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onload: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onloadend: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onloadstart: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onprogress: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onreadystatechange: ((this: XMLHttpRequest, ev: Event) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n ontimeout: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n overrideMimeType(mime: string): void {}\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n getResponseHeader(name: string): string | null { return null }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { HttpMockRequestMetadata, HttpResponseMock } from \"../../../../model\";\r\nimport { DataStorage } from \"../core/data-storage\";\r\n\r\n/**\r\n * @private\r\n * A static utility class for building `DataStorage` objects.\r\n */\r\nexport class DataStorageBuilder {\r\n\r\n /**\r\n * @private\r\n * Builds and returns a new `DataStorage` objects.\r\n * \r\n * @param httpResponse The `HttpResponseMock` to be stored by the framework.\r\n * @param data The data of the HTTP response to be stored by the framework.\r\n * @param metadata The metadata of the HTTP mock request to be stored by the framework.\r\n * \r\n * @returns A new `DataStorage` object.\r\n */\r\n public static buildDataStorage(httpResponse: HttpResponseMock, data: any, metadata: HttpMockRequestMetadata): DataStorage {\r\n // TODO: add support for different data types (string, Blob, etc.)\r\n const stringifiedData: string = data ? JSON.stringify(data) : EMPTY_STRING;\r\n return {\r\n httpResponse: httpResponse,\r\n loaded: 0,\r\n total: data ? new Blob([stringifiedData]).size : 0,\r\n data: data,\r\n stringifiedData: stringifiedData,\r\n requestMetadata: metadata\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpRequest, HttpResponse } from \"@angular/common/http\";\r\nimport { XhrProxy, HttpMockLoggingMetadata, HttpMockRequestMetadata } from \"../../../../model\";\r\nimport { HttpHeadersUtil } from \"../util/http-headers.util\";\r\n\r\n/**\r\n * @private\r\n * A static builder for creating `HttpMockLoggingMetadata` objects.\r\n */\r\nexport class HttpMockLoggingMetadataBuilder {\r\n\r\n /**\r\n * @private\r\n * Creates and returns a new `HttpMockLoggingMetadata` object.\r\n */\r\n public static build(xhr: XhrProxy, request: HttpRequest<any>, requestMetadata: HttpMockRequestMetadata): HttpMockLoggingMetadata {\r\n const responseInit: any = {\r\n body: xhr.response,\r\n status: xhr.status,\r\n statusText: xhr.statusText,\r\n url: xhr.responseURL,\r\n headers: HttpHeadersUtil.encode(xhr.getAllResponseHeaders())\r\n };\r\n const response: HttpResponse<any> = new HttpResponse(responseInit);\r\n return {\r\n request: request,\r\n response: response,\r\n requestMetadata: requestMetadata\r\n };\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ResponseDelay } from \"../core/response-delay\";\r\nimport { HTTP_MOCK_MAX_DELAY } from \"./http-mock-max-delay\";\r\n\r\n/**\r\n * @private\r\n * A utility for managing HTTP responses delay.\r\n */\r\nexport class HttpMockResponseDelayUtil {\r\n\r\n /**\r\n * @private\r\n * A utility function that return a `ResponseDelay` object, depending on the timer parameters.\r\n * \r\n * @param timer The seed value used to create the `ResponseDelay` object.\r\n * @returns A `ResponseDelay` object.\r\n */\r\n public static getResponseDelay(timer: number): ResponseDelay {\r\n let duration: number = timer;\r\n if (timer < 0) duration = 0;\r\n if (timer > HTTP_MOCK_MAX_DELAY) duration = HTTP_MOCK_MAX_DELAY;\r\n return {\r\n stalled: Math.random() * duration,\r\n duration: duration\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders, HttpParams, HttpRequest, HttpStatusCode } from \"@angular/common/http\";\r\nimport { XhrProxy, HttpResponseMock, HttpMethodMock, HttpMockError, HttpMockLoggingService, HttpMockRequestMetadata, HttpMockLoggingMetadata, HttpMockLoggingPrefetchMetadata } from \"../../../../model\";\r\nimport { ProgressEventMock } from \"../event/progress-event-mock\";\r\nimport { EMPTY_STRING, Uuid } from \"../../../../util\";\r\nimport { XhrBase } from \"./xhr-base\";\r\nimport { HttpHeadersUtil } from \"../util/http-headers.util\";\r\nimport { RouteMockConfig } from \"../config/route-mock-config\";\r\nimport { Observable, Subscription, of } from \"rxjs\";\r\nimport { DataStorage } from \"../core/data-storage\";\r\nimport { DataStorageBuilder } from \"../util/data-storage.builder\";\r\nimport { HttpMockLoggingMetadataBuilder } from \"../logging/http-mock-logging-metadata.builder\";\r\nimport { HttpMockResponseDelayUtil } from \"../util/http-mock-response-delay.util\";\r\nimport { ResponseDelay } from \"../core/response-delay\";\r\n\r\n/**\r\n * @private\r\n * Intenal \"onreadystatechange\" event.\r\n */\r\nconst READY_STATE_CHANGE_EVENT: Event = new Event(\"onreadystatechange\");\r\n\r\n/**\r\n * @private\r\n */\r\nconst EVT_PROPS_CONFIG: any = { writable: false, value: this };\r\n\r\n/**\r\n * @private\r\n * A utility class used as delegate of `XMLHttpRequest` functionalities when\r\n * a HTTP request is intercepted by the Mocking Framework .\r\n */\r\nexport class DelegateXhr extends XhrBase implements XhrProxy {\r\n \r\n /**\r\n * @private\r\n * Indicates whether the progressive download is activated, or not.\r\n */\r\n private _progressiveDownload: boolean = false;\r\n\r\n /**\r\n * @private\r\n * The config for the intercepted route.\r\n */\r\n private _routeConfig: RouteMockConfig;\r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for HTTP response `data`.\r\n */\r\n private _dataStorage: DataStorage = null as any; \r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `method`.\r\n */\r\n private _method: unknown; \r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request URL.\r\n */\r\n private _url: unknown; \r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `readyState`.\r\n */\r\n private _readyState: number = this.UNSENT;\r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `headers`.\r\n */\r\n private _requestHeaders: HttpHeaders = null as any;\r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `status`.\r\n */\r\n private _status: number = 0;\r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `statusText`.\r\n */\r\n private _statusText: string = EMPTY_STRING;\r\n\r\n /**\r\n * @private\r\n */\r\n private _loadSubscription: Subscription | null = null;\r\n\r\n /**\r\n * Returns the response body content.\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/response\r\n */\r\n get response(): any {\r\n return this._dataStorage?.data || null;\r\n }\r\n\r\n /**\r\n * Returns the numerical HTTP status code of the `XMLHttpRequest` response.\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/status\r\n */\r\n get status(): number {\r\n return this._status;\r\n }\r\n\r\n /**\r\n * Returns a string containing the response status message as returned by the HTTP server.\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/statusText\r\n */\r\n get statusText(): string {\r\n return this._statusText;\r\n }\r\n\r\n /**\r\n * Returns the state the `XMLHttpRequest` client is in.\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/readyState\r\n */\r\n get readyState(): number {\r\n return this._readyState;\r\n }\r\n\r\n /**\r\n * Returns the serialized URL of the response or the empty string if the URL is `null`. \r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/responseURL\r\n */\r\n get responseURL(): string {\r\n return this._url as string;\r\n }\r\n\r\n /**\r\n * Returns the text received from a server following a request being sent.\r\n *\r\n * Throws an `InvalidStateError` DOMException if responseType is not the empty string or \"text\".\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/responseText\r\n */\r\n get responseText(): string {\r\n return this._dataStorage?.stringifiedData || EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Returns an `XMLHttpRequestUpload` object that can be observed to monitor an upload progress. \r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/upload\r\n */\r\n get upload(): XMLHttpRequestUpload {\r\n return null as any;\r\n }\r\n \r\n /**\r\n * Returns an an enumerated string value specifying the type of data contained in the response. \r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType\r\n */\r\n responseType: XMLHttpRequestResponseType = EMPTY_STRING as any;\r\n\r\n /**\r\n * Initializes a newly-created request, or re-initializes an existing one.\r\n * \r\n * @param method The HTTP request method to use, such as `\"GET\"`, `\"POST\"`, `\"PUT\"`, `\"DELETE\"`,\r\n * etc. Ignored for non-HTTP(S) URLs.\r\n * @param url A string or any other object with a stringifier — including a URL object —\r\n * that provides the URL of the resource to send the request to.\r\n */\r\n open(method: string, url: string | URL): void;\r\n /**\r\n * @private\r\n */\r\n open(method: string, url: string | URL, async: boolean, username?: string | null | undefined, password?: string | null | undefined): void;\r\n /**\r\n * @private\r\n */\r\n open(method: unknown, url: unknown, async?: unknown, username?: unknown, password?: unknown): void {\r\n this._method = method;\r\n this._url = url;\r\n this.setReadyState(this.OPENED);\r\n }\r\n\r\n /**\r\n * Aborts the request if it has already been sent. When a request is aborted, its `readyState`\r\n * is changed to `XMLHttpRequest.UNSENT` and the request status code is set to `0`.\r\n */\r\n abort(): void {\r\n this._readyState = this.UNSENT;\r\n this._status = 0;\r\n this.eventDispatch(\"abort\");\r\n }\r\n\r\n /**\r\n * Returns all the response headers, separated by CRLF, as a string, or returns `null`\r\n * if no response has been received.\r\n * \r\n * @returns All the response headers, separated by CRLF, as a string, or returns `null`\r\n * if no response has been received.\r\n */\r\n getAllResponseHeaders(): any {\r\n if (this._readyState < this.HEADERS_RECEIVED) return null;\r\n const respHeaders: HttpHeaders | undefined = this._dataStorage?.httpResponse.headers;\r\n if (respHeaders) return HttpHeadersUtil.stringify(respHeaders);\r\n return null;\r\n }\r\n\r\n /**\r\n * Sends the request to the server.\r\n * \r\n * @param body A body of data to be sent in the XHR request.\r\n */\r\n send(body?: Document | XMLHttpRequestBodyInit | null | undefined): void {\r\n const start: number = this.now();\r\n const request: HttpRequest<any> = this.buildHttpRequest(body);\r\n const rc: RouteMockConfig = this._routeConfig;\r\n const httpResponseMock: HttpResponseMock = (rc.methodConfig as any).data(request, rc.parameters);\r\n const responseDelay: ResponseDelay = HttpMockResponseDelayUtil.getResponseDelay(httpResponseMock.delay || 0);\r\n const timer: number = responseDelay.duration;\r\n const requestMetadata: HttpMockRequestMetadata = {\r\n start: start,\r\n stalled: responseDelay.stalled,\r\n duration: timer,\r\n url: new URL(this._url as any),\r\n id: Uuid.build()\r\n };\r\n const prefetchMetadata: HttpMockLoggingPrefetchMetadata = {\r\n request: request,\r\n requestMetadata: requestMetadata\r\n };\r\n this._logger.prefetch(prefetchMetadata);\r\n this._loadSubscription = this.loadData(httpResponseMock).subscribe({\r\n next: (data: any) => {\r\n this.setDataStorage(httpResponseMock, requestMetadata, data);\r\n const error: HttpMockError | null = this._dataStorage.httpResponse.error;\r\n setTimeout(()=> {\r\n this.setReadyState(this.HEADERS_RECEIVED);\r\n if (error) return this.onError(request, error);\r\n this.setReadyState(this.LOADING);\r\n const response: HttpResponseMock = this._dataStorage.httpResponse;\r\n if (!this._progressiveDownload) {\r\n this._statusText = response.statusText || EMPTY_STRING;\r\n this._status = response.status || 0;\r\n return this.onLoadComplete(request);\r\n }\r\n this.doProgressiveDownload(request);\r\n }, timer);\r\n },\r\n error: (err: any) => {\r\n this.setDataStorage(httpResponseMock, requestMetadata);\r\n this.onError(request, err);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets the value of an HTTP request header.\r\n * \r\n * @param name The name of the header whose value is to be set.\r\n * @param value The value to set as the body of the header.\r\n */\r\n setRequestHeader(name: string, value: string): void {\r\n this._requestHeaders = this._requestHeaders.set(name, value);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n constructor(routeConfig: RouteMockConfig,\r\n private _logger: HttpMockLoggingService) {\r\n super();\r\n this._routeConfig = routeConfig;\r\n // routeConfig.methodConfig.downloadManager\r\n this._progressiveDownload = false;\r\n this._requestHeaders = new HttpHeaders();\r\n }\r\n \r\n /**\r\n * @private \r\n * Internally used by the framework to delete a `DelegateXhr` instance.\r\n */\r\n public destroy(): void {\r\n this._routeConfig = null as any;\r\n this._requestHeaders = null as any;\r\n this._dataStorage = null as any;\r\n if (this._loadSubscription) {\r\n this._loadSubscription.unsubscribe();\r\n this._loadSubscription = null;\r\n }\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private doProgressiveDownload(request: HttpRequest<any>): void {\r\n const total: number = this._dataStorage.total;\r\n if (total <= 200) {\r\n console.warn(\"[Angular Toolbox]: Body content is too small for emulating progressive download! Minimum size is 200 octets.\");\r\n return this.onLoadComplete(request);\r\n }\r\n // TODO: ameliorate the following process:\r\n const self: DelegateXhr = this;\r\n const chunckSize: number = Math.floor(total / 10);\r\n let cursor: number = 0;\r\n this._statusText = \"Partial Content\";\r\n this._status = HttpStatusCode.PartialContent;\r\n const idx = setInterval(()=> {\r\n cursor += chunckSize;\r\n if (cursor > total) {\r\n cursor = total;\r\n clearInterval(idx);\r\n self.onLoadComplete(request);\r\n } else {\r\n this._dataStorage.loaded = cursor;\r\n self.dispatchProgressEvent();\r\n }\r\n }, 100);\r\n }\r\n\r\n private finalizeRequestMetadata(): HttpMockRequestMetadata {\r\n const ds: DataStorage = this._dataStorage;\r\n const metadata: HttpMockRequestMetadata = ds.requestMetadata;\r\n const duration: number = this.now() - metadata.start;\r\n if (duration > metadata.duration) metadata.duration = duration;\r\n return metadata;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private onLoadComplete(request: HttpRequest<any>): void {\r\n this._dataStorage.loaded = this._dataStorage.total;\r\n this.setReadyState(this.DONE);\r\n this.dispatchProgressEvent(\"load\");\r\n this._logger.info(this.buildMetadata(request));\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private onError(request: HttpRequest<any>, error: HttpMockError): void {\r\n this._status = error.status;\r\n this._statusText = error.statusText;\r\n this.setReadyState(this.DONE);\r\n this.dispatchProgressEvent(\"error\");\r\n this._logger.error(this.buildMetadata(request));\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private buildMetadata(request: HttpRequest<any>): HttpMockLoggingMetadata {\r\n return HttpMockLoggingMetadataBuilder.build(this, request, this.finalizeRequestMetadata());\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private eventDispatch(type: string): void {\r\n const event: Event = new Event(type);\r\n Object.defineProperty(event, 'target', EVT_PROPS_CONFIG);\r\n Object.defineProperty(event, 'currentTarget', EVT_PROPS_CONFIG);\r\n this.dispatchEvent(event);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private dispatchProgressEvent(type: string = \"progress\"): void {\r\n const d: any = this._dataStorage;\r\n const event: ProgressEventMock = new ProgressEventMock(type);\r\n event.loaded = d.loaded;\r\n event.total = d.total;\r\n this.dispatchEvent(event);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private setReadyState(state: number): void {\r\n this._readyState = state;\r\n const event: any = this.onreadystatechange;\r\n if (event) event.call(this, READY_STATE_CHANGE_EVENT);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private loadData(httpResponseMock: HttpResponseMock): Observable<any> {\r\n const responseBody: any | Observable<any> = httpResponseMock.body;\r\n return (responseBody instanceof Observable) ? responseBody : of(responseBody);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private setDataStorage(responseMock: HttpResponseMock, requestMetadata: HttpMockRequestMetadata, data: any = null): void {\r\n this._dataStorage = DataStorageBuilder.buildDataStorage(responseMock, data, requestMetadata);\r\n }\r\n \r\n /**\r\n * @private \r\n */\r\n private buildHttpRequest(body: any): HttpRequest<any> {\r\n let params: HttpParams = new HttpParams();\r\n const it: IterableIterator<[string, string]> = (this._routeConfig.searchParams as any).entries();\r\n for (const pair of it) params = params.set(pair[0], pair[1]);\r\n const init: any = {\r\n params: params,\r\n headers: this._requestHeaders,\r\n withCredentials: this.withCredentials,\r\n responseType: this.responseType,\r\n reportProgress: this.hasEventListener(\"progress\")\r\n // context, transferCache: not used by Angular at this level of API\r\n };\r\n return new HttpRequest<any>(this._method as string, this._url as any, body, init);\r\n }\r\n\r\n private now(): number {\r\n return Date.now();\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockService } from \"../../../../model/service/mock/http/http-mock.service\";\r\nimport { HttpMockLoggingService, XhrProxy } from \"../../../../model\";\r\nimport { DelegateXhr } from \"./delegate-xhr\";\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { XhrBase } from \"./xhr-base\";\r\nimport { RouteMockConfig } from \"../config/route-mock-config\";\r\nimport { HTTPMethodRef } from \"../util/http-method-ref.enum\";\r\n\r\n/**\r\n * @private\r\n * An error used as reference for unit testing.\r\n * Angular framework calls `XMLHttpRequest` method only after the `open()` method invokation.\r\n */\r\nconst XHR_ERROR: (method: string)=>void = (method: string)=> {\r\n throw new Error(`Attempt to call ${method}() method before calling open().`)\r\n};\r\n\r\n/**\r\n * @private\r\n * A XHR proxy that is used by the Mocking Framework to apply HTTP call strategies.\r\n */\r\nexport class XhrProxyImpl extends XhrBase implements XhrProxy {\r\n\r\n /**\r\n * @private\r\n * Stores an internal XMLHttpRequestobject used as delegate,\r\n * depending on the testing strategy defined by the config file.\r\n */\r\n private XHR!: XhrProxy;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get response(): any {\r\n return this.XHR ? this.XHR.response : undefined;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get status(): number {\r\n return this.XHR ? this.XHR.status : 0;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get statusText(): string {\r\n return this.XHR ? this.XHR.statusText : EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get readyState(): number {\r\n return this.XHR ? this.XHR.readyState : this.UNSENT;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get responseURL(): string {\r\n return this.XHR ? this.XHR.responseURL : EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get responseText(): string {\r\n return this.XHR ? this.XHR.responseText : EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get responseType(): XMLHttpRequestResponseType {\r\n return this.XHR ? this.XHR.responseType : EMPTY_STRING as XMLHttpRequestResponseType;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n set responseType(value: XMLHttpRequestResponseType) {\r\n if(!this.XHR) XHR_ERROR(\"responseType\");\r\n this.XHR.responseType = value;\r\n }\r\n\r\n get upload(): XMLHttpRequestUpload {\r\n return this.XHR.upload;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n open(method: string, url: string | URL): void;\r\n open(method: string, url: string | URL, async: boolean, username?: string | null | undefined, password?: string | null | undefined): void;\r\n open(method: unknown, url: unknown, async?: unknown, username?: unknown, password?: unknown): void {\r\n const m: string = (method as string).toString().toLowerCase();\r\n const parsedUrl: URL = URL.canParse(url as string) ? new URL(url as string) : new URL(this._httpMockService.getAppOrigin() + url);\r\n const config: RouteMockConfig | undefined = this._httpMockService.getRouteConfig(parsedUrl, m as HTTPMethodRef);\r\n if (this.XHR && this.XHR instanceof DelegateXhr) this.XHR.destroy();\r\n this.XHR = config ? new DelegateXhr(config, this._logger) : new XMLHttpRequest();\r\n this.XHR.withCredentials = this.withCredentials;\r\n this.XHR.open(m.toString(), parsedUrl.toString());\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n abort(): void {\r\n if (this.XHR) return this.XHR.abort();\r\n XHR_ERROR(\"abort\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n getAllResponseHeaders(): any {\r\n return this.XHR ? this.XHR.getAllResponseHeaders() : null;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n override addEventListener(type: unknown, listener: unknown, options?: unknown): void {\r\n if (this.XHR) return this.XHR.addEventListener(type as any, listener as any, options as any);\r\n XHR_ERROR(\"addEventListener\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n override removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\r\n if (this.XHR) return this.XHR.removeEventListener(type as any, listener as any, options as any);\r\n XHR_ERROR(\"removeEventListener\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n send(body?: Document | XMLHttpRequestBodyInit | null | undefined): void {\r\n if (this.XHR) return this.XHR.send(body);\r\n XHR_ERROR(\"send\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n setRequestHeader(name: string, value: string): void {\r\n if (this.XHR) return this.XHR.setRequestHeader(name, value);\r\n XHR_ERROR(\"setRequestHeader\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * For Unit Testing only.\r\n */\r\n public instanceOf(classRef: any): boolean {\r\n return this.XHR instanceof classRef;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _httpMockService: HttpMockService,\r\n private _logger: HttpMockLoggingService) {\r\n super();\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { XhrFactory } from \"@angular/common\";\r\nimport { HttpMockService } from \"../../../../model/service/mock/http/http-mock.service\";\r\nimport { XhrProxyImpl } from \"./xhr-proxy-impl\";\r\nimport { HttpMockLoggingService } from \"../../../../model\";\r\n\r\n/**\r\n * @private\r\n * The concrete implementation of the `XhrFactory` interface.\r\n */\r\nexport class XhrProxyFactoryImpl extends XhrFactory {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _httpMockService: HttpMockService,\r\n private _logger: HttpMockLoggingService) {\r\n super();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public build(): XMLHttpRequest {\r\n return new XhrProxyImpl(this._httpMockService, this._logger);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { inject } from \"@angular/core\";\r\nimport { HttpMockService } from \"../../../../model/service/mock/http/http-mock.service\";\r\nimport { XhrProxyFactoryImpl } from \"./http-mock-factory.impl\";\r\nimport { HttpMockLoggingService } from \"../../../../model\";\r\n\r\n/**\r\n * A factory function that creates and returns a new `XhrFactory` object.\r\n * \r\n * @returns A new `XhrFactory` object.\r\n */\r\nexport const httpMockFactory = ()=> {\r\n return new XhrProxyFactoryImpl(inject(HttpMockService), inject(HttpMockLoggingService));\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { HttpParameterDescriptor } from '../../../../../model';\r\nimport { SafeHtmlPipe } from '../../../../../pipe';\r\n\r\n/**\r\n * @private\r\n * Displays documentation for HTTP fragment parameters, or query parameters.\r\n */\r\n@Component({\n selector: 'atx-mock-param',\n imports: [\n SafeHtmlPipe\n ],\n templateUrl: './atx-mock-param.component.html',\n styleUrl: './atx-mock-param.component.scss'\n})\r\nexport class AtxMockParamComponent {\r\n\r\n /**\r\n * @private\r\n * The list of `HttpParameterDescriptor` object that contains information to display.\r\n */\r\n @Input()\r\n public params!: HttpParameterDescriptor[];\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (params) {\r\n <div class=\"atx-mock-param-container\">\r\n @for (param of params; track param) {\r\n <dl class=\"param\">\r\n <dt><code>{{ param.ref }}</code></dt>\r\n <dd [innerHTML]=\"param.description | safeHtml\"></dd>\r\n </dl>\r\n }\r\n </div>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { SafeHtmlPipe } from '../../../../../pipe';\r\n\r\n/**\r\n * @private\r\n * A conmponent that renders mock config description ppoperties.\r\n */\r\n@Component({\n selector: 'atx-mock-description',\n imports: [\n SafeHtmlPipe\n ],\n templateUrl: './atx-mock-description.component.html'\n})\r\nexport class AtxMockDescriptionComponent {\r\n\r\n /**\r\n * @private\r\n * The description to render. Can contains HTML tags.\r\n */\r\n @Input()\r\n public description!: string;\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<div [innerHTML]=\"description | safeHtml\"></div>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { AtxMockDescriptionComponent } from '../atx-mock-description/atx-mock-description.component';\r\nimport { FullDescription } from '../../model/business/full-description.type';\r\n\r\n/**\r\n * @private\r\n * A convenient component that displays the description and the origin of a mock config section.\r\n */\r\n@Component({\n selector: 'atx-mock-full-description',\n imports: [\n AtxMockDescriptionComponent\n ],\n templateUrl: './atx-mock-full-description.component.html'\n})\r\nexport class AtxMockFullDescriptionComponent {\r\n\r\n /**\r\n * @public\r\n * The config object taht contains the description to display.\r\n */\r\n @Input()\r\n public config!: FullDescription;\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n@if (config) {\r\n <div class=\"description\">\r\n @if (config.description) {\r\n <atx-mock-description [description]=\"config.description\"/>\r\n }\r\n @if (config.origin) {\r\n <dl>\r\n <dt>origin:</dt>\r\n <dd><a [href]=\"config.origin\" [title]=\"config.origin\"><code>{{ config.origin }}</code></a></dd>\r\n </dl>\r\n }\r\n </div>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { AtxMockParamComponent } from '../atx-mock-param/atx-mock-param.component';\r\nimport { AtxMockDescriptionComponent } from '../atx-mock-description/atx-mock-description.component';\r\nimport { HttpMethodMock, HttpMockEndpoint } from '../../../../../model';\r\nimport { MethodDocDescriptor } from '../../model/business/method-doc-descriptor.type';\r\n\r\n/**\r\n * @private\r\n */\r\nconst ROUTE: string = \"route\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst DESCRIPTOR: string = \"descriptor\";\r\n\r\n/**\r\n * @private\r\n * A convenient component that allows to display documentation for HTTP methods of an endpoint.\r\n */\r\n@Component({\n selector: 'atx-mock-methods',\n imports: [\n AtxMockParamComponent,\n AtxMockDescriptionComponent\n ],\n templateUrl: './atx-mock-methods.component.html'\n})\r\nexport class AtxMockMethodsComponent {\r\n \r\n /**\r\n * @private\r\n */\r\n protected methods: MethodDocDescriptor[] = [];\r\n\r\n /**\r\n * @private\r\n */\r\n private _endpoint!: HttpMockEndpoint;\r\n\r\n /**\r\n * @private\r\n * The endpoint for which to show HTTP methods documentation.\r\n */\r\n @Input()\r\n public set endpoint(value: HttpMockEndpoint) {\r\n this._endpoint = value;\r\n this.methods = this.initMethodList(value);\r\n }\r\n public get endpoint(): HttpMockEndpoint {\r\n return this._endpoint;\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n protected initMethodList(endpoint: HttpMockEndpoint): MethodDocDescriptor[] {\r\n const keys: string[] = Object.keys(endpoint);\r\n const methods: MethodDocDescriptor[] = [];\r\n keys.forEach(key =>{\r\n if (key !== ROUTE && key !== DESCRIPTOR) {\r\n const mock: HttpMethodMock = (endpoint as any)[key];\r\n methods.push({\r\n method: key,\r\n descriptor: mock.descriptor\r\n });\r\n }\r\n });\r\n return methods;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n@if (methods.length) {\r\n <h3>Methods</h3>\r\n <ul>\r\n @for (item of methods; track item; let last = $last) {\r\n <li>\r\n <span>{{ item.method }}</span>\r\n @if (item.descriptor) {\r\n <div class=\"method-descriptor\">\r\n @if (item.descriptor.description) {\r\n <atx-mock-description [description]=\"item.descriptor.description\"/>\r\n }\r\n @if (item.descriptor.payload) {\r\n <dl>\r\n <dt>payload:</dt>\r\n <dd [innerHTML]=\"item.descriptor.payload\"></dd>\r\n </dl>\r\n }\r\n @if (item.descriptor.body) {\r\n <dl>\r\n <dt>body:</dt>\r\n <dd [innerHTML]=\"item.descriptor.body\"></dd>\r\n </dl>\r\n }\r\n @if (item.descriptor.queryParams) {\r\n <h4>Query Parameters</h4>\r\n <atx-mock-param [params]=\"item.descriptor.queryParams\"/>\r\n }\r\n </div>\r\n \r\n }\r\n </li>\r\n @if (!last) {\r\n <hr>\r\n }\r\n }\r\n </ul>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, ElementRef, Input } from '@angular/core';\r\nimport { HttpMockConfig } from '../../../../../model';\r\nimport { EMPTY_STRING } from '../../../../../util';\r\nimport { AtxMockParamComponent } from '../atx-mock-param/atx-mock-param.component';\r\nimport { AtxMockDescriptionComponent } from '../atx-mock-description/atx-mock-description.component';\r\nimport { AtxMockFullDescriptionComponent } from '../atx-mock-full-description/atx-mock-full-description.component';\r\nimport { AtxMockMethodsComponent } from '../atx-mock-methods/atx-mock-methods.component';\r\n\r\n/**\r\n * @private\r\n */\r\nconst OPEN: string = \"open\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst DETAILS: string = \"details\";\r\n\r\n/**\r\n * An easy-to-use component that displays the documentation of a `HttpMockConfig` object.\r\n */\r\n@Component({\n selector: 'atx-mock-documentation',\n imports: [\n AtxMockParamComponent,\n AtxMockDescriptionComponent,\n AtxMockFullDescriptionComponent,\n AtxMockMethodsComponent\n ],\n templateUrl: './atx-mock-documentation.component.html',\n styleUrl: './atx-mock-documentation.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxMockDocumentation {\r\n\r\n /**\r\n * @private\r\n */\r\n protected configApi!: HttpMockConfig;\r\n\r\n /**\r\n * @private\r\n */\r\n protected expanded: boolean = false;\r\n\r\n /**\r\n * Specifies the title of the current display.\r\n */\r\n @Input()\r\n public title: string = \"HTTP Mock API\";\r\n\r\n /**\r\n * Gets or sets the `HttpMockConfig` object for which to display documentation.\r\n */\r\n @Input()\r\n public set config(value: HttpMockConfig) {\r\n this.configApi = value;\r\n this.expanded = false;\r\n }\r\n public get config(): HttpMockConfig {\r\n return this.configApi;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private elmRef: ElementRef) {}\r\n\r\n /**\r\n * @private\r\n */\r\n protected toggleExpandState(): void {\r\n const details: HTMLDetailsElement[] = this.elmRef.nativeElement.querySelectorAll(DETAILS);\r\n this.expanded = !this.expanded;\r\n if (this.expanded) return details.forEach((elm: HTMLDetailsElement) => elm.setAttribute(OPEN, EMPTY_STRING));\r\n details.forEach((elm: HTMLDetailsElement) => elm.removeAttribute(OPEN));\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n@if (configApi) {\r\n <section>\r\n <h1>{{ title }}</h1>\r\n <h2>Description</h2>\r\n @if (configApi.description || configApi.origin) {\r\n <atx-mock-full-description [config]=\"configApi\"/>\r\n }\r\n </section>\r\n <section>\r\n <h2>Interceptors</h2>\r\n <button (click)=\"toggleExpandState()\">{{ expanded ? 'Collapse' : 'Expand' }} all</button>\r\n @if (configApi.interceptors) {\r\n @for (inteceptor of configApi.interceptors; track inteceptor) {\r\n <details>\r\n <summary>\r\n {{ inteceptor.id }}\r\n </summary>\r\n @if (inteceptor.description || inteceptor.origin) {\r\n <atx-mock-full-description [config]=\"inteceptor\"/>\r\n }\r\n @for (endpoint of inteceptor.endpoints; track endpoint; let last = $last) {\r\n <section class=\"endpoint\">\r\n <dl>\r\n <dt>route:</dt>\r\n <dd><code>{{ endpoint.route }}</code></dd>\r\n </dl>\r\n @if (endpoint.descriptor) {\r\n @if (endpoint.descriptor.description) {\r\n <atx-mock-description [description]=\"endpoint.descriptor.description\"/>\r\n }\r\n @if (endpoint.descriptor.params) {\r\n <h3>Parameters</h3>\r\n <atx-mock-param [params]=\"endpoint.descriptor.params\"/>\r\n }\r\n }\r\n <atx-mock-methods [endpoint]=\"endpoint\"/>\r\n </section>\r\n @if (!last) {\r\n <hr>\r\n }\r\n }\r\n </details>\r\n }\r\n }\r\n </section>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the possible values used to assign properties of type of `DialogBackdrop`.\r\n */\r\nexport enum DialogBackdropType {\r\n\r\n /**\r\n * Indicates that the dialog element is of type of \"static\".\r\n */\r\n STATIC = \"static\",\r\n\r\n /**\r\n * Indicates that the dialog element is of type of \"modal\".\r\n */\r\n MODAL = \"modal\"\r\n};\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Indicates the type of a dialog backdrop element.\r\n */\r\nexport type DialogBackdrop = \"modal\" | \"static\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Specifies the event type of `DialogOutletEvent` instances.\r\n */\r\nexport type DialogOutletEventType = \"show\" | \"hide\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DialogOutletEventType } from \"./dialog-outlet-event-type\";\r\nimport { DialogConfig } from \"./dialog.config\";\r\n\r\n/**\r\n * Event that indicates the state changes of components managed by the `DialogService` service singleton.\r\n */\r\nexport class DialogOutletEvent {\r\n\r\n /**\r\n * The type of event dispatched each time the dialog element is displayed.\r\n */\r\n public static readonly SHOW: DialogOutletEventType = \"show\";\r\n\r\n /**\r\n * The type of event dispatched each time the dialog element is removed.\r\n */\r\n public static readonly HIDE: DialogOutletEventType = \"hide\";\r\n\r\n /**\r\n * A `DialogOutletEventType` value that indicates the state of the dialog element.\r\n */\r\n public readonly state: DialogOutletEventType;\r\n\r\n /**\r\n * The dialog element config associated with an event of type of `\"show\"`. \r\n * `config` is set to `null` when the event is of type of `\"hide\"`.\r\n */\r\n public readonly config: DialogConfig | null;\r\n\r\n /**\r\n * @private\r\n * \r\n * Creates a new `DialogOutletEvent` instance.\r\n * \r\n * @param state The state of the dialog element.\r\n * @param config The dialog element config associated with this event.\r\n */\r\n constructor(state: DialogOutletEventType, config: DialogConfig | null = null) {\r\n this.state = state;\r\n this.config = config;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DialogBackdropType } from \"./dialog-backdrop-type.enum\";\r\nimport { DialogBackdrop } from \"./dialog-backdrop.type\";\r\n\r\n/**\r\n * Defines the configuration associated with a custom component displayed through the Dialog API.\r\n */\r\nexport interface DialogConfig {\r\n\r\n /**\r\n * Indicates whether the dialog is modal, or static.\r\n */\r\n backdrop?: DialogBackdrop | DialogBackdropType;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DialogBackdropType } from './dialog-backdrop-type.enum';\r\nimport { DialogConfig } from './dialog.config';\r\n\r\n/**\r\n * @private\r\n */\r\nexport const DEFAULT_CONFIG: DialogConfig = {\r\n backdrop: DialogBackdropType.MODAL\r\n};\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"DialogServiceError\";\r\n\r\n/**\r\n * The `DialogServiceError` class represents errors thrown by the ATX framework\r\n * when a dialog error occurs.\r\n */\r\nexport class DialogServiceError extends Error {\r\n\r\n /**\r\n * Creates a new `DialogServiceError` instance.\r\n * \r\n * @param message The `message` data property is a human-readable description of this `DialogServiceError` instance.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ComponentRef, EventEmitter, Injectable, ViewContainerRef } from \"@angular/core\";\r\nimport { DialogOutletEvent } from \"./dialog-outlet.event\";\r\nimport { DialogConfig } from \"./dialog.config\";\r\nimport { DialogServiceError } from \"./dialog-service.error\";\r\n\r\n/**\r\n * The `DialogService` class manages injection of customs component into the\r\n * HTML dialog element created by the ATX framework.\r\n */\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class DialogService {\r\n\r\n /**\r\n * Dispatches an event that indicates the state of the dialog element when a custom\r\n * component is added to, or remove from it.\r\n */\r\n public readonly dialogStateChange: EventEmitter<DialogOutletEvent> = new EventEmitter();\r\n\r\n /**\r\n * @private\r\n */\r\n protected viewContainerRef!: ViewContainerRef;\r\n\r\n /**\r\n * Creates an instance of the `compRef` class, adds this instance to the HTML dialog element\r\n * and displays the dialog element in front of all other components in the application.\r\n * \r\n * @param compRef The class that represents the component to display as a popup element.\r\n * @param config The dialog element config associated with the new component instance to display.\r\n * \r\n * @returns The new `ComponentRef` which contains the component instance and the host view.\r\n */\r\n public show<T>(compRef: any, config: DialogConfig | null = null): ComponentRef<T> {\r\n if (!this.viewContainerRef) throw new DialogServiceError(\"DialogOutlet missing: you must add the <atx-dialog-outlet/> tag to your application before using dialog services.\");\r\n const component: ComponentRef<T> = this.viewContainerRef.createComponent<T>(compRef);\r\n const event: DialogOutletEvent = new DialogOutletEvent(DialogOutletEvent.SHOW, config);\r\n this.dialogStateChange.emit(event);\r\n return component;\r\n }\r\n\r\n /**\r\n * Indicates to the ATX framework to remove component instances previously created with\r\n * the `show()` method.\r\n */\r\n public hide(): void {\r\n const event: DialogOutletEvent = new DialogOutletEvent(DialogOutletEvent.HIDE);\r\n this.dialogStateChange.emit(event);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public __init__(viewContainerRef: ViewContainerRef): boolean {\r\n if (this.viewContainerRef !== undefined) return false;\r\n this.viewContainerRef = viewContainerRef;\r\n return true;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, ElementRef, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { DialogOutletEvent } from './dialog-outlet.event';\r\nimport { DialogOutletEventType } from './dialog-outlet-event-type';\r\nimport { DialogConfig } from './dialog.config';\r\nimport { DEFAULT_CONFIG } from './dialog-default-config';\r\nimport { DialogBackdropType } from './dialog-backdrop-type.enum';\r\nimport { DialogService } from './dialog-service';\r\n\r\n/**\r\n * Acts as a placeholder that the ATX framework dynamically fills based on the component specified\r\n * by the dialog service `show()` method.\r\n */\r\n@Component({\r\n selector: 'atx-dialog-outlet',\r\n standalone: true,\r\n template: '<dialog #dialog (mouseup)=\"mouseupHandler($event)\" (close)=\"onClose($event)\"><ng-container #renderer></ng-container></dialog>',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DialogOutlet implements OnInit {\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"dialog\")\r\n private _dialog!: ElementRef<HTMLDialogElement>;\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"renderer\", { static: true, read: ViewContainerRef })\r\n private renderer!: ViewContainerRef;\r\n\r\n /**\r\n * @private\r\n */\r\n private _config!: DialogConfig;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private dialogSvc: DialogService) {}\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnInit(): void {\r\n this.dialogSvc.__init__(this.renderer);\r\n this.dialogSvc.dialogStateChange.subscribe((event: DialogOutletEvent)=> this.stateChange(event));\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected mouseupHandler(event: MouseEvent): void {\r\n if (this._config.backdrop !== DialogBackdropType.MODAL) return;\r\n const rect: DOMRect = this._dialog.nativeElement.getBoundingClientRect();\r\n const xPos: number = event.clientX;\r\n const yPos: number = event.clientY;\r\n const top: number = rect.top;\r\n const left: number = rect.left;\r\n const isDialog: boolean = (top <= yPos && yPos <= top + rect.height && left <= xPos && xPos <= left + rect.width);\r\n if (!isDialog) this.hide();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected onClose(event: Event): void {\r\n this.renderer.clear();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private stateChange(event: DialogOutletEvent): void {\r\n const state: DialogOutletEventType = event.state;\r\n if (state === DialogOutletEvent.SHOW) return this.show(event);\r\n if (state === DialogOutletEvent.HIDE) this.hide();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private show(event: DialogOutletEvent): void {\r\n this._config = event.config || DEFAULT_CONFIG;\r\n this._dialog.nativeElement.showModal();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private hide(): void {\r\n this._dialog.nativeElement.close();\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nexport * from \"./dialog-backdrop-type.enum\";\r\nexport * from \"./dialog-backdrop.type\";\r\nexport * from \"./dialog-outlet-event-type\";\r\nexport * from \"./dialog-outlet.event\";\r\nexport * from \"./dialog.config\";\r\nexport * from \"./dialog.outlet\";\r\nexport * from \"./dialog-service\";\r\nexport * from \"./dialog-service.error\";","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockLoggingConstant } from \"../../../../../model/business/logging/http-mock-logging-constant.enum\";\r\nimport { Log, LogLevel } from \"../../../../../model\";\r\nimport { AtxHttpLogDto } from \"../../model/business/io/atx-http-log.dto\";\r\nimport { LogMessageUtil } from \"./log-message.util\";\r\nimport { LogMetadataConverter } from \"./log-metadata-converter\";\r\nimport { LogBuilder } from \"../../../../../framework\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `Log` objects into `AtxHttpLogDto` objects.\r\n */\r\nexport class LogConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `object` object into an `AtxHttpLogDto` object.\r\n * \r\n * @param log The `Log` object to convert.\r\n * @returns A new `AtxHttpLogDto` object.\r\n */\r\n public static logToDto(log: Log): AtxHttpLogDto {\r\n return {\r\n level: log.level,\r\n timestamp: log.timestamp,\r\n metadata: LogMetadataConverter.metadataToDto(log.metadata)\r\n };\r\n }\r\n\r\n /**\r\n * @private\r\n * Converts an `AtxHttpLogDto` object into a `Log` object.\r\n * \r\n * @param dto The `AtxHttpLogDto` object to convert.\r\n * @returns A new `Log` object.\r\n */\r\n public static dtoToLog(dto: AtxHttpLogDto): Log {\r\n const level: LogLevel = dto.level;\r\n return LogBuilder.build(\r\n HttpMockLoggingConstant.CALLER,\r\n LogMessageUtil.getMessageFromLevel(level),\r\n level,\r\n LogMetadataConverter.dtoToMetadata(dto.metadata)\r\n );\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AtxHttpLogDto } from \"../../model/business/io/atx-http-log.dto\";\r\nimport { HMFL } from \"../../model/business/io/hmfl\";\r\n\r\n/**\r\n * @private\r\n * A utility class that creates `HMFL` objects.\r\n */\r\nexport class HMFLBuilder {\r\n\r\n /**\r\n * @private\r\n * Creates and returns a new `HMFL` object.\r\n * \r\n * @param logDtoList The list of serialized logs to include in the new `HMFL` object.\r\n * @returns A new `HMFL` object.\r\n */\r\n public static build(logDtoList: AtxHttpLogDto[]): HMFL {\r\n return {\r\n logs: logDtoList,\r\n timestamp: Date.now()\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable } from \"@angular/core\";\r\nimport { HttpMockLoggingMetadata, HttpMockLoggingService, Log, LogLevel } from '../../../../../model';\r\nimport { LogConverter } from \"../../util/io/log-converter\";\r\nimport { AtxHttpLogDto } from \"../business/io/atx-http-log.dto\";\r\nimport { HMFL } from \"../business/io/hmfl\";\r\nimport { formatDate } from \"@angular/common\";\r\nimport { HMFLBuilder } from \"../../util/io/hmfl-builder\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst BLOB_TYPE: any = { type: 'application/json' };\r\n\r\n/**\r\n * @private\r\n */\r\nconst UTF8: any = \"UTF-8\";\r\n\r\n/**\r\n * @private\r\n * The service responsible for exporting and importing `hmfl` log files.\r\n */\r\n@Injectable()\r\nexport class AtxLogIoService {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _logger: HttpMockLoggingService) {}\r\n\r\n /**\r\n * @private\r\n * Exports the specified logs into a hmfl file.\r\n * \r\n * @param logs The logs to exports.\r\n */\r\n public exportFile(logs: Log[]): void {\r\n const logDtoList: AtxHttpLogDto[] = [];\r\n let cursor: number = logs.length - 1;\r\n for (; cursor >= 0; cursor--) {\r\n const log: Log = logs[cursor];\r\n if (log.level !== LogLevel.CONFIG) logDtoList.push(LogConverter.logToDto(log));\r\n }\r\n const exportData: HMFL = HMFLBuilder.build(logDtoList);\r\n const a: HTMLAnchorElement = document.createElement(\"a\");\r\n const file: Blob = new Blob([JSON.stringify(exportData)], BLOB_TYPE);\r\n const timeFmt: string = formatDate(exportData.timestamp, \"MM/dd/yy-hh:mm-a\", \"en-US\");\r\n a.href = URL.createObjectURL(file);\r\n a.download = `logs-${timeFmt}.hmfl`;\r\n a.click();\r\n }\r\n\r\n /**\r\n * @private\r\n * Imports the logs loaded through the specified `FileList` object.\r\n * \r\n * @param fileList The logs to import.\r\n */\r\n public importFile(fileList: FileList): void {\r\n const logger: HttpMockLoggingService = this._logger;\r\n const files: File = fileList[0];\r\n const killReader: Function = this.killReader;\r\n if (files) {\r\n const reader: FileReader = new FileReader();\r\n reader.readAsText(files, UTF8);\r\n reader.onload = ()=> {\r\n const result: string = reader.result as any;\r\n const resultLogData: HMFL = JSON.parse(result);\r\n const logs: AtxHttpLogDto[] = resultLogData.logs;\r\n let cursor: number = logs.length - 1;\r\n for (; cursor >= 0; cursor--) {\r\n const log: Log = LogConverter.dtoToLog(logs[cursor]);\r\n const metadata: HttpMockLoggingMetadata = log.metadata;\r\n const level: LogLevel = log.level;\r\n if (level === LogLevel.INFO) logger.info(metadata);\r\n else if (level === LogLevel.ERROR) logger.error(metadata);\r\n };\r\n killReader(reader);\r\n }\r\n reader.onerror = (e)=> {\r\n killReader(reader);\r\n console.log(e)\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private killReader(reader: FileReader): void {\r\n reader.onload = null;\r\n reader.onerror = null;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter } from \"@angular/core\";\r\nimport { Log, LogConnector, LogLevel } from \"../../../../model\";\r\n\r\n/**\r\n * @private\r\n * An implementation of the `LogConnector` class that sends logs to the HTTP\r\n * mocking console component.\r\n */\r\nexport class HttpMonitoringConsoleLogConnector implements LogConnector {\r\n\r\n /**\r\n * @private\r\n */\r\n public readonly logs: Log[] = [];\r\n\r\n /**\r\n * @private\r\n */\r\n public readonly change: EventEmitter<Log> = new EventEmitter(true);\r\n\r\n /**\r\n * @private\r\n */\r\n public destroy(): void {\r\n this.clearLogs();\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n public init(logList: Log[]): void {\r\n this.logs.push(...logList);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public sendLog(log: Log): void {\r\n const level: LogLevel = log.level;\r\n if (level === LogLevel.INFO || level === LogLevel.ERROR) this.logs.push(log);\r\n this.change.emit(log);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public clearLogs(): void {\r\n this.logs.length = 0;\r\n }\r\n\r\n /**\r\n * @private\r\n * Not supported.\r\n */\r\n public copyLogs(): void {}\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { HttpMockLoggingService, Log, SubscriptionService } from '../../../../../model';\r\nimport { AtxLogIoService } from \"./atx-log-io.service\";\r\nimport { AtxMonitoringConsoleState } from \"./atx-monitoring-console.state\";\r\nimport { HttpMonitoringConsoleLogConnector } from \"../../connector/http-monitoring-console-log-connector\";\r\nimport { IdentifiableComponent } from '../../../../../core';\r\nimport { AtxConsoleAction } from \"../business/atx-console-action\";\r\nimport { AtxConsoleActionType } from \"../business/atx-console-action-type\";\r\nimport { AtxUserActionService } from \"./atx-user-action.service\";\r\n\r\n/**\r\n * @private\r\n * The service that manages user interactions with an `AtxMonitoringConsoleComponent` instance.\r\n */\r\n@Injectable()\r\nexport class AtxMonitoringConsoleController extends IdentifiableComponent implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n protected connector: HttpMonitoringConsoleLogConnector;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _logger: HttpMockLoggingService,\r\n private _state: AtxMonitoringConsoleState,\r\n private _ioSvc: AtxLogIoService,\r\n private _subscribe: SubscriptionService,\r\n action: AtxUserActionService) {\r\n super(\"AtxMonitoringConsoleController\");\r\n const connector: HttpMonitoringConsoleLogConnector = new HttpMonitoringConsoleLogConnector();\r\n const logs: Log[] = this._logger.getLogs();\r\n this.connector = connector;\r\n this._subscribe.register(this, connector.change.subscribe((log: Log)=> this.addLog(log)))\r\n .append(action.action.subscribe((action: AtxConsoleAction)=> this.onAction(action)));\r\n this.connector.init(logs)\r\n this._state.init(logs);\r\n this._logger.setLogConnector(connector);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this._subscribe.clearAll(this);\r\n this._logger.setLogConnector(null);\r\n this.connector.destroy();\r\n this.connector = null as any;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private clearLogs(): void {\r\n this._logger.clearLogs();\r\n this._state.clearLogs();\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private exportLogs(): void {\r\n this._ioSvc.exportFile(this._state.logs);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private addLog(log: Log): void {\r\n this._state.addLog(log);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private onAction(action: AtxConsoleAction): void {\r\n switch(action.type) {\r\n case AtxConsoleActionType.CLEAR_LOGS : this.clearLogs(); break;\r\n case AtxConsoleActionType.EXPORT_LOGS: this.exportLogs(); break;\r\n case AtxConsoleActionType.IMPORT_LOGS: this._ioSvc.importFile(action.data); break;\r\n case AtxConsoleActionType.LOG_SELECT: this._state.selectLog(action.data); break;\r\n case AtxConsoleActionType.CLOSE_DETAILS_PANEL: this._state.selectLog(null); break;\r\n }\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, ViewEncapsulation } from '@angular/core';\r\nimport { AtxRequestDetailsComponent } from '../request-details/request-details.component';\r\nimport { AtxConsoleFooterComponent } from '../console-footer/console-footer.component';\r\nimport { AtxConsoleMenuComponent } from '../console-menu/console-menu.component';\r\nimport { AtxRequestListRendererComponent } from '../renderer/request-list-renderer/request-list-renderer.component';\r\nimport { AtxMonitoringConsoleState } from '../../model/service/atx-monitoring-console.state';\r\nimport { AtxLogIoService } from '../../model/service/atx-log-io.service';\r\nimport { AtxMonitoringConsoleController } from '../../model/service/atx-monitoring-console.controller';\r\nimport { AtxUserActionService } from '../../model/service/atx-user-action.service';\r\n\r\n/**\r\n * @private\r\n * The main component used to layout the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-http-monitoring-console',\r\n imports: [\r\n AtxRequestDetailsComponent,\r\n AtxConsoleFooterComponent,\r\n AtxConsoleMenuComponent,\r\n AtxRequestListRendererComponent\r\n ],\r\n templateUrl: './http-monitoring-console.component.html',\r\n styleUrl: './http-monitoring-console.component.scss',\r\n providers: [\r\n AtxMonitoringConsoleState,\r\n AtxLogIoService,\r\n AtxMonitoringConsoleController,\r\n AtxUserActionService\r\n ],\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class AtxMonitoringConsoleComponent {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected state: AtxMonitoringConsoleState,\r\n //--> Conponent scope services:\r\n private _ctrl: AtxMonitoringConsoleController,\r\n private _io: AtxLogIoService,\r\n private _input: AtxUserActionService) {}\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<atx-console-menu/>\r\n<div id=\"log-list-vieport\">\r\n <div class=\"request-list-wrapper\" [class.reduced-request-list]=\"state.selectedLog\">\r\n <atx-request-list-renderer />\r\n </div>\r\n @if (state.selectedLog) {\r\n <div id=\"selected-log-viewport\">\r\n <atx-monitoring-console-details [log]=\"state.selectedLog\"/>\r\n </div>\r\n }\r\n</div>\r\n<atx-console-footer/>\r\n\r\n<svg id=\"icon-collection\">\r\n <symbol id=\"json-icon\" viewBox=\"0 0 16 16\">\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n <path d=\"M8.646 6.646a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L10.293 9 8.646 7.354a.5.5 0 0 1 0-.708m-1.292 0a.5.5 0 0 0-.708 0l-2 2a.5.5 0 0 0 0 .708l2 2a.5.5 0 0 0 .708-.708L5.707 9l1.647-1.646a.5.5 0 0 0 0-.708\"/>\r\n </symbol>\r\n <symbol id=\"bin-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M5.526 13.09c.976 0 1.524-.79 1.524-2.205 0-1.412-.548-2.203-1.524-2.203-.978 0-1.526.79-1.526 2.203 0 1.415.548 2.206 1.526 2.206zm-.832-2.205c0-1.05.29-1.612.832-1.612.358 0 .607.247.733.721L4.7 11.137a7 7 0 0 1-.006-.252m.832 1.614c-.36 0-.606-.246-.732-.718l1.556-1.145q.005.12.005.249c0 1.052-.29 1.614-.829 1.614m5.329.501v-.595H9.73V8.772h-.69l-1.19.786v.688L8.986 9.5h.05v2.906h-1.18V13h3z\"/>\r\n <path d=\"M4 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1\"/>\r\n </symbol>\r\n <symbol id=\"text-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M10.943 6H5.057L5 8h.5c.18-1.096.356-1.192 1.694-1.235l.293-.01v5.09c0 .47-.1.582-.898.655v.5H9.41v-.5c-.803-.073-.903-.184-.903-.654V6.755l.298.01c1.338.043 1.514.14 1.694 1.235h.5l-.057-2z\"/>\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n </symbol>\r\n <symbol id=\"empty-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n </symbol>\r\n <symbol id=\"blob-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M8.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\"/>\r\n <path d=\"M12 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2M3 2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v8l-2.083-2.083a.5.5 0 0 0-.76.063L8 11 5.835 9.7a.5.5 0 0 0-.611.076L3 12z\"/>\r\n </symbol>\r\n</svg>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { AtxMonitoringConsoleComponent } from \"../../../../../framework/mock/http-monitoring-console\";\r\nimport { Uuid } from \"../../../../../util\";\r\nimport { WindowService } from \"../../../ui\";\r\nimport { WindowFeatureState, WindowInit, WindowRef } from \"../../../../business\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst NO: WindowFeatureState = WindowFeatureState.NO;\r\n\r\n/**\r\n * @private\r\n */\r\nexport const FEATURES: WindowInit = {\r\n left: 100,\r\n top: 100,\r\n width: 800,\r\n height: 450,\r\n directories: NO,\r\n titlebar: NO,\r\n scrollbars: NO,\r\n toolbar: NO,\r\n location: NO,\r\n status: NO,\r\n menubar: NO,\r\n title: \"HTTP Mocking Framework Console\",\r\n icon: \"data:image/png;base64,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\"\r\n};\r\n\r\n/**\r\n * Provides functionality to display the ATX monitoring console within a new window.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AtxHttpMockConsoleService implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n private _uuid: Uuid | null = null;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _windowSrv: WindowService) {}\r\n\r\n /**\r\n * Opens the ATX monitoring console within a new window and returns reference objects\r\n * to control it.\r\n */\r\n public open(): void {\r\n if (this._uuid) return;\r\n this._uuid = this._windowSrv.open(AtxMonitoringConsoleComponent, FEATURES);\r\n }\r\n\r\n /**\r\n * Closes the ATX monitoring console currently opened within a popup window.\r\n */\r\n public close(): void {\r\n if (!this._uuid) return;\r\n this._windowSrv.close(this._uuid);\r\n this._uuid = null;\r\n }\r\n\r\n /**\r\n * Returns reference to the opened popup window.\r\n * \r\n * @returns A `WindowRef` object, or undefined if the ATX monitoring console is not opened.\r\n */\r\n public getWindowRef(): WindowRef<AtxMonitoringConsoleComponent, Window> | undefined {\r\n if (!this._uuid) return undefined;\r\n return this._windowSrv.get(this._uuid);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.close();\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { AbstractLogger } from \"../../../framework\";\r\nimport { ATX_LOGGER_CONFIG, LogConnector, LoggerConfig } from \"../../business\";\r\n\r\n/**\r\n * A convenient high-level singleton that implements the `Logger` interface.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoggerService extends AbstractLogger {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(@Inject(ATX_LOGGER_CONFIG) @Optional() config: LoggerConfig) {\r\n super();\r\n if (config) {\r\n const connector: LogConnector | undefined = config.logConnector;\r\n if (connector) this.setLogConnector(connector);\r\n }\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { IdentifiableComponent } from '../../core';\r\nimport { DropdownEvent, DropdownEventType, DropdownHorizontalPosition, DropdownState, DropdownVerticalPosition, PopoverState } from '../../model';\r\n\r\n/**\r\n * @private\r\n */\r\nconst API_MATCH: string = ':popover-open';\r\n\r\n/**\r\n * The ATX dropdown component allows to create popup containers that are displayed by clicking on a button.\r\n * The content of the container is defined by Developer.\r\n * This component is part of the LAF-less API.\r\n */\r\n@Component({\r\n selector: 'atx-dropdown',\r\n standalone: true,\r\n templateUrl: './dropdown.component.html',\r\n styleUrl: './dropdown.component.scss'\r\n})\r\nexport class DropdownComponent extends IdentifiableComponent {\r\n\r\n /**\r\n * An event fired on the dropdown component just after it is shown or hidden.\r\n */\r\n @Output()\r\n public readonly toggle: EventEmitter<DropdownEvent> = new EventEmitter();\r\n\r\n /**\r\n * An event fired on the dropdown component just before it is shown or hidden.\r\n */\r\n @Output()\r\n public readonly beforeToggle: EventEmitter<DropdownEvent> = new EventEmitter();\r\n\r\n /**\r\n * Sets the dropdown button CSS class.\r\n */\r\n @Input()\r\n public buttonClass!: string;\r\n\r\n /**\r\n * Sets the dropdown conpoment CSS class.\r\n */\r\n @Input()\r\n public containerClass!: string;\r\n\r\n /**\r\n * Sets the vertical position of the content container.\r\n */\r\n @Input()\r\n public vPos: DropdownVerticalPosition = \"bottom\";\r\n\r\n /**\r\n * Sets the horizontal position of the content container.\r\n */\r\n @Input()\r\n public hPos: DropdownHorizontalPosition = \"left\";\r\n \r\n /**\r\n * Indicates whether the content container can be \"light dismissed\" by selecting outside the popover area\r\n * (`auto`), or not (`manual`).\r\n */\r\n @Input()\r\n public popoverState: PopoverState = \"auto\";\r\n\r\n /**\r\n * The disabled property sets or returns whether a dropdown is disabled, or not.\r\n */\r\n @Input()\r\n public set disabled(value: boolean) {\r\n this._disabled = this._button.nativeElement.disabled = value;\r\n if (!value) return;\r\n this.hideContent();\r\n }\r\n public get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n protected id!: string;\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"popover\")\r\n private _popover!: ElementRef;\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"button\")\r\n private _button!: ElementRef;\r\n\r\n /**\r\n * @private\r\n */\r\n private _disabled: boolean = false;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor() {\r\n super();\r\n this.id = this.getID().toString();\r\n }\r\n\r\n /**\r\n * Hides the dropdown container.\r\n */\r\n public hideContent(): void {\r\n if (!this._popover) return;\r\n this._popover.nativeElement.hidePopover();\r\n }\r\n\r\n /**\r\n * Displays the dropdown container.\r\n */\r\n public showContent(): void {\r\n if (!this._popover || this._disabled) return;\r\n this._popover.nativeElement.showPopover();\r\n }\r\n\r\n /**\r\n * Returns the display state of the dropdown.\r\n * \r\n * @returns Returns `true` whether the dropdown is opened; `false` otherwise.\r\n */\r\n public isOpened(): boolean {\r\n if (!this._popover) return false;\r\n return this._popover.nativeElement.matches(API_MATCH);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected onBeforeToggle(event: Event): void {\r\n this.beforeToggle.emit(\r\n this.buildEvent(event as ToggleEvent, DropdownEventType.BEFORE_TOGGLE)\r\n );\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected onToggle(event: Event): void {\r\n this.toggle.emit(\r\n this.buildEvent(event as ToggleEvent, DropdownEventType.TOGGLE)\r\n );\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private buildEvent(event: ToggleEvent, type: DropdownEventType): DropdownEvent {\r\n return new DropdownEvent(this, type, event.newState as DropdownState, event.oldState as DropdownState);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n<div class=\"atx-dropdown-container\" [class]=\"containerClass\">\r\n <button #button [class]=\"buttonClass\" [attr.popovertarget]=\"id\">\r\n <ng-content></ng-content>\r\n </button>\r\n <div #popover [attr.popover]=\"popoverState\" [attr.id]=\"id\" (toggle)=\"onToggle($event)\" (beforetoggle)=\"onBeforeToggle($event)\"></div>\r\n <div class=\"atx-dropdown-popover\"\r\n [class.atx-dropdown-v-start]=\"vPos === 'start'\"\r\n [class.atx-dropdown-top]=\"vPos === 'top'\"\r\n [class.atx-dropdown-middle]=\"vPos === 'middle'\"\r\n [class.atx-dropdown-bottom]=\"vPos === 'bottom'\"\r\n [class.atx-dropdown-v-end]=\"vPos === 'end'\"\r\n [class.atx-dropdown-h-start]=\"hPos === 'start'\"\r\n [class.atx-dropdown-left]=\"hPos === 'left'\"\r\n [class.atx-dropdown-center]=\"hPos === 'center'\"\r\n [class.atx-dropdown-right]=\"hPos === 'right'\"\r\n [class.atx-dropdown-h-end]=\"hPos === 'end'\"\r\n [class.atx-dropdown-centered]=\"hPos === 'center' && vPos === 'middle'\">\r\n <ng-content select=\"[content]\"></ng-content>\r\n </div>\r\n</div>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input, HostBinding, ElementRef, EventEmitter } from '@angular/core';\r\nimport { LayoutConstraints, LayoutRegion } from '../../../model';\r\n\r\n/**\r\n * @private\r\n */\r\nconst PX: string = \"px\";\r\n\r\n/**\r\n * A container that defines the region of a `BorderLayout` component instance.\r\n */\r\n@Component({\r\n selector: 'atx-border-layout-container',\r\n templateUrl: './border-layout-container.component.html',\r\n styleUrls: ['./border-layout-container.component.scss'],\r\n standalone: true\r\n})\r\nexport class BorderLayoutContainer {\r\n\r\n /**\r\n * @private\r\n * Indicates to the parent `BorderLayout` instance that the user starts to resize this container.\r\n */\r\n public readonly resizeStart: EventEmitter<BorderLayoutContainer> = new EventEmitter(false);\r\n \r\n /**\r\n * @private\r\n */\r\n public selected: Boolean = false;\r\n\r\n /**\r\n * Gets the CSS class associated with the region constraint of the `BorderLayoutContainer` object.\r\n */\r\n @HostBinding('class')\r\n get class(): string {\r\n return this.region;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected region!: LayoutRegion;\r\n \r\n /**\r\n * @private\r\n */\r\n protected resizable: boolean = false;\r\n\r\n /**\r\n * @private\r\n */\r\n private atxConstraints!: LayoutConstraints;\r\n\r\n /**\r\n * @private\r\n */\r\n private size!: number;\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly style: CSSStyleDeclaration;\r\n\r\n /**\r\n * Gets or sets the constraints for this `BorderLayoutContainer` object.\r\n */\r\n public get constraints(): LayoutConstraints {\r\n return this.atxConstraints;\r\n }\r\n @Input()\r\n public set constraints(constraints: LayoutConstraints) {\r\n this.atxConstraints = constraints;\r\n this.region = constraints.region as LayoutRegion;\r\n if(constraints.resizable) this.initHandle();\r\n else this.resizable = false;\r\n this.setSize(constraints.size);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private elRef: ElementRef) {\r\n this.style = this.elRef.nativeElement.style;\r\n }\r\n\r\n /**\r\n * Sets the size of this container depending on the specified region.\r\n * \r\n * @param size The new size for this container, in pixels.\r\n */\r\n public setSize(size: number | undefined): void {\r\n const r: LayoutRegion = this.region;\r\n if (r === LayoutRegion.CENTER) return;\r\n if (r === LayoutRegion.NORTH || r === LayoutRegion.SOUTH) {\r\n this.size = size ? size : 50;\r\n this.style.height = this.size + PX;\r\n return;\r\n }\r\n if (r === LayoutRegion.EAST || r === LayoutRegion.WEST) {\r\n this.size = size ? size : 100;\r\n this.style.width = this.size + PX;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the size of the container, in pixels.\r\n * \r\n * @returns The size of the container.\r\n */\r\n public getSize(): number {\r\n return this.size;\r\n }\r\n\r\n /**\r\n * Sets the left-hand side position of this container.\r\n * \r\n * @param position The left-hand side position of this container, in pixels.\r\n */\r\n public setLeftPos(position: number): void {\r\n this.style.left = position + PX;\r\n }\r\n\r\n /**\r\n * Sets the right-hand side position of this container.\r\n * \r\n * @param position The right-hand side position of this container, in pixels.\r\n */\r\n public setRightPos(position: number): void {\r\n this.style.right = position + PX;\r\n }\r\n \r\n /**\r\n * Sets the top position of this container.\r\n * \r\n * @param position The top position of this container, in pixels.\r\n */\r\n public setTopPos(position: number): void {\r\n this.style.top = position + PX;\r\n }\r\n \r\n /**\r\n * Sets the bottom position of this container.\r\n * \r\n * @param position The bottom position of this container, in pixels.\r\n */\r\n public setBottomPos(position: number): void {\r\n this.style.bottom = position + PX;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected resizetart(): void {\r\n this.resizeStart.emit(this);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private initHandle(): void {\r\n if (this.region === LayoutRegion.CENTER) return;\r\n this.resizable = true;\r\n }\r\n}\r\n","<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<ng-content></ng-content>\n@if (resizable) {\n <div class=\"atx-handle\" [class.atx-handle-selected]=\"selected\" (mousedown)=\"resizetart()\"></div>\n}\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { BorderLayoutContainer } from '../../border-layout-container/border-layout-container.component';\nimport { Destroyable, LayoutRegion, } from '../../../../model';\nimport { ResizeMethod } from './resize-method';\n\n/**\n * @private\n * A utility class that computes the size of all border layout containers.\n */\nexport class BorderLayoutBoundsManager implements Destroyable {\n\n /**\n * @private\n * The container top position when the user starts to drag the handle.\n */\n private topPos: number = 0;\n\n /**\n * @private\n * The container left position when the user starts to drag the handle.\n */\n private leftPos: number = 0;\n\n /**\n * @private\n * The bounds of the center container.\n */\n private bounds: DOMRect = new DOMRect();\n\n /**\n * Makes this object elligible for garbage collection.\n */\n public destroy(): void {\n this.bounds = null as any;\n }\n\n /**\n * Returns a rectangle that represents the bounds currently computed by this object.\n * \n * @returns The bounds currently computed by this object.\n */\n public getBounds(): DOMRect {\n return this.bounds;\n }\n\n /**\n * Sets the top-left hand corner position before each bounds computaion.\n * \n * @param x The x position of the main container, in pixels, before computaion.\n * @param y The y position of the main container, in pixels, before computaion.\n */\n public setOrigin(x: number, y: number): void {\n this.leftPos = x;\n this.topPos = y;\n }\n\n /**\n * @private\n * For test purpose only.\n */\n public getOrigin(): any {\n return { x: this.leftPos, y: this.topPos };\n }\n\n /**\n * Computes the size of a \"north\" container.\n * \n * @param event The mouse event that triggered the computation of the container size.\n * @param width The width of the main container.\n * @param height The height of the main container.\n * @param minSize The minimum size of the container for which to compute the size.\n * @param maxSize The maximum size of the container for which to compute the size.\n * \n * @returns The size of a \"north\" container.\n */\n public northResize(event: MouseEvent, width: number, height: number, minSize: number | undefined, maxSize: number | undefined): number {\n const size: number = event.clientY - this.topPos;\n if (maxSize && size > maxSize) return this.setY(maxSize);\n if (minSize && size < minSize) return this.setY(minSize);\n return this.setY(size);\n }\n\n /**\n * @private\n */\n private setY(y: number): number {\n this.bounds.y = y;\n return y;\n }\n\n /**\n * Computes the size of a \"south\" container.\n * \n * @param event The mouse event that triggered the computation of the container size.\n * @param width The width of the main container.\n * @param height The height of the main container.\n * @param minSize The minimum size of the container for which to compute the size.\n * @param maxSize The maximum size of the container for which to compute the size.\n * \n * @returns The size of a \"south\" container.\n */\n public southResize(event: MouseEvent, width: number, height: number, minSize: number | undefined, maxSize: number | undefined): number {\n const size: number = height - (event.clientY - this.topPos);\n if (maxSize && size > maxSize) return this.setHeight(maxSize);\n if (minSize && size < minSize) return this.setHeight(minSize);\n return this.setHeight(size);\n }\n\n /**\n * @private\n */\n private setHeight(height: number): number {\n this.bounds.height = height;\n return height;\n }\n\n /**\n * Computes the size of a \"west\" container.\n * \n * @param event The mouse event that triggered the computation of the container size.\n * @param width The width of the main container.\n * @param height The height of the main container.\n * @param minSize The minimum size of the container for which to compute the size.\n * @param maxSize The maximum size of the container for which to compute the size.\n * \n * @returns The size of a \"west\" container.\n */\n public westResize(event: MouseEvent, width: number, height: number, minSize: number | undefined, maxSize: number | undefined): number {\n const size: number = event.clientX - this.leftPos;\n if (maxSize && size > maxSize) return this.setX(maxSize);\n if (minSize && size < minSize) return this.setX(minSize);\n return this.setX(size);\n }\n\n /**\n * @private\n */\n private setX(x: number): number {\n this.bounds.x = x;\n return x;\n }\n\n /**\n * Computes the size of a \"east\" container.\n * \n * @param event The mouse event that triggered the computation of the container size.\n * @param width The width of the main container.\n * @param height The height of the main container.\n * @param minSize The minimum size of the container for which to compute the size.\n * @param maxSize The maximum size of the container for which to compute the size.\n * \n * @returns The size of a \"east\" container.\n */\n public eastResize(event: MouseEvent, width: number, height: number, minSize: number | undefined, maxSize: number | undefined): number {\n const size: number = width - (event.clientX - this.leftPos);\n if (maxSize && size > maxSize) return this.setWidth(maxSize);\n if (minSize && size < minSize) return this.setWidth(minSize);\n return this.setWidth(size);\n }\n\n /**\n * @private\n */\n private setWidth(width: number): number {\n this.bounds.width = width;\n return width;\n }\n\n /**\n * Invoked after each `BorderLayoutContainer` registration to initialize the center container bounds.\n * \n * @param container A `BorderLayoutContainer` instance added to the main container. \n */\n public initBounds(container: BorderLayoutContainer): void {\n const r: LayoutRegion = container.constraints.region as LayoutRegion;\n if (r === LayoutRegion.NORTH) {\n this.bounds.y = container.getSize();\n return;\n }\n if (r === LayoutRegion.SOUTH) {\n this.bounds.height = container.getSize();\n return;\n }\n if (r === LayoutRegion.WEST) {\n this.bounds.x = container.getSize();\n return;\n }\n if (r === LayoutRegion.EAST) this.bounds.width = container.getSize();\n }\n \n /**\n * Returns the method used to compute the size of a container, depending on the specified region.\n * \n * @param region The region associated with the container for which to compute the size.\n * \n * @returns The method used to compute the size of a container.\n */\n public getResizeMethod(region: LayoutRegion): ResizeMethod {\n let method: ResizeMethod = this.southResize;\n switch (region) {\n case LayoutRegion.NORTH: method = this.northResize; break;\n case LayoutRegion.WEST: method = this.westResize; break;\n case LayoutRegion.EAST: method = this.eastResize; break;\n }\n return method.bind(this) as any;\n }\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter, QueryList } from '@angular/core';\r\nimport { BorderLayoutContainer } from '../../border-layout-container/border-layout-container.component';\r\nimport { EMPTY_STRING } from '../../../../util';\r\nimport { Destroyable, LayoutConstraints, LayoutDragEvent, LayoutDragEventType, LayoutRegion, LayoutRegionType, SubscriptionService, LayoutRegionError } from '../../../../model';\r\nimport { IdentifiableComponent } from '../../../../core';\r\nimport { BorderLayoutBoundsManager } from './border-layout-bounds-manager';\r\nimport { ResizeMethod } from './resize-method';\r\n\r\n/**\r\n * @private\r\n */\r\nconst MOUSEMOVE: any = \"mousemove\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst MOUSEUP: any = \"mouseup\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst REGION_ERR_MSG: string = \"A container with the same identifier has already been registered: \";\r\n\r\n/**\r\n * @private\r\n */\r\nconst LAYOUT_ERR_MSG: string = \"No layout container has been registered.\";\r\n\r\n/**\r\n * @private\r\n * A controller object responsible for handling user actions on a `BorderLayout` container.\r\n */\r\nexport class BorderLayoutRenderer extends IdentifiableComponent implements Destroyable {\r\n\r\n /**\r\n * Emits events each time the user starts, or stops dragging handle.\r\n */\r\n public readonly userAction: EventEmitter<LayoutDragEvent> = new EventEmitter();\r\n\r\n /**\r\n * @private\r\n */\r\n private lytContainerElm!: HTMLDivElement;\r\n \r\n /**\r\n * @private\r\n */\r\n private containerList: BorderLayoutContainer[] = [];\r\n \r\n /**\r\n * @private\r\n */\r\n private boundsManager: BorderLayoutBoundsManager; \r\n\r\n /**\r\n * @private\r\n */\r\n private storedStopHandler: any = null;\r\n\r\n /**\r\n * @private\r\n */\r\n private storedMoveHandler: any = null;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private subscribeSvc: SubscriptionService,\r\n private document: Document) {\r\n super();\r\n this.boundsManager = new BorderLayoutBoundsManager();\r\n }\r\n\r\n /**\r\n * Add the list `BorderLayoutContainer` objects associated with the main container to this controller.\r\n * \r\n * @param containers the list `BorderLayoutContainer` objects associated with the main container.\r\n */\r\n public addContainers(containers: QueryList<BorderLayoutContainer>): void {\r\n let regionValidator: string = EMPTY_STRING;\r\n containers.forEach(container => {\r\n const constraints: LayoutConstraints = container.constraints;\r\n const r: string = constraints.region as string;\r\n if (regionValidator.indexOf(r) !== -1) throw new LayoutRegionError(REGION_ERR_MSG + r);\r\n regionValidator += r;\r\n this.subscribeSvc.register(this,\r\n container.resizeStart.subscribe(container=> this.resizeEnter(container))\r\n );\r\n this.boundsManager.initBounds(container);\r\n this.containerList.push(container);\r\n });\r\n };\r\n\r\n /**\r\n * Sets the reference to the HTML container associated with the main container.\r\n * \r\n * @param lytContainer The reference to the HTML container associated with the main container.\r\n */\r\n public setLayoutContainer(lytContainer: HTMLDivElement): void {\r\n this.lytContainerElm = lytContainer;\r\n };\r\n\r\n /**\r\n * @private\r\n * For test purpose only.\r\n * Returns the reference to the internal `BorderLayoutBoundsManager` instance.\r\n */\r\n public getBoundsManager(): BorderLayoutBoundsManager {\r\n return this.boundsManager; \r\n }\r\n \r\n /**\r\n * Changes the constraints of the region specified by the `LayoutConstraints.region` property.\r\n * \r\n * @param constraints The new constraints of the associated region.\r\n */\r\n public setConstraints(constraints: LayoutConstraints): void {\r\n const region: LayoutRegionType = constraints.region as LayoutRegionType;\r\n const container: BorderLayoutContainer | undefined = this.containerList.find((container: BorderLayoutContainer) => container.constraints.region === region);\r\n if (!container) throw new LayoutRegionError(`Invalid region: no container with the region '${region}' has been found.`);\r\n if (constraints.size === undefined) constraints.size = container.getSize();\r\n container.constraints = constraints;\r\n this.paint();\r\n }\r\n\r\n /**\r\n * Makes this object elligible for garbage collection.\r\n */\r\n public destroy(): void {\r\n if (this.storedStopHandler) {\r\n this.document.removeEventListener(MOUSEMOVE, this.storedMoveHandler);\r\n this.document.removeEventListener(MOUSEUP, this.storedStopHandler);\r\n this.deleteStoredHandlers();\r\n }\r\n this.subscribeSvc.clearAll(this);\r\n this.lytContainerElm = null as any;\r\n this.boundsManager.destroy();\r\n this.boundsManager = null as any;\r\n this.containerList.length = 0;\r\n this.containerList = null as any;\r\n }\r\n\r\n /**\r\n * Forces the layout of all `BorderLayoutContainer` objects associated with the main container.\r\n */\r\n public paint(): void {\r\n this.checkLytContainer();\r\n this.render(this.lytContainerElm.offsetWidth);\r\n }\r\n\r\n /**\r\n * Returns the `BorderLayoutContainer` component associated with the specified region.\r\n * \r\n * @param region The region for which to retreive the container.\r\n * \r\n * @returns The `BorderLayoutContainer` component associated with the specified region,\r\n * or `undefined` whether no container has been found.\r\n */\r\n public getBorderLayoutContainer(region: LayoutRegionType): BorderLayoutContainer | undefined {\r\n return this.containerList.find((c: BorderLayoutContainer)=> c.constraints.region === region);\r\n }\r\n\r\n /**\r\n * Resizes the specified region of the associated container.\r\n * \r\n * @param region The region to resize.\r\n * @param size The new size of the region to resize.\r\n * \r\n * @returns `true` whether the specified region has been resized; `false` otherwise.\r\n */\r\n public resizeRegion(region: LayoutRegion, size: number): boolean {\r\n if (region === LayoutRegion.CENTER) return false;\r\n const container: BorderLayoutContainer | undefined = this.getBorderLayoutContainer(region);\r\n if (!container) return false;\r\n container.setSize(size);\r\n this.boundsManager.initBounds(container);\r\n this.paint();\r\n return true;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private resizeEnter(container: BorderLayoutContainer): void {\r\n this.checkLytContainer();\r\n const lytNativeElm: HTMLDivElement = this.lytContainerElm;\r\n const width: number = lytNativeElm.offsetWidth;\r\n const height: number = lytNativeElm.offsetHeight;\r\n const bounds: DOMRect = lytNativeElm.getBoundingClientRect();\r\n const constraints: LayoutConstraints = container.constraints;\r\n const region: LayoutRegion = constraints.region as LayoutRegion;\r\n const minSize: number | undefined = constraints.minSize;\r\n const maxSize: number | undefined = constraints.maxSize;\r\n const doc: Document = this.document;\r\n let size: number = 0;\r\n this.boundsManager.setOrigin(bounds.x, bounds.y);\r\n let resizeMethod: ResizeMethod = this.boundsManager.getResizeMethod(region);\r\n container.selected = true;\r\n const onMoveHandler = (event: MouseEvent)=> {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n size = resizeMethod(event, width, height, minSize, maxSize);\r\n container.setSize(size);\r\n this.render(width);\r\n this.fireEvent(container, LayoutDragEventType.DRAGGING);\r\n };\r\n const onStopHandler = (event: MouseEvent)=> {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n doc.removeEventListener(MOUSEMOVE, onMoveHandler);\r\n doc.removeEventListener(MOUSEUP, onStopHandler);\r\n this.deleteStoredHandlers();\r\n container.selected = false;\r\n size = resizeMethod(event, width, height, minSize, maxSize);\r\n container.setSize(size);\r\n this.render(width);\r\n this.fireEvent(container, LayoutDragEventType.DRAG_STOP);\r\n };\r\n this.storedMoveHandler = onMoveHandler;\r\n this.storedStopHandler = onStopHandler;\r\n this.fireEvent(container, LayoutDragEventType.DRAG_START);\r\n doc.addEventListener(MOUSEMOVE, onMoveHandler);\r\n doc.addEventListener(MOUSEUP, onStopHandler);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private fireEvent(target: BorderLayoutContainer, type: LayoutDragEventType): void {\r\n const evt: LayoutDragEvent = new LayoutDragEvent(target, type);\r\n this.userAction.emit(evt);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private render(width: number): void {\r\n const bounds: DOMRect = this.boundsManager.getBounds();\r\n const top: number = bounds.top;\r\n const bottom: number = bounds.bottom;\r\n const left: number = bounds.left;\r\n const right: number = bounds.right;\r\n const cList: BorderLayoutContainer[] = this.containerList;\r\n let cursor: number = cList.length - 1;\r\n while(cursor >= 0) {\r\n const cont: BorderLayoutContainer = cList[cursor];\r\n const r: LayoutRegion = cont.constraints.region as LayoutRegion;\r\n cursor--;\r\n if (r === LayoutRegion.NORTH || r === LayoutRegion.SOUTH) continue;\r\n if (r === LayoutRegion.WEST) {\r\n cont.setTopPos(top);\r\n cont.setRightPos(width - left);\r\n cont.setBottomPos(bottom - top);\r\n continue;\r\n }\r\n if (r === LayoutRegion.CENTER) {\r\n cont.setTopPos(top);\r\n cont.setLeftPos(left);\r\n cont.setRightPos(right - left);\r\n cont.setBottomPos(bottom - top);\r\n continue;\r\n }\r\n if (r === LayoutRegion.EAST) {\r\n cont.setTopPos(top);\r\n cont.setLeftPos(width - (right - left));\r\n cont.setBottomPos(bottom - top);\r\n continue;\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private checkLytContainer(): void {\r\n if (!this.lytContainerElm) throw new ReferenceError(LAYOUT_ERR_MSG);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private deleteStoredHandlers(): void {\r\n this.storedMoveHandler = this.storedStopHandler = null;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AfterViewInit, Component, ContentChildren, OnDestroy, ElementRef, ViewChild, HostListener, QueryList, EventEmitter, Output, Inject } from '@angular/core';\r\nimport { BorderLayoutContainer } from '../border-layout-container/border-layout-container.component';\r\nimport { LayoutConstraints, LayoutDragEvent, LayoutDragEventType, LayoutRegion, LayoutRegionType, SubscriptionService } from '../../../model';\r\nimport { BorderLayoutRenderer } from './util/border-layout-renderer';\r\nimport { IdentifiableComponent } from '../../../core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/**\r\n * A border layout lays out a container, arranging and resizing its components to fit in five regions: north, south, east, west, and center.\r\n * Each region is defined by a `BorderLayoutContainer` instance, and is identified by a corresponding constant: `NORTH`, `SOUTH`, `EAST`, `WEST`, and `CENTER`.\r\n * This component is part of the LAF-less API.\r\n */\r\n@Component({\r\n selector: 'atx-border-layout',\r\n templateUrl: './border-layout.component.html',\r\n styleUrls: ['./border-layout.component.scss'],\r\n standalone: true\r\n})\r\nexport class BorderLayout extends IdentifiableComponent implements AfterViewInit, OnDestroy {\r\n\r\n /**\r\n * Emits events each time the user starts dragging a region handle.\r\n */\r\n @Output()\r\n public readonly dragStart: EventEmitter<LayoutDragEvent> = new EventEmitter();\r\n\r\n /**\r\n * Emits events each time the user stops dragging a region handle.\r\n */\r\n @Output()\r\n public readonly dragStop: EventEmitter<LayoutDragEvent> = new EventEmitter();\r\n\r\n /**\r\n * Emits events each time the user is dragging a region handle.\r\n */\r\n @Output()\r\n public readonly dragging: EventEmitter<LayoutDragEvent> = new EventEmitter();\r\n \r\n /**\r\n * @private\r\n */\r\n @HostListener(\"window:resize\")\r\n private onResize(): void {\r\n this.paint();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"atxLayoutContainer\")\r\n private layoutContainer!: ElementRef<HTMLDivElement>;\r\n\r\n /**\r\n * @private\r\n */\r\n private renderer: BorderLayoutRenderer;\r\n\r\n /**\r\n * @private\r\n */\r\n @ContentChildren(BorderLayoutContainer)\r\n private set __containers__(containers: QueryList<BorderLayoutContainer>) {\r\n this.renderer.addContainers(containers);\r\n };\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private subscribeSvc: SubscriptionService,\r\n @Inject(DOCUMENT) document: Document) {\r\n super();\r\n this.renderer = new BorderLayoutRenderer(subscribeSvc, document);\r\n subscribeSvc.register(this,\r\n this.renderer.userAction.subscribe((event: LayoutDragEvent)=> {\r\n event.layout = this;\r\n if (event.type === LayoutDragEventType.DRAGGING) {\r\n this.dragging.emit(event);\r\n return;\r\n }\r\n if (event.type === LayoutDragEventType.DRAG_START) {\r\n this.dragStart.emit(event);\r\n return;\r\n }\r\n this.dragStop.emit(event);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * @private\r\n * For test purpose only.\r\n */\r\n public getRenderer(): BorderLayoutRenderer {\r\n return this.renderer;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.subscribeSvc.clearAll(this);\r\n this.renderer.destroy();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngAfterViewInit(): void {\r\n this.renderer.setLayoutContainer(this.layoutContainer.nativeElement);\r\n this.paint();\r\n }\r\n\r\n /**\r\n * Forces the container to be redrawn.\r\n */\r\n public paint(): void {\r\n this.renderer.paint();\r\n }\r\n\r\n /**\r\n * Resizes the specified region.\r\n * \r\n * @param region The region to resize.\r\n * @param size The new size of the region to resize.\r\n * \r\n * @returns `true` whether the specified region has been resized; `false` otherwise.\r\n */\r\n public resizeRegion(region: LayoutRegion | LayoutRegionType, size: number): void {\r\n this.renderer.resizeRegion(region as LayoutRegion, size);\r\n }\r\n \r\n /**\r\n * Changes the constraints of the region specified by the `LayoutConstraints.region` property.\r\n * \r\n * @param constraints The new constraints of the associated region.\r\n */\r\n public setConstraints(constraints: LayoutConstraints): void {\r\n this.renderer.setConstraints(constraints);\r\n }\r\n \r\n /**\r\n * Returns the `BorderLayoutContainer` component associated with the specified region.\r\n * \r\n * @param region The region for which to retreive the container.\r\n * \r\n * @returns The `BorderLayoutContainer` component associated with the specified region,\r\n * or `undefined` whether no container has been found.\r\n */\r\n public getBorderLayoutContainer(region: LayoutRegionType): BorderLayoutContainer | undefined {\r\n return this.renderer.getBorderLayoutContainer(region);\r\n }\r\n\r\n}\r\n","<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<div #atxLayoutContainer class=\"atx-border-layout\">\n <ng-content></ng-content>\n</div>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nexport * from './angular-toolbox-logo/angular-toolbox-logo.component';\r\nexport * from './dropdown/dropdown.component';\r\nexport * from './layout';\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ElementRef } from '@angular/core';\r\n\r\n/**\r\n * @private\r\n * The base class for all directives that are responsible for navigation whithin ab Angular app.\r\n */\r\nexport class NavigationDirectiveBase {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected elmRef: ElementRef, role: string) {\r\n const elm: HTMLElement = elmRef.nativeElement;\r\n elm.role = role;\r\n elm.tabIndex = 0;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AfterViewInit, Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { BUTTON_ROLE } from '../util';\r\nimport { NavigationDirectiveBase } from './navigation-directive-base';\r\n\r\n/**\r\n * @private\r\n */\r\nconst ENTER_KEY: string = 'Enter';\r\n\r\n/**\r\n * @private\r\n */\r\nconst ROUTER_LINK_REF: string = 'ng-reflect-router-link';\r\n\r\n/**\r\n * An easy-to-use directive that enables keyboard navigation and provides support for keyboard \"Enter\" key events.\r\n */\r\n@Directive({\r\n selector: '[buttonRole]',\r\n providers: [\r\n RouterModule\r\n ],\r\n standalone: true\r\n})\r\nexport class ButtonRoleDirective<T> extends NavigationDirectiveBase implements AfterViewInit {\r\n\r\n /**\r\n * Dispatches events when the user presses the \"Enter\" key.\r\n */\r\n @Output()\r\n public readonly enter: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n /**\r\n * Forces callback methods defined with the \"enter\" event listener to be invoked when user clicks on the \r\n * decorated element.\r\n */\r\n @Input()\r\n public delegateClick: any;\r\n\r\n /**\r\n * @private\r\n */\r\n @HostListener('keyup', [\"$event\", \"$event.target.value\"])\r\n private onKeyup(event: KeyboardEvent, value: T): void {\r\n if (event.key !== ENTER_KEY) return;\r\n this.processEvent(event, value);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n @HostListener('click', [\"$event\", \"$event.target.value\"])\r\n private onClick(event: MouseEvent, value: T): void {\r\n if (this.delegateClick === undefined) return;\r\n this.processEvent(event, value);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private _routerLinkRef: string | null = null;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(elmRef: ElementRef,\r\n private _router: Router) {\r\n super(elmRef, BUTTON_ROLE);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngAfterViewInit(): void {\r\n const elm: HTMLElement = this.elmRef.nativeElement;\r\n this._routerLinkRef = elm.getAttribute(ROUTER_LINK_REF);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private processEvent(event: Event, value: T): void {\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n if (this._routerLinkRef) {\r\n this._router.navigate([this._routerLinkRef]);\r\n return;\r\n }\r\n this.elmRef.nativeElement.blur();\r\n this.enter.emit(value);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Directive, ElementRef, HostListener, Inject, Input } from '@angular/core';\r\nimport { LINK_ROLE } from '../util';\r\nimport { NavigationDirectiveBase } from './navigation-directive-base';\r\n\r\n/**\r\n * An easy-to-use directive that enables keyboard navigation and provides support for navigating to an external URL.\r\n */\r\n@Directive({\r\n selector: '[navigateToUrl]',\r\n standalone: true\r\n})\r\nexport class NavigateToUrlDirective extends NavigationDirectiveBase {\r\n\r\n /**\r\n * The `href` attribute of the decorated element.\r\n */\r\n @Input()\r\n public href!: string;\r\n \r\n /**\r\n * @private\r\n */\r\n @HostListener('click')\r\n private onClick(): void {\r\n const HREF: string | undefined = this.href;\r\n if (!HREF) throw new ReferenceError(\"href attribute is not defined.\");\r\n this._document.defaultView.location.href = HREF;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(@Inject(DOCUMENT) private _document: any,\r\n elmRef: ElementRef) {\r\n super(elmRef, LINK_ROLE);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input } from '@angular/core';\r\nimport { LINK_ROLE } from '../util';\r\nimport { DEFAULT_SCROLL_BEHAVIOR } from '../util/default-scroll-behavior';\r\nimport { Router } from '@angular/router';\r\nimport { NavigationDirectiveBase } from './navigation-directive-base';\r\n\r\n/**\r\n * Provides functionality to activate anchor navigation through the native Angular router.\r\n */\r\n@Directive({\r\n selector: '[anchorLink]',\r\n standalone: true,\r\n})\r\nexport class AnchorLinklDirective extends NavigationDirectiveBase implements AfterViewInit {\r\n\r\n /**\r\n * The `href` attribute of the decorated element.\r\n */\r\n @Input()\r\n public href!: string;\r\n \r\n /**\r\n * @private\r\n */\r\n @HostListener('click', ['$event'])\r\n private onClick(event: MouseEvent): void {\r\n event.preventDefault();\r\n const HREF: string | undefined = this.href;\r\n this._router.navigate([], { fragment: HREF.slice(1)});\r\n (this._document.querySelector(HREF) as HTMLElement).scrollIntoView(DEFAULT_SCROLL_BEHAVIOR);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(@Inject(DOCUMENT) private _document: any,\r\n elmRef: ElementRef,\r\n private _router: Router) {\r\n super(elmRef, LINK_ROLE);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n public ngAfterViewInit(): void {\r\n const HREF: string | undefined = this.href;\r\n if (!HREF) throw new ReferenceError(\"href attribute is not defined.\");\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\n\r\n/**\r\n * @private\r\n */\r\nconst CHILD_LIST_TYPE: string = \"childList\";\r\n\r\n/**\r\n * Allows injection of any value into an HTML element container (`div`, `button`, etc...).\r\n * A rendered event is emitted after the injected content has been rendered and is\r\n * available for DOM manipulation.\r\n */\r\n@Directive({\r\n selector: '[contentRenderer]',\r\n standalone: true\r\n})\r\nexport class ContentRendererDirective implements OnInit, OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _observer: MutationObserver;\r\n\r\n /**\r\n * Dispatches events when the content of the HTML element has been rendered.\r\n */\r\n @Output()\r\n public readonly rendered: EventEmitter<HTMLElement> = new EventEmitter<HTMLElement>();\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _elmRef: ElementRef) {\r\n const nativeElement: HTMLElement = this._elmRef.nativeElement;\r\n this._observer = new MutationObserver((mutations: MutationRecord[]) => {\r\n mutations.forEach((mutation: MutationRecord) => {\r\n if (mutation.type === CHILD_LIST_TYPE) this.rendered.emit(nativeElement);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this._observer.disconnect();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnInit(): void {\r\n this._observer.observe(\r\n this._elmRef.nativeElement,\r\n { attributes: false, childList: true, characterData: false }\r\n );\r\n }\r\n}\r\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\n/*\n * Public API Surface of angular-toolbox\n */\n\nexport * from './lib/angular-toolbox.module';\nexport * from './lib/collection';\nexport * from './lib/component';\nexport * from './lib/core';\nexport * from './lib/directive';\nexport * from './lib/framework';\nexport * from './lib/model';\nexport * from './lib/pipe';\nexport * from './lib/util';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["NAME","i1","i1.AtxUserActionService","i1.AtxMonitoringConsoleState","i2.AtxUserActionService","this","i1.DialogService","i1.HttpMockLoggingService","i2.AtxMonitoringConsoleState","i3.AtxLogIoService","i1.SubscriptionService","i4.AtxUserActionService","i2.AtxMonitoringConsoleController","i1.WindowService"],"mappings":"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"}
1
+ {"version":3,"file":"angular-toolbox.mjs","sources":["../../../projects/angular-toolbox/src/lib/core/error/subscription-error.ts","../../../projects/angular-toolbox/src/lib/core/error/integrity-error.ts","../../../projects/angular-toolbox/src/lib/core/error/app-bridge-error.ts","../../../projects/angular-toolbox/src/lib/core/error/http-mock-service-error.ts","../../../projects/angular-toolbox/src/lib/util/empty-string.const.ts","../../../projects/angular-toolbox/src/lib/util/aria-role.constant.ts","../../../projects/angular-toolbox/src/lib/util/uuid.ts","../../../projects/angular-toolbox/src/lib/util/js-type.ts","../../../projects/angular-toolbox/src/lib/util/version.util.ts","../../../projects/angular-toolbox/src/lib/core/impl/lang/identifiable-component.ts","../../../projects/angular-toolbox/src/lib/core/abstract/abstract-subscription-manager.ts","../../../projects/angular-toolbox/src/lib/core/impl/version/version.impl.ts","../../../projects/angular-toolbox/src/lib/core/abstract/abstract-version-manager.ts","../../../projects/angular-toolbox/src/lib/model/service/version/angular-toolbox-version.service.ts","../../../projects/angular-toolbox/src/lib/angular-toolbox.module.ts","../../../projects/angular-toolbox/src/lib/collection/array-list.event.ts","../../../projects/angular-toolbox/src/lib/collection/array-list-event-type.enum.ts","../../../projects/angular-toolbox/src/lib/collection/array-list.ts","../../../projects/angular-toolbox/src/lib/collection/index.ts","../../../projects/angular-toolbox/src/lib/component/angular-toolbox-logo/angular-toolbox-logo.component.ts","../../../projects/angular-toolbox/src/lib/component/angular-toolbox-logo/angular-toolbox-logo.component.html","../../../projects/angular-toolbox/src/lib/model/business/version/version.ts","../../../projects/angular-toolbox/src/lib/model/business/version/version-config.ts","../../../projects/angular-toolbox/src/lib/model/business/version/version-config.provider.ts","../../../projects/angular-toolbox/src/lib/model/business/version/version-manager.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dark-mode-config.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dark-mode.constant.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dark-mode-config.provider.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/scroll-behavior.type.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/window/window-ref.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/window/window-init.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/window/window-feature-state.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/window/window-target.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-constraints.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-region.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-region.error.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-drag.event.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/layout/layout-drag-event-type.enum.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/dropdown-position.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/dropdown.event.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/dropdown-event-type.enum.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/dropdown-state.ts","../../../projects/angular-toolbox/src/lib/model/business/ui/dropdown/popover-state.ts","../../../projects/angular-toolbox/src/lib/model/business/lang/instantiable.ts","../../../projects/angular-toolbox/src/lib/model/business/lang/destroyable.ts","../../../projects/angular-toolbox/src/lib/model/business/lang/app-bridge-command.ts","../../../projects/angular-toolbox/src/lib/model/business/lang/identifiable.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-response-mock.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-method-mock.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-config.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-endpoint.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-endpoint-descriptor.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-method-descriptor.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-parameter-descriptor.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-interceptor.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-error.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/http-mock-request-metadata.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/xhr-proxy.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/fetch-client.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/config/http-mock-production-policy.enum.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/config/http-mocking-framework-config.provider.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/config/http-mocking-framework-config.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/logging/http-mock-logging-prefetch-metadata.ts","../../../projects/angular-toolbox/src/lib/model/business/mock/http/logging/http-mock-logging-metadata.ts","../../../projects/angular-toolbox/src/lib/model/business/subscription/subscription-manager.ts","../../../projects/angular-toolbox/src/lib/model/business/navigator/connection-type.ts","../../../projects/angular-toolbox/src/lib/model/business/navigator/effective-connection-type.ts","../../../projects/angular-toolbox/src/lib/model/business/navigator/network-information.ts","../../../projects/angular-toolbox/src/lib/model/business/navigator/battery-manager.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/log-connector.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/log.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/transactional-logger.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/log-level.enum.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/logger-config.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/atx-logger-config.provider.ts","../../../projects/angular-toolbox/src/lib/model/service/subscription/subscription.service.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/dark-mode.service.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/scroll.service.ts","../../../projects/angular-toolbox/src/lib/util/default-scroll-behavior.ts","../../../projects/angular-toolbox/src/lib/core/bridge/app-bridge.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/app-bridge.service.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/window/abstract-window.service.ts","../../../projects/angular-toolbox/src/lib/util/window/window-features-builder.ts","../../../projects/angular-toolbox/src/lib/util/window/window-header-tag-util.ts","../../../projects/angular-toolbox/src/lib/model/service/ui/window/window.service.ts","../../../projects/angular-toolbox/src/lib/model/service/version/version.service.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-method-ref.enum.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/constants.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/escape-to-regexp-string.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/get-flags.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/to-key-regexp.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/loose-replacer.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/to-stringify.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/token-data-to-regexp.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/token-data.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/iter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/model/simple-tokens.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/lexer.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/path-to-regexp/string-to-token-data.ts","../../../projects/angular-toolbox/src/lib/util/http-mocking-framework-config.manager.ts","../../../projects/angular-toolbox/src/lib/model/service/mock/http/http-mock.service.ts","../../../projects/angular-toolbox/src/lib/framework/logging/impl/log-impl.ts","../../../projects/angular-toolbox/src/lib/framework/logging/connector/default-log-connector.ts","../../../projects/angular-toolbox/src/lib/framework/logging/connector/console-log-connector.ts","../../../projects/angular-toolbox/src/lib/framework/logging/connector/html-log-connector.ts","../../../projects/angular-toolbox/src/lib/framework/logging/impl/abstract-logger.ts","../../../projects/angular-toolbox/src/lib/framework/logging/util/log.builder.ts","../../../projects/angular-toolbox/src/lib/framework/logging/util/log.constant.ts","../../../projects/angular-toolbox/src/lib/framework/logging/util/log.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/logging/http-mock-logger.ts","../../../projects/angular-toolbox/src/lib/model/business/logging/http-mock-logging-constant.enum.ts","../../../projects/angular-toolbox/src/lib/model/service/mock/http/logging/http-mock-logging-service.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer-panel/json-viewer-panel.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/console-body-type.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/console-type-class.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/data.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/json-viewer/json-viewer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/abstract/log-renderer-base.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/payload-renderer/payload-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/timeline.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/timing-renderer/timing-renderer.component.html","../../../projects/angular-toolbox/src/lib/pipe/safe/safe-html.pipe.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/url.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/response-preview-renderer/response-preview-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/response-body-renderer/response-body-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/business/atx-console-action-type.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/request-info-renderer/request-info-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/request-info-renderer/request-info-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/service/atx-user-action.service.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/request-details/request-details.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/size.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.state.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/console-footer/console-footer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/console-menu/console-menu.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/business/atx-is-imported-log.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/spinner/spinner.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/spinner/spinner.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/icon-renderer/icon-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/request-list-renderer/request-list-renderer.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/renderer/request-list-renderer/request-list-renderer.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/log-message.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/request-metadata-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/log-headers-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/form-data-serializer.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/body-serializer.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/body-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/http-request-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/http-response-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/log-metadata-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/config/http-mock-parameters.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/config/http-mock.decorator.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-headers-mock.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-headers.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-mock-max-delay.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-status-text.enum.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-status-text-finder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-mock-response.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/fetch-client-response-type.enum.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/fetch-client.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/event/progress-event-mock.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/event/event-target.impl.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/xhr-base.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/data-storage.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/logging/http-mock-logging-metadata.builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/util/http-mock-response-delay.util.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/delegate-xhr.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/xhr-proxy-impl.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/http-mock-factory.impl.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http/xhr/http-mock-factory.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-param/atx-mock-param.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-param/atx-mock-param.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-description/atx-mock-description.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-description/atx-mock-description.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-full-description/atx-mock-full-description.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-full-description/atx-mock-full-description.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-methods/atx-mock-methods.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-methods/atx-mock-methods.component.html","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-documentation/atx-mock-documentation.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/documentation/component/atx-mock-documentation/atx-mock-documentation.component.html","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-backdrop-type.enum.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-backdrop.type.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-outlet-event-type.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-outlet.event.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog.config.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-default-config.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-service.error.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog-service.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/dialog.outlet.ts","../../../projects/angular-toolbox/src/lib/framework/dialog/index.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/log-converter.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/util/io/hmfl-builder.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/service/atx-log-io.service.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/connector/http-monitoring-console-log-connector.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/model/service/atx-monitoring-console.controller.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.ts","../../../projects/angular-toolbox/src/lib/framework/mock/http-monitoring-console/component/http-monitoring-console/http-monitoring-console.component.html","../../../projects/angular-toolbox/src/lib/model/service/mock/http/logging/atx-http-mock-console.service.ts","../../../projects/angular-toolbox/src/lib/model/service/logging/logger-service.ts","../../../projects/angular-toolbox/src/lib/component/dropdown/dropdown.component.ts","../../../projects/angular-toolbox/src/lib/component/dropdown/dropdown.component.html","../../../projects/angular-toolbox/src/lib/component/layout/border-layout-container/border-layout-container.component.ts","../../../projects/angular-toolbox/src/lib/component/layout/border-layout-container/border-layout-container.component.html","../../../projects/angular-toolbox/src/lib/component/layout/border-layout/util/border-layout-bounds-manager.ts","../../../projects/angular-toolbox/src/lib/component/layout/border-layout/util/border-layout-renderer.ts","../../../projects/angular-toolbox/src/lib/component/layout/border-layout/border-layout.component.ts","../../../projects/angular-toolbox/src/lib/component/layout/border-layout/border-layout.component.html","../../../projects/angular-toolbox/src/lib/component/index.ts","../../../projects/angular-toolbox/src/lib/directive/navigation-directive-base.ts","../../../projects/angular-toolbox/src/lib/directive/button-role.directive.ts","../../../projects/angular-toolbox/src/lib/directive/navigate-to-url.directive.ts","../../../projects/angular-toolbox/src/lib/directive/anchor-link.directive.ts","../../../projects/angular-toolbox/src/lib/directive/content-renderer.directive.ts","../../../projects/angular-toolbox/src/public-api.ts","../../../projects/angular-toolbox/src/angular-toolbox.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"SubscriptionError\";\r\n\r\n/**\r\n * Represents errors thrown by `SubscriptionService` instances.\r\n */\r\nexport class SubscriptionError extends Error {\r\n\r\n /**\r\n * Creates en new `SubscriptionService` instances.\r\n * \r\n * @param message A human-readable description of the error.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"IntegrityError\";\r\n\r\n/**\r\n * Represents a data integrity violation error.\r\n */\r\nexport class IntegrityError extends Error {\r\n\r\n /**\r\n * Creates en new `IntegrityError` instances.\r\n * \r\n * @param message A human-readable description of the error.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"AppBridgeError\";\r\n\r\n/**\r\n * Represents exceptions thrown by the `AppBridge` class.\r\n */\r\nexport class AppBridgeError extends ReferenceError {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"HttpMockServiceError\";\r\n\r\n/**\r\n * Represents errors thrown by `HttpMockService` instances.\r\n */\r\nexport class HttpMockServiceError extends Error {\r\n\r\n /**\r\n * Creates en new `HttpMockService` instances.\r\n * \r\n * @param message A human-readable description of the error.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A reference to an immutable empty string.\r\n */\r\nexport const EMPTY_STRING: string = \"\";","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A reference to the `\"button\"` value of the `role` property.\r\n */\r\nexport const BUTTON_ROLE: string = 'button';\r\n\r\n/**\r\n * A reference to the `\"link\"` value of the `role` property.\r\n */\r\nexport const LINK_ROLE: string = 'link';\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EMPTY_STRING } from \"./empty-string.const\";\r\nimport { IntegrityError } from \"../core/error\";\r\nimport { Destroyable } from \"../model\";\r\n\r\n/**\r\n * @private\r\n * The regexp used to validate UUID strings.\r\n */\r\nconst VALIDATOR: RegExp = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\r\n\r\n/**\r\n * A class that represents an immutable universally unique identifier (UUID).\r\n * This class is not available in workers. \r\n */\r\nexport class Uuid implements Destroyable {\r\n\r\n /**\r\n * @private\r\n * Stores a reference to the UUID associated with this `Uuid` instance.\r\n */\r\n private readonly _uuid: string;\r\n\r\n /**\r\n * @private\r\n * Stores a boolean value used to lock constructor access.\r\n */\r\n private static _lockConstructor: boolean = true;\r\n\r\n /**\r\n * @private\r\n * Stores a reference to all UUIDs already created.\r\n */\r\n private static _hash: string = EMPTY_STRING;\r\n\r\n /**\r\n * @private\r\n * Created a new `Uuid` instance.\r\n *\r\n * @param uuid A string used that represents the UUID associated with this `Uuid` instance.\r\n * If `null` creates a random UUID value. \r\n * @param tracked If `true`, stores the UUID reference in the system.\r\n */\r\n private constructor(uuid: string | null, tracked: boolean) {\r\n if (Uuid._lockConstructor) throw new ReferenceError(\"Uuid class has private constructor.\");\r\n const UUID: string = uuid || crypto.randomUUID();\r\n this._uuid = UUID;\r\n if (tracked) Uuid._hash += `${UUID}|`;\r\n Uuid._lockConstructor = true;\r\n }\r\n\r\n /**\r\n * Returns a string that represents the UUID value associated with this `Uuid` instance.\r\n * \r\n * @returns The UUID string value associated with this `Uuid` instance.\r\n */\r\n public toString(): string {\r\n return this._uuid;\r\n }\r\n \r\n /**\r\n * Compares the given `Uuid` instance with this `Uuid`.\r\n * \r\n * @param uuid The `Uuid` instance to compare with this `Uuid`.\r\n * \r\n * @returns `true` whether both `Uuid` instances are equal; `false` otherwise.\r\n */\r\n public equals(uuid: Uuid): boolean {\r\n return this._uuid === uuid.toString();\r\n }\r\n\r\n /**\r\n * Creates and returns a new `Uuid` instance.\r\n * \r\n * @param track If `true`, stores the UUID reference in the system.\r\n * \r\n * @returns A new `Uuid` instance.\r\n */\r\n public static build(track: boolean = false): Uuid {\r\n Uuid._lockConstructor = false;\r\n return new Uuid(null, track);\r\n }\r\n \r\n /**\r\n * Creates and returns a new `Uuid` instance built from the specified `uuid` parameter.\r\n * \r\n * @param uuid The UUID string value used to create the new `Uuid` instance.\r\n * @param track If `true`, performs a validation process to ensure that the UUID string does not exists in the system.\r\n * \r\n * @returns A new `Uuid` instance built from the specified `uuid` parameter.\r\n */\r\n public static fromString(uuid: string, track: boolean = false): Uuid {\r\n if(track) {\r\n if(!this.isTracked(uuid)) throw new IntegrityError(\"Data Integrity Violation. UUID already exists: \" + uuid);\r\n }\r\n if (!Uuid.validate(uuid)) throw new TypeError(\"Invalid UUID value: \" + uuid);\r\n Uuid._lockConstructor = false;\r\n return new Uuid(uuid, track);\r\n }\r\n\r\n /**\r\n * Performs validation on the specified `uuid` string parameter.\r\n * \r\n * @param uuid A UUID representation string to validate.\r\n * @returns `true` whether the `uuid` string parameter is valid; `false` otherwise.\r\n */\r\n public static validate(uuid: string): boolean {\r\n return VALIDATOR.test(uuid);\r\n }\r\n\r\n /**\r\n * Performs a test to ensure that the UUID string is not tracked the system.\r\n * \r\n * @param uuid A UUID representation string to test.\r\n * @returns `true` whether the `uuid` string parameter is tracked; `false` otherwise.\r\n */\r\n public static isTracked(uuid: string): boolean {\r\n return !Uuid._hash.includes(uuid);\r\n }\r\n \r\n /**\r\n * Releases the `Uuid` instance from the tracking system and makes it elligible for garbage collection.\r\n * \r\n * @returns `true` whether the `Uuid` instance was found and removed; `false` otherwise. \r\n */\r\n public destroy(): boolean {\r\n const ref: string =this._uuid;\r\n if (!Uuid.isTracked(ref)) {\r\n Uuid._hash = Uuid._hash.replace(ref, EMPTY_STRING);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A reference to the `\"undefined\"` type.\r\n */\r\nexport const UNDEFINED: string = \"undefined\";\r\n\r\n/**\r\n * A reference to the `\"object\"` type.\r\n */\r\nexport const OBJECT: string = \"object\";\r\n\r\n/**\r\n * A reference to the `\"boolean\"` type.\r\n */\r\nexport const BOOLEAN: string = \"boolean\";\r\n\r\n/**\r\n * A reference to the `\"number\"` type.\r\n */\r\nexport const NUMBER: string = \"number\";\r\n\r\n/**\r\n * A reference to the `\"bigint\"` type.\r\n */\r\nexport const BIGINT: string = \"bigint\";\r\n\r\n/**\r\n * A reference to the `\"function\"` type.\r\n */\r\nexport const FUNCTION: string = \"function\";\r\n\r\n/**\r\n * A reference to the `\"string\"` type.\r\n */\r\nexport const STRING: string = \"string\";\r\n\r\n/**\r\n * A reference to the `\"symbol\"` type.\r\n */\r\nexport const SYMBOL: string = \"symbol\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Version } from \"../model\";\r\nimport { EMPTY_STRING } from \"./empty-string.const\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst DASH: string = \"-\";\r\n\r\n/**\r\n * A convenient utility class for working with `Version` objects.\r\n */\r\nexport class VersionUtil {\r\n\r\n /**\r\n * Returns a string that represents the specified `Version` object.\r\n * \r\n * @param version The `Version` object for which to get a string representation.\r\n * \r\n * @returns A string that represents the specified `Version` object.\r\n */\r\n public static stringify(version: Version): string {\r\n const m: string | undefined = version.metadata;\r\n return `${version.major}.${version.minor}.${version.patch}${m ? DASH + m : EMPTY_STRING}`;\r\n }\r\n \r\n /**\r\n * Compares the given `Version` objects.\r\n * \r\n * @param v1 The first object to compare.\r\n * @param v2 The second object to compare.\r\n * \r\n * @returns `true` whether both `Version` objects are equal; `false` otherwise.\r\n */\r\n public static equal(v1: Version, v2: Version): boolean {\r\n return v1.major === v2.major &&\r\n v1.minor === v2.minor &&\r\n v1.patch === v2.patch &&\r\n v1.buildTimeStamp === v2.buildTimeStamp &&\r\n v1.metadata === v2.metadata;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Identifiable } from \"../../../model\";\r\nimport { Uuid } from \"../../../util\";\r\n\r\n/**\r\n * @private\r\n * The base class that must be extended by objects to be indentified by the \r\n * Angular Toolbox Subscription Service.\r\n */\r\nexport class IdentifiableComponent implements Identifiable {\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _classRef: string;\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _uuid: Uuid = Uuid.build();\r\n\r\n /**\r\n * A string that represent the class reference for this object.\r\n * This can be useful to workaround TypeScript compilation obfuscation.\r\n * \r\n * @param classRef The class reference for this object.\r\n */\r\n constructor(classRef: string | undefined = undefined) {\r\n this._classRef = classRef || this.constructor.name;\r\n }\r\n\r\n /**\r\n * Returns the unique identifier for this object.\r\n * \r\n * @returns An instance of the `Uuid` class.\r\n */\r\n public getID(): Uuid {\r\n return this._uuid;\r\n }\r\n \r\n /**\r\n * Returns the class name reference of this object. Can be either the `classRef`\r\n * paramter of the contructor method, or the constructor `name` property value.\r\n * \r\n * @returns the class name reference of this object.\r\n */\r\n public getClassRef(): string {\r\n return this._classRef;\r\n }\r\n};","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in \n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Subscription } from 'rxjs';\nimport { Identifiable, SubscriptionManager } from '../../model';\nimport { SubscriptionError } from '../error';\nimport { IdentifiableComponent } from '../impl';\nimport { STRING } from '../../util';\n\n/**\n * The abstract class for all services that implement the `SubscriptionManager` interface.\n */\nexport abstract class AbstractSubscriptionManager implements SubscriptionManager {\n\n /**\n * @private\n * Stores an internal reference to the last reference used with the `register()`\n * method.\n */\n private _lastRef: string | null = null;\n\n /**\n * @private\n * The internal `Subscription` instances storage.\n */\n private _subMap: Map<string, Array<Subscription>> = new Map<string, Array<Subscription>>();\n\n /**\n * Stores a new `Subscription` instance associated with the specified reference.\n * \n * @param ref The reference for which to store a new `Subscription` instance.\n * Can be either a string or an `Identifiable` object.\n * @param subscription The `Subscription` instance to register.\n * \n * @returns A reference to this `SubscriptionService` instance.\n */\n public register(ref: string | Identifiable, subscription: Subscription): SubscriptionManager {\n const REF: string = this.getRef(ref);\n this._lastRef = REF;\n if (!this._subMap.has(REF)) this._subMap.set(REF, []);\n this._subMap.get(REF)?.push(subscription);\n return this;\n }\n\n /**\n * Stores a new `Subscription` instance associated with the reference specified\n * by the last `register()` method invokation.\n * \n * @param subscription The `Subscription` instance to register.\n * \n * @returns A reference to this `SubscriptionService` instance.\n */\n public append(subscription: Subscription): SubscriptionManager {\n if (!this._lastRef) throw new SubscriptionError(\"Illegal Access Error: you must call the register() method before invoking the append() method.\");\n return this.register(this._lastRef, subscription);\n }\n \n /**\n * Unsubscribes and removes all `Subscription` instances associated with the specified reference.\n * \n * @param ref The reference for which to remove all `Subscription` instances.\n * Can be either a string or an `Identifiable` object.\n * \n * @returns `true` whether the specified reference exists; `false` otherwise.\n */\n public clearAll(ref: string | Identifiable): boolean {\n const REF: string = this.getRef(ref);\n let result: boolean = false;\n if (this._lastRef === REF) this._lastRef = null;\n if (this._subMap.has(REF)) {\n this._subMap.get(REF)?.forEach(subscription => {\n if (!subscription.closed) subscription.unsubscribe();\n });\n this._subMap.delete(REF);\n result = true;\n }\n return result;\n }\n\n /**\n * Returns all `Subscription` instances associated with the specified reference.\n * \n * @param ref The reference for which to remove get `Subscription` instances.\n * Can be either a string or an `Identifiable` object.\n * \n * @returns All `Subscription` instances associated with the specified reference, or \n * `null` whether the specified reference does not exists.\n */\n public get(ref: string | Identifiable): Array<Subscription> | null {\n return this._subMap.get(this.getRef(ref)) || null;\n }\n\n /**\n * @private \n * Returns the string reference for the regsitration process. \n * \n * @param ref The reference to be used the regsitration process. \n * Can be either a string or an `Identifiable` object.\n * \n * @returns the string reference for the regsitration process. \n */\n private getRef(ref: string | Identifiable): string {\n let targetRef: string;\n if (typeof ref === STRING) targetRef = ref as string;\n else if (ref instanceof IdentifiableComponent) targetRef = ref.getID().toString();\n else throw new TypeError(\"ref must be of type of string or Identifiable\");\n return targetRef;\n }\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Version } from \"../../../model\";\r\nimport { VersionUtil } from \"../../../util\";\r\n\r\n/**\r\n * @private\r\n * Specifies the semantic versioning of an API.\r\n */\r\nexport class VersionImpl implements Version {\r\n\r\n /**\r\n * Specifies versions with incompatible API changes.\r\n */\r\n public readonly major: number;\r\n\r\n /**\r\n * Specifies versions with functionalities that have backward compatibility.\r\n */\r\n public readonly minor: number;\r\n\r\n /**\r\n * Specifies versions that fixes bugs.\r\n */\r\n public readonly patch: number;\r\n \r\n /**\r\n * Specifies the timestamp that corresponds to the build date for this `Version` instance.\r\n */\r\n public readonly buildTimeStamp: number;\r\n \r\n /**\r\n * An optional string that indicates additional labels for pre-release and build metadata.\r\n */\r\n public readonly metadata: string | undefined;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(major: number, minor: number, patch: number, buildTimeStamp: number, metadata?: string) {\r\n this.major = major;\r\n this.minor = minor;\r\n this.patch = patch;\r\n this.buildTimeStamp = buildTimeStamp;\r\n this.metadata = metadata;\r\n }\r\n\r\n /**\r\n * Returns a string representation of this `Version` object in the form `M.m.p`, where\r\n * `M` represents the major number, `m` represents the minor number and `p` represents\r\n * the patch number of this `VersionImpl` instance.\r\n * \r\n * @returns A string representation of this `VersionImpl` instance.\r\n */\r\n public toString(): string {\r\n return VersionUtil.stringify(this);\r\n }\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Version, VersionConfig, VersionManager } from \"../../model\";\r\nimport { VersionImpl } from \"../impl/version/version.impl\";\r\n\r\n/**\r\n * The abstract class for all services that implement the `VersionManager` interface.\r\n */\r\nexport abstract class AbstractVersionManager implements VersionManager {\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _version: Version;\r\n\r\n /**\r\n * Creates a new VersionManager object.\r\n * @param config the reference to the VersionConfig provider.\r\n */\r\n constructor(config: VersionConfig) {\r\n this._version = new VersionImpl(\r\n config.major,\r\n config.minor,\r\n config.patch,\r\n config.buildTimestamp,\r\n config.metadata\r\n );\r\n }\r\n\r\n /**\r\n * Returns the version of the associated Angular project.\r\n * \r\n * @return the version of the associated Angular project.\r\n */\r\n public getVersion(): Version {\r\n return this._version;\r\n }\r\n \r\n /**\r\n * Returns the build timestamp of the associated Angular project.\r\n * \r\n * @return the build timestamp of the associated Angular project.\r\n */\r\n public getBuildTimestamp(): number {\r\n return this._version.buildTimeStamp;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { AbstractVersionManager } from '../../../core';\r\nimport { VersionConfig } from '../../business';\r\n\r\n/**\r\n * @private\r\n * The current version of the Angular Toolbox library.\r\n */\r\nconst ATX_VERSION_CONFIG: VersionConfig = {\r\n major: 1,\r\n minor: 5,\r\n patch: 2,\r\n buildTimestamp: 1733834973900\r\n};\r\n\r\n/**\r\n * The public service that exposes the current version of the Angular Toolbox library.\r\n */\r\n@Injectable()\r\nexport class AngularToolboxVersionService extends AbstractVersionManager {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor() {\r\n super(ATX_VERSION_CONFIG);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { AngularToolboxVersionService } from './model/service/version/angular-toolbox-version.service';\r\n\r\n/**\r\n * @private\r\n */\r\n@NgModule({\r\n providers: [ AngularToolboxVersionService ]\r\n})\r\nexport class AngularToolboxModule { }","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ArrayList } from \"./array-list\";\r\nimport { ArrayListEventType } from \"./array-list-event-type.enum\";\r\n\r\n/**\r\n * The `ArrayListEvent` class represents an event that is dispatched when the associated collection changes.\r\n */\r\nexport class ArrayListEvent<T> {\r\n\r\n /**\r\n * The type of this event.\r\n */\r\n public readonly type: ArrayListEventType;\r\n \r\n /**\r\n * The reference to the `ArrayList` instance that dispatches this event.\r\n */\r\n public readonly list: ArrayList<T>;\r\n \r\n /**\r\n * Represents events dispatched by the `ArrayList` class.\r\n * \r\n * @param type The type of the event.\r\n * @param list The reference to the `ArrayList` instance that dispatches this event.\r\n */\r\n constructor(type: ArrayListEventType, list: ArrayList<T>) {\r\n this.type = type;\r\n this.list = list;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `ArrayListEventType` class the type of events on an `ArrayListEvent` object.\r\n */\r\nexport enum ArrayListEventType {\r\n\r\n /**\r\n * The type of event associated with the `ArrayList.addAll` action. \r\n */\r\n ADD_ALL = \"addAll\",\r\n\r\n /**\r\n * The type of event associated with the `ArrayList.addItem`, or `ArrayList.addItemAt` actions. \r\n */\r\n ADD = \"add\",\r\n\r\n /**\r\n * The type of event associated with the `ArrayList.removeAll` action. \r\n */\r\n REMOVE_ALL = \"removeAll\",\r\n\r\n /**\r\n * The type of event associated with the `ArrayList.remove`, or `ArrayList.removeAt` actions. \r\n */\r\n REMOVE = \"remove\"\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter } from \"@angular/core\";\r\nimport { IdentifiableComponent } from \"../core\";\r\nimport { ArrayListEvent } from \"./array-list.event\";\r\nimport { ArrayListEventType } from \"./array-list-event-type.enum\";\r\n\r\n/**\r\n * The `ArrayList` class uses a backing `Array` as the source of the data collection. Items in the backing\r\n * `Array` can be accessed and manipulated using the methods and properties of the `ArrayList` instance.\r\n * Operations on an `ArrayList` instance modify the data source.\r\n * \r\n * You typically use the `ArrayList` class as base class for services that persist data in the User Interface.\r\n */\r\nexport class ArrayList<T> extends IdentifiableComponent {\r\n\r\n /**\r\n * Dispatches events each time this `ArrayList` is modified.\r\n */\r\n public readonly change: EventEmitter<ArrayListEvent<T>> = new EventEmitter<ArrayListEvent<T>>();\r\n\r\n /**\r\n * Gets the number of items in the list.\r\n */\r\n public get length(): number {\r\n return this.__list__.length;\r\n }\r\n\r\n /**\r\n * @private\r\n * The array used as a source for the `ArrayList`.\r\n */\r\n protected __list__: Array<T> = [];\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(classRef: string | undefined = undefined) {\r\n super(classRef || \"ArrayList\");\r\n }\r\n \r\n /**\r\n * Adds a list of items to the current `ArrayList` instance, placing them at the end of the\r\n * list in the order they are passed.\r\n * \r\n * @param addList The list of items to add to this current `ArrayList` instance.\r\n * \r\n * @return A reference to this `ArrayList` instance.\r\n */\r\n public addAll(addList: Array<T>): ArrayList<T> {\r\n this.__list__.push(...addList);\r\n this.dispatchEvent(ArrayListEventType.ADD_ALL);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds the specified item to the end of the list.\r\n * \r\n * @param item The item to add.\r\n * \r\n * @return A reference to this `ArrayList` instance.\r\n */\r\n public addItem(item: T): ArrayList<T> {\r\n this.__list__.push(item);\r\n this.dispatchEvent(ArrayListEventType.ADD);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds the item at the specified index.\r\n *\r\n * @param item The item to place at the index.\r\n * @param index The index at which to place the item.\r\n * \r\n * @return A reference to this `ArrayList` instance.\r\n */\r\n public addItemAt(item: T, index: number): ArrayList<T> {\r\n if (index < 0) throw new RangeError (\"index must be greater that 0\");\r\n const len: number = this.__list__.length;\r\n if (index > len) throw new RangeError (`index exceeds the number of list elements. Index must not exceed ${len}.`);\r\n this.__list__.splice(index, 0, item);\r\n this.dispatchEvent(ArrayListEventType.ADD);\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the item at the specified index.\r\n *\r\n * @param index The index in the list from which to retrieve the item.\r\n * \r\n * @returns The item at that index, `undefined` if there is none.\r\n */\r\n public getItemAt(index: number): T | undefined {\r\n return this.__list__[index];\r\n }\r\n\r\n /**\r\n * Returns the index of the item if it is in the list.\r\n * \r\n * @param item The item to find.\r\n * \r\n * @returns The index of the item, `-1` if the item is not in the list.\r\n */\r\n public getItemIndex(item: T): number {\r\n return this.__list__.findIndex(elm => elm === item);\r\n }\r\n\r\n /**\r\n * Removes all items from the list.\r\n * \r\n * @return A reference to this `ArrayList` instance.\r\n */\r\n public removeAll(): ArrayList<T> {\r\n this.__list__.length = 0;\r\n this.dispatchEvent(ArrayListEventType.REMOVE_ALL);\r\n return this;\r\n }\r\n\r\n /**\r\n * Removes the specified item from this list.\r\n * \r\n * @param item Reference to the item that should be removed.\r\n *\r\n * @returns `true` whether if the item was removed; `false` otherwise.\r\n */\r\n public removeItem(item: T): boolean {\r\n const idx: number = this.getItemIndex(item);\r\n if (idx === -1) return false;\r\n this.__list__.splice(idx, 1);\r\n this.dispatchEvent(ArrayListEventType.REMOVE);\r\n return true;\r\n }\r\n\r\n /**\r\n * Removes the item at the specified index and returns it.\r\n * Any items that were after this index are now one index earlier.\r\n * \r\n * @param index The index from which to remove the item.\r\n\r\n * @returns The item that was removed.\r\n */\r\n public removeItemAt(index: number): T | undefined {\r\n const result: T = this.__list__.splice(index, 1)[0];\r\n this.dispatchEvent(ArrayListEventType.REMOVE);\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns an array that is populated in the same order as this `ArrayList` instance.\r\n * \r\n * @returns An array that is populated in the same order as this `ArrayList` instance.\r\n */\r\n public toArray(): Array<T> {\r\n return this.__list__.slice(0);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private dispatchEvent(type: ArrayListEventType): void {\r\n const event: ArrayListEvent<T> = new ArrayListEvent<T>(type, this);\r\n this.change.emit(event);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nexport * from './array-list';\r\nexport * from './array-list.event';\r\nexport * from './array-list-event-type.enum';","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'atx-logo',\r\n standalone: true,\r\n templateUrl: './angular-toolbox-logo.component.html'\r\n})\r\nexport class AngularToolboxLogoComponent { }\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\r\n\t viewBox=\"0 0 185.6 200\" style=\"enable-background:new 0 0 185.6 200;\" xml:space=\"preserve\">\r\n\t<style type=\"text/css\">.st3{opacity:0.75;fill:#FFFFFF;}</style>\r\n\t<g>\r\n\t\t<polygon fill=\"#03A9F4\" points=\"92.4,1.9 92.4,1.9 92.4,1.9 1.8,34.6 15.5,155 92.4,198.1 92.4,198.1 92.4,198.1 169.8,155 183.8,34.6\"/>\r\n\t\t<polygon fill=\"#039BE5\" points=\"92.4,1.9 92.4,23.7 92.4,23.7 92.4,122.8 92.4,122.8 92.4,198.1 92.4,198.1 169.8,155 183.8,34.6\"/>\r\n\t</g>\r\n\t<g>\r\n\t\t<path fill=\"#FFFFFF\" d=\"M60.3,75.1l17.9,17.9c3.1-2.9,5.7-5.5,7.7-7.4L67.9,67.5l-2.2-9.8l-16.1-9.8l-4.4,4.4l-4.4,4.4l9.8,16.1 L60.3,75.1z\"/>\r\n\t\t<path class=\"st3\" d=\"M114.7,104.3l26.5,26.4c4.9,4.9,4.9,12.8,0,17.7c-4.9,4.9-12.8,4.9-17.7,0L97.1,122L114.7,104.3z\"/>\r\n\t\t<path fill=\"#FFFFFF\" d=\"M92.4,114.6V89l-49.2,47.2c-0.1,0.1-0.2,0.2-0.3,0.3c-4.3,4.3-4.2,11.1-0.1,15.3c4.1,4.1,11.1,4.2,15.4,0 c0.2-0.2,0.4-0.4,0.6-0.6\"/>\r\n\t\t<path class=\"st3\" d=\"M144.3,61.6l-1.8-1.5c-0.3-0.3-0.7-0.4-1.2-0.4c-0.4,0-0.8,0.3-1.1,0.6L129.7,74c-0.3,0.4-0.8,0.6-1.3,0.6 l-3.8,0.3c-0.3,0-0.6-0.1-0.9-0.3l-7.4-6.3c-0.3-0.2-0.5-0.6-0.5-1l-0.5-3.5c-0.1-0.4,0-0.8,0.3-1.1l9.9-13.4 c0.4-0.6,0.4-1.5-0.2-2l-2.4-1.9c-0.5-0.4-1-0.4-1.7-0.2c-6.8,1.3-18.5,8-21.4,17.1c-2.6,8-1.7,13.7-1.7,13.7 c0,4.5-1.5,8.9-3.3,10.7L92.4,89v25.7l15.9-17.2c6.1-5.4,18.2,0.4,28.2-8.7c9.1-8.3,10.6-17.7,8.6-25.6 C145,62.5,144.9,62,144.3,61.6z\"/>\r\n\t</g>\r\n</svg>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Specifies the semantic versioning of an Angular application.\r\n */\r\nexport interface Version {\r\n\r\n /**\r\n * Specifies versions with incompatible API changes.\r\n */\r\n major: number;\r\n \r\n /**\r\n * Specifies versions with functionalities that have backward compatibility.\r\n */\r\n minor: number;\r\n\r\n /**\r\n * Specifies versions that fixes bugs.\r\n */\r\n patch: number;\r\n \r\n /**\r\n * Specifies the timestamp that corresponds to the build date for this `Version` object.\r\n */\r\n buildTimeStamp: number;\r\n\r\n /**\r\n * An optional string that indicates additional labels for pre-release and build metadata.\r\n */\r\n metadata?: string;\r\n\r\n /**\r\n * Returns a string representation of this `Version` object.\r\n * \r\n * @returns A string representation of this `Version` object.\r\n */\r\n toString(): string;\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `VersionConfig` interface provides the basic API that defines a version config token.\r\n */\r\nexport interface VersionConfig {\r\n\r\n /**\r\n * Specifies the major number for this config.\r\n */\r\n major: number;\r\n \r\n /**\r\n * Specifies the minor number for this config.\r\n */\r\n minor: number;\r\n\r\n /**\r\n * Specifies the patch number for this config.\r\n */\r\n patch: number;\r\n\r\n /**\r\n * Specifies the timestamp that corresponds to the build date for this config.\r\n */\r\n buildTimestamp: number;\r\n\r\n /**\r\n * An optional string that indicates additional labels for pre-release and build metadata.\r\n */\r\n metadata?: string;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { VersionConfig } from \"./version-config\";\r\n\r\n/**\r\n * The default provider for the `VersionService` configuration. You typically define\r\n * the custom properties in the main `NgModule` declaration to initialize the application\r\n * config:\r\n * \r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: VERSION_CONFIG, useValue: { major: 1, minor: 2, patch: 12 } }\r\n * ],\r\n * ...\r\n * });\r\n */\r\nexport const VERSION_CONFIG: VersionConfig = {\r\n \r\n /**\r\n * Specifies the major number of this config.\r\n */\r\n major: 0,\r\n\r\n /**\r\n * Specifies the minor number of this config.\r\n */\r\n minor: 0,\r\n\r\n /**\r\n * Specifies the patch number of this config.\r\n */\r\n patch: 0,\r\n\r\n /**\r\n * Specifies the timestamp that corresponds to the build date for this `Version` object.\r\n * Default value is `NaN`.\r\n */\r\n buildTimestamp: NaN\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Version } from \"./version\";\r\n\r\n/**\r\n * The interface implemented by services that specifie the semantic versioning of an Angular application.\r\n */\r\nexport interface VersionManager {\r\n\r\n /**\r\n * Returns the version of the associated Angular project.\r\n * \r\n * @return the version of the associated Angular project.\r\n */\r\n getVersion(): Version;\r\n \r\n /**\r\n * Returns the build timestamp of the associated Angular project.\r\n * \r\n * @return the build timestamp of the associated Angular project.\r\n */\r\n getBuildTimestamp(): number;\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines properties for the `DarkModeService` configuration.\r\n */\r\nexport interface DarkModeConfig {\r\n\r\n /**\r\n * Indicates whether the dark mode is activated by default (`true`), or not (`false`).\r\n */\r\n darkModeEnabled?: boolean;\r\n \r\n /**\r\n * Indicates whether the dark mode uses browser settings (`true`), or not (`false`).\r\n * When `true`, this property overrides the `darkModeEnabled` property.\r\n */\r\n detectBrowserSettings?: boolean;\r\n\r\n /**\r\n * CSS property name used to set the dark mode look and feel.\r\n */\r\n cssProperty?: string;\r\n\r\n /**\r\n * Reference to the key value used to persist the dark mode state to local storage.\r\n */\r\n storageKey?: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Reference to the dark mode default storage key.\r\n */\r\nexport const STORAGE_KEY: string = \"dark-mode-key\";\r\n\r\n/**\r\n * Reference to the dark mode default css property.\r\n */\r\nexport const CSS_PROP: string = \"dark-mode\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DarkModeConfig } from \"./dark-mode-config\";\r\nimport { CSS_PROP, STORAGE_KEY } from \"./dark-mode.constant\";\r\n\r\n/**\r\n * The default provider for the `DarkModeService` configuration. You typically define\r\n * the custom properties in the main NgModule declaration to initialize the app dark mode:\r\n * \r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: DARK_MODE_CONFIG, useValue: { enableDarkMode: true } }\r\n * ],\r\n * ...\r\n * });\r\n */\r\nexport const DARK_MODE_CONFIG: DarkModeConfig = {\r\n \r\n /**\r\n * Indicates whether the dark mode uses browser settings (`true`), or not (`false`).\r\n * Default value is `false`.\r\n */\r\n darkModeEnabled: false,\r\n \r\n /**\r\n * Indicates whether the dark mode uses browser settings (`true`), or not (`false`).\r\n * Default value is `false`.\r\n */\r\n detectBrowserSettings: false,\r\n \r\n /**\r\n * CSS property name used to set the dark mode look and feel.\r\n * Default value is `'dark-mode'`.\r\n */\r\n cssProperty: CSS_PROP,\r\n \r\n /**\r\n * Reference to the key value used to persist the dark mode state to local storage.\r\n * Default value is `'dark-mode-key'`.\r\n */\r\n storageKey: STORAGE_KEY\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Workaround for the typescript `ScrollBehavior` declaration.\r\n */\r\nexport type ScrollBehavior = \"auto\" | \"instant\" | \"smooth\";","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ComponentRef } from \"@angular/core\";\r\n\r\n/**\r\n * Defines the type of objects managed by the `AbstractWindowService` class.\r\n */\r\nexport interface WindowRef<T, U> {\r\n \r\n /**\r\n * The reference to a window stored within the `AbstractWindowService` class.\r\n */\r\n window: U;\r\n\r\n /**\r\n * The reference to the Angular component displayed within a window.\r\n */\r\n componentRef: ComponentRef<T>;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { WindowFeatureState } from \"./window-feature-state\";\r\nimport { WindowTarget } from \"./window-target\";\r\n\r\n/**\r\n * Defines the APi used to initialize the windows created by the `WindowService.open()` method.\r\n */\r\nexport interface WindowInit {\r\n\r\n /**\r\n * The name of the browsing context the resource is being loaded into.\r\n */\r\n target?: WindowTarget;\r\n\r\n /**\r\n * The title of the new window.\r\n */\r\n title?: string;\r\n\r\n /**\r\n * The icon of the new window.\r\n */\r\n icon?: string;\r\n\r\n /**\r\n * Specifies the distance in pixels from the left side of the work area as defined by the user's operating system where the new window will be generated.\r\n */\r\n left?: number;\r\n\r\n /**\r\n * Specifies the distance in pixels from the top side of the work area as defined by the user's operating system where the new window will be generated.\r\n */\r\n top?: number;\r\n\r\n /**\r\n * Specifies the width of the content area, including scrollbars. The minimum required value is `100`.\r\n */\r\n width?: number;\r\n\r\n /**\r\n * Specifies the height of the content area, including scrollbars. The minimum required value is `100`.\r\n */\r\n height?: number;\r\n \r\n /**\r\n * Specifies whether the directories are activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n directories?: WindowFeatureState;\r\n \r\n /**\r\n * Specifies whether the title bar is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n titlebar?: WindowFeatureState;\r\n \r\n /**\r\n * Specifies whether the scrollbars are activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n scrollbars?: WindowFeatureState;\r\n\r\n /**\r\n * Specifies whether the toolbar is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n toolbar?: WindowFeatureState;\r\n\r\n /**\r\n * Specifies whether the location is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n location?: WindowFeatureState;\r\n\r\n /**\r\n * Specifies whether the status is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n status?: WindowFeatureState;\r\n\r\n /**\r\n * Specifies whether the menu bar is activated (`WindowFeatureState.YES`), or not (`WindowFeatureState.NO`).\r\n */\r\n menubar?: WindowFeatureState;\r\n\r\n /**\r\n * Indicates whether the winbdow is centered (`true`), or not (`false`).\r\n * If `true`, the `top` and `left` properties are ignored.\r\n */\r\n center?: boolean;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Specifies values used to activate, or deactivate, a feature for a browser window created by the `WindowService.open()` method.\r\n */\r\nexport enum WindowFeatureState {\r\n\r\n /**\r\n * The value used to activate a feature.\r\n */\r\n YES = \"yes\",\r\n\r\n /**\r\n * The value used to deactivate a feature.\r\n */\r\n NO = \"no\"\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Specifies the name of the browsing context the resource is being loaded into.\r\n */\r\nexport enum WindowTarget {\r\n\r\n /**\r\n * The current browsing context.\r\n */\r\n SELF = \"self\",\r\n\r\n /**\r\n * Usually a new tab, but users can configure browsers to open a new window instead.\r\n */\r\n BLANK = \"_blank\",\r\n\r\n /**\r\n * The parent browsing context of the current one. If no parent, behaves as `WindowTarget.SELF`.\r\n */\r\n PARENT = \"_parent\",\r\n\r\n /**\r\n * The topmost browsing context.\r\n */\r\n TOP = \"_top\",\r\n\r\n /**\r\n * Allows embedded fenced frames to navigate the top-level frame.\r\n */\r\n UNFENCED_TOP = \"_unfencedTop\"\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { LayoutRegion, LayoutRegionType } from \"./layout-region\";\r\n\r\n/**\r\n * Defines the layout constraints of a `BorderLayoutContainer` object.\r\n */\r\nexport interface LayoutConstraints {\r\n\r\n /**\r\n * Specifies the region of the `BorderLayoutContainer` object.\r\n */\r\n region: LayoutRegion | LayoutRegionType;\r\n\r\n /**\r\n * Indicates whether the `BorderLayoutContainer` object is resizable (`true`), or not (`false`).\r\n */\r\n resizable?: boolean;\r\n\r\n /**\r\n * Defines the default size of the `BorderLayoutContainer` object.\r\n */\r\n size?: number;\r\n \r\n /**\r\n * Defines the minimum size of the `BorderLayoutContainer` object.\r\n */\r\n minSize?: number;\r\n\r\n /**\r\n * Defines the maximum size of the `BorderLayoutContainer` object.\r\n */\r\n maxSize?: number;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nexport type LayoutRegionType = \"north\" | \"south\" | \"west\" | \"west\" | \"east\" | \"center\";\r\n\r\n/**\r\n * The list of layout constraints that defines the regions of a `BorderLayout` container.\r\n */\r\nexport enum LayoutRegion {\r\n\r\n /**\r\n * The north layout constraint (top of container).\r\n */\r\n NORTH = \"north\",\r\n\r\n /**\r\n * The south layout constraint (bottom of container).\r\n */\r\n SOUTH = \"south\",\r\n\r\n /**\r\n * The west layout constraint (left side of container).\r\n */\r\n WEST = \"west\",\r\n\r\n /**\r\n * The east layout constraint (right side of container).\r\n */\r\n EAST = \"east\",\r\n\r\n /**\r\n * The center layout constraint (middle of container).\r\n */\r\n CENTER = \"center\"\r\n};\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `LayoutRegionError` class represents an error thrown by layout components when manipulating\r\n * invalid regions of the container.\r\n */\r\nexport class LayoutRegionError extends Error {\r\n\r\n /**\r\n * Creates a new `LayoutRegionError` instance.\r\n * \r\n * @param message A human-readable description of the error.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { BorderLayoutContainer, BorderLayout } from \"../../../../component\";\r\nimport { LayoutDragEventType } from \"../../../../model\";\r\n\r\n/**\r\n * The `LayoutDragEvent` class is an event that represents a drag interaction with a `BorderLayoutContainer`.\r\n */\r\nexport class LayoutDragEvent {\r\n\r\n /**\r\n * The reference to the container that triggered this event.\r\n */\r\n public readonly target: BorderLayoutContainer;\r\n\r\n /**\r\n * The reference to the layout that contains the target container.\r\n */\r\n public layout!: BorderLayout;\r\n\r\n /**\r\n * The type of this event; a `LayoutDragEventType` constant.\r\n */\r\n public readonly type: LayoutDragEventType;\r\n\r\n /**\r\n * Creates a new `LayoutDragEvent` instance.\r\n * \r\n * @param target The container that triggered this event.\r\n * @param type The type of this event.\r\n */\r\n constructor(target: BorderLayoutContainer, type: LayoutDragEventType) {\r\n this.target = target;\r\n this.type = type;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the type of a `LayoutDragEvent` instance.\r\n */\r\nexport enum LayoutDragEventType {\r\n\r\n /**\r\n * Indicates that the dragging process is starting.\r\n */\r\n DRAG_START = \"dragstart\",\r\n\r\n /**\r\n * Indicates that the dragging process stopped.\r\n */\r\n DRAG_STOP = \"dragstop\",\r\n\r\n /**\r\n * Indicates that the user is dragging the container handle.\r\n */\r\n DRAGGING = \"dragging\"\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the content vertical position of a dropdown component.\r\n */\r\nexport type DropdownVerticalPosition = \"start\" | \"top\" | \"middle\" | \"bottom\" | \"end\";\r\n\r\n/**\r\n * Defines the content horizontal position of a dropdown component.\r\n */\r\nexport type DropdownHorizontalPosition = \"start\" | \"left\" | \"center\" | \"right\" | \"end\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DropdownComponent } from \"../../../../component\";\r\nimport { DropdownEventType } from \"./dropdown-event-type.enum\";\r\nimport { DropdownState } from \"./dropdown-state\";\r\n\r\n/**\r\n * The `DropdownEvent` class is an event that represents an interaction with a dropdown container.\r\n */\r\nexport class DropdownEvent {\r\n\r\n /**\r\n * The reference to the container that triggered this event.\r\n */\r\n public readonly target: DropdownComponent;\r\n\r\n /**\r\n * The type of this event; a `DropdownEventType` constant.\r\n */\r\n public readonly type: DropdownEventType;\r\n\r\n /**\r\n * The state the dropdown container is transitioning to.\r\n */\r\n public readonly newState: DropdownState;\r\n\r\n /**\r\n * The state the dropdown container is transitioning from.\r\n */\r\n public readonly oldState: DropdownState;\r\n\r\n /**\r\n * Creates a new `DropdownEvent` instance.\r\n * \r\n * @param target The dropdown container that triggered this event.\r\n * @param type The type of this event.\r\n * @param newState The state the dropdown container is transitioning to.\r\n * @param oldState The state the dropdown container is transitioning from.\r\n */\r\n constructor(target: DropdownComponent, type: DropdownEventType, newState: DropdownState, oldState: DropdownState) {\r\n this.target = target;\r\n this.type = type;\r\n this.newState = newState;\r\n this.oldState = oldState;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the type of a `DropdownEvent` instance.\r\n */\r\nexport enum DropdownEventType {\r\n\r\n /**\r\n * Defines an event fired on a dropdown component just after it is shown or hidden.\r\n */\r\n TOGGLE = \"toggle\",\r\n\r\n /**\r\n * Defines an event fired on a dropdown component just before it is shown or hidden.\r\n */\r\n BEFORE_TOGGLE = \"beforetoggle\",\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Represents the state of a dropdown container.\r\n */\r\nexport type DropdownState = \"open\" | \"closed\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the \"popover\" state of the content container whithin dropdown component.\r\n */\r\nexport type PopoverState = \"auto\" | \"manual\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A markup interface that defines instantiable objects.\r\n */\r\nexport type Instantiable = { constructor: { name: string } };\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `Destroyable` interface provides a global interface for creating object that might be destroyed by the system.\r\n */\r\nexport interface Destroyable {\r\n\r\n /**\r\n * Makes an object elligible for garbage collection.\r\n */\r\n destroy(): void | any;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `Destroyable` interface provides a global interface for creating object that might be destroyed by the system.\r\n */\r\nexport type AppBridgeCommand = (...rest: any[])=> void;","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Uuid } from \"../../../util\";\r\n\r\n/**\r\n * `Identifiable` objects are Angular components that can be identified by a unique UUID identifier.\r\n */\r\nexport interface Identifiable {\r\n\r\n /**\r\n * Returns the unique identifier for this object.\r\n * \r\n * @returns An instance of the `Uuid` class.\r\n */\r\n getID(): Uuid;\r\n \r\n /**\r\n * Returns the class name reference of this object.\r\n * This can be useful to workaround TypeScript compilation obfuscation.\r\n * \r\n * @returns the class name reference of this object.\r\n */\r\n getClassRef(): string\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\nimport { HttpMockError } from \"./http-mock-error\";\r\n\r\n/**\r\n * Defines the config of a HTTP response mock object.\r\n */\r\nexport interface HttpResponseMock {\r\n\r\n /**\r\n * The response body. Can be either an object, or an `Observable` instance.\r\n */\r\n body?: any | Observable<any>;\r\n\r\n /**\r\n * All response headers.\r\n */\r\n headers?: HttpHeaders;\r\n\r\n /**\r\n * Response status code.\r\n */\r\n status: number;\r\n\r\n /**\r\n * Textual description of response status code, defaults to `OK`.\r\n */\r\n statusText: string;\r\n\r\n /**\r\n * URL of the resource retrieved, or `null` if not available.\r\n */\r\n url: string | null;\r\n\r\n /**\r\n * The optional error for this HTTP request.\r\n */\r\n error: HttpMockError | null;\r\n\r\n /**\r\n * Returns a delayed response, in miliseconds.\r\n * Maximum value is `10000` miliseconds (10 seconds).\r\n */\r\n delay?: number;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpRequest } from \"@angular/common/http\";\r\nimport { HttpResponseMock } from \"./http-response-mock\";\r\nimport { HttpMockParameters } from \"../../../../framework\";\r\nimport { HttpMockMethodDescriptor } from \"./http-mock-method-descriptor\";\r\n\r\n/**\r\n * The `HttpMethodMock` interface defines the behavior of actions invoked each time an Angular\r\n * `HttpClient` instance sends requests to a specific API endpoint.\r\n */\r\nexport interface HttpMethodMock {\r\n\r\n /**\r\n * @private\r\n * Current progressive download mechanism will be replaced by a more efficient process.\r\n */\r\n downloadManager?: any;\r\n \r\n /**\r\n * This method emulates a successful HTTP call response.\r\n * \r\n * @param request The request associated with a HTTP call.\r\n * @param parameters The list of parameters associated with the HTTP request.\r\n * \r\n * @returns A user-defined `HttpResponse` mock object.\r\n */\r\n data: (request: HttpRequest<any>, parameters?: HttpMockParameters)=> HttpResponseMock;\r\n \r\n /**\r\n * The API descriptor of the associated with this HTTP method.\r\n */\r\n descriptor?: HttpMockMethodDescriptor;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Uuid } from \"../../../../util\";\r\nimport { HttpMockInterceptor } from \"./http-mock-interceptor\";\r\n\r\n/**\r\n * An interface that let Developer define mocking strategies for Angular HTTP calls.\r\n */\r\nexport interface HttpMockConfig {\r\n\r\n /**\r\n * The main URL origin for this mock, as defined by the URL standard.\r\n * \r\n * @see https://url.spec.whatwg.org/#concept-url-origin\r\n */\r\n origin?: string;\r\n\r\n /**\r\n * The unique identifier for this HTTP mock config.\r\n */\r\n id?: Uuid;\r\n\r\n /**\r\n * The configuration of mocking strategies for each specific API.\r\n */\r\n interceptors: HttpMockInterceptor[];\r\n \r\n /**\r\n * The description of this HTTP API.\r\n */\r\n description?: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMethodMock } from \"./http-method-mock\";\r\nimport { HttpMockEndpointDescriptor } from \"./http-mock-endpoint-descriptor\";\r\n\r\n/**\r\n * Provides the API to define mocking strategies for a specific endpoint.\r\n */\r\nexport interface HttpMockEndpoint {\r\n \r\n /**\r\n * The API descriptor for this endpoint.\r\n */\r\n descriptor?: HttpMockEndpointDescriptor;\r\n\r\n /**\r\n * The route part of the endpoint to mock.\r\n */\r\n route: string;\r\n\r\n /**\r\n * The mock configuration of HTTP `GET` method calls for the specified route.\r\n */\r\n get?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `POST` method calls for the specified route.\r\n */\r\n post?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `PUT` method calls for the specified route.\r\n */\r\n put?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `DELETE` method calls for the specified route.\r\n */\r\n delete?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `PATCH` method calls for the specified route.\r\n */\r\n patch?: HttpMethodMock;\r\n \r\n /**\r\n * The mock configuration of HTTP `HEAD` method calls for the specified route.\r\n */\r\n head?: HttpMethodMock;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpParameterDescriptor } from \"./http-mock-parameter-descriptor\";\r\n\r\n/**\r\n * Provides the API to create documentation for a specific endpoint.\r\n */\r\nexport interface HttpMockEndpointDescriptor {\r\n \r\n /**\r\n * The description of the endpoint associated with this descriptor.\r\n */\r\n description?: string;\r\n\r\n /**\r\n * The description all parameters of the endpoint associated with this descriptor.\r\n */\r\n params?: HttpParameterDescriptor[];\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpParameterDescriptor } from \"./http-mock-parameter-descriptor\";\r\n\r\n/**\r\n * Provides the API to create documentation for a specific HTTP method.\r\n */\r\nexport interface HttpMockMethodDescriptor {\r\n \r\n /**\r\n * The description of the method associated with this descriptor.\r\n */\r\n description?: string;\r\n\r\n /**\r\n * The payload description for the method associated with this descriptor.\r\n */\r\n payload?: string;\r\n\r\n /**\r\n * The body description for the method associated with this descriptor.\r\n */\r\n body?: string;\r\n\r\n /**\r\n * The list of query string parameters for the method associated with this descriptor.\r\n */\r\n queryParams?: HttpParameterDescriptor[];\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Provides the API to create documentation for a specific HTTP parameter.\r\n */\r\nexport interface HttpParameterDescriptor {\r\n \r\n /**\r\n * The description of the HTTP parameter associated with this descriptor.\r\n */\r\n description: string;\r\n\r\n /**\r\n * The referrence to the HTTP parameter associated with this descriptor.\r\n */\r\n ref: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockEndpoint } from \"./http-mock-endpoint\";\r\n\r\n/**\r\n * Provides the API to define mocking strategies for a specific API.\r\n */\r\nexport interface HttpMockInterceptor {\r\n\r\n /**\r\n * The ID of this interceptor.\r\n */\r\n id: string;\r\n \r\n /**\r\n * The URL origin for this interceptor, as defined by the URL standard.\r\n * \r\n * @see https://url.spec.whatwg.org/#url\r\n */\r\n origin?: string;\r\n\r\n /**\r\n * A list of endpoints that must be intercepted by the HTTP Mocking Framework.\r\n */\r\n endpoints: HttpMockEndpoint[];\r\n\r\n /**\r\n * The description of this interceptor.\r\n */\r\n description?: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpStatusCode } from \"@angular/common/http\";\r\n\r\n\r\n/**\r\n * The `HttpMockError` interface provides the API that must be implemented by HTTP mock errors.\r\n */\r\nexport interface HttpMockError {\r\n \r\n /**\r\n * Error status code.\r\n */\r\n status: HttpStatusCode;\r\n \r\n /**\r\n * Textual description of error status code.\r\n */\r\n statusText: string;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Uuid } from \"../../../../util\";\r\n\r\n/**\r\n * Defines the the metadata associated to an HTTP mock request.\r\n */\r\nexport interface HttpMockRequestMetadata {\r\n\r\n /**\r\n * The unique ID associated with the HTTP request.\r\n */\r\n id: Uuid;\r\n\r\n /**\r\n * Indicates the starting time of the HTTP request.\r\n */\r\n start: number;\r\n\r\n /**\r\n * Indicates the how much time the request is stalled befaore the data loading starts.\r\n */\r\n stalled: number;\r\n \r\n /**\r\n * Indicates the duration of the HTTP request.\r\n */\r\n duration: number;\r\n\r\n /**\r\n * The reference to the `URL` object for the HTTP request.\r\n */\r\n url: URL;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @Private\r\n * The markup interface for XMLHttpRequest proxy implementations.\r\n * \r\n * @see https://xhr.spec.whatwg.org/#the-open()-method\r\n */\r\nexport interface XhrProxy extends XMLHttpRequest {}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Observable } from \"rxjs\";\r\n\r\n/**\r\n * The markup interface for `Observable` object built from the Fetch API.\r\n */\r\nexport abstract class FetchClient extends Observable<any> {}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n\r\n/**\r\n * The list of constant values that can be passed to the `productionPolicy` of the `HttpMockingFrameworkConfig` interface.\r\n */\r\nexport enum HttpMockProductionPolicy {\r\n\r\n /**\r\n * Indicates that the framework intercepts requests silently in producion mode.\r\n */\r\n SILENT = 0,\r\n\r\n /**\r\n * Indicates that the framework has to send a warning message to the console when a request is intercetped in producion mode.\r\n */\r\n WARNING = 1,\r\n\r\n /**\r\n * Indicates that the framework trhows an error when a request is intercetped in producion mode.\r\n */\r\n ERROR = 2\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockProductionPolicy } from \"./http-mock-production-policy.enum\";\r\nimport { HttpMockingFrameworkConfig } from \"./http-mocking-framework-config\";\r\n\r\n/**\r\n * The default provider for the HTTP Mocking Framework configuration. You typically define\r\n * the custom properties in the main NgModule declaration to initialize the HTTP Mocking Framework:\r\n * \r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: HTTP_MOCKING_FRAMEWORK_CONFIG, useValue: { disableVisualFlag: true, productionPolicy: HttpMockProductionPolicy.WARNING } }\r\n * ],\r\n * ...\r\n * });\r\n */\r\nexport const HTTP_MOCKING_FRAMEWORK_CONFIG: HttpMockingFrameworkConfig = {\r\n \r\n /**\r\n * Indicates whether the visual flag is visible (`false`), or not (`true`).\r\n * Default value is `false`.\r\n */\r\n disableVisualFlag: false,\r\n\r\n /**\r\n * Indicates the behavior of the framework when it is used in production mode.\r\n * Default value is `HttpMockProductionPolicy.ERROR`.\r\n */\r\n productionPolicy: HttpMockProductionPolicy.ERROR\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockProductionPolicy } from \"./http-mock-production-policy.enum\";\r\n\r\n/**\r\n * Defines properties for the HTTP Mocking framework configuration.\r\n */\r\nexport interface HttpMockingFrameworkConfig {\r\n\r\n /**\r\n * Indicates whether the visual flag is visible (`false`), or not (`true`).\r\n */\r\n disableVisualFlag?: boolean;\r\n\r\n /**\r\n * Indicates the behavior of the framework when it is used in production mode.\r\n */\r\n productionPolicy?: HttpMockProductionPolicy;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpRequest } from \"@angular/common/http\";\r\nimport { HttpMockRequestMetadata } from \"../http-mock-request-metadata\";\r\n\r\n/**\r\n * The markup interface for all prefetch log metadata of the HTTP Mocking Framework.\r\n */\r\nexport interface HttpMockLoggingPrefetchMetadata {\r\n request: HttpRequest<any>;\r\n requestMetadata: HttpMockRequestMetadata;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpResponse } from \"@angular/common/http\";\r\nimport { HttpMockLoggingPrefetchMetadata } from \"./http-mock-logging-prefetch-metadata\";\r\n\r\n/**\r\n * The markup interface for all log metadata of the HTTP Mocking Framework.\r\n */\r\nexport interface HttpMockLoggingMetadata extends HttpMockLoggingPrefetchMetadata {\r\n response: HttpResponse<any>;\r\n}","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in \n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Subscription } from 'rxjs';\nimport { Identifiable } from '../lang';\n\n/**\n * Defines the API to implement to create Angular subscription management objects.\n */\nexport interface SubscriptionManager {\n\n /**\n * Stores a new `Subscription` instance associated with the specified reference.\n * \n * @param ref The reference for which to store a new `Subscription` instance.\n * Can be either a string or an `Identifiable` object.\n * @param subscription The `Subscription` instance to register.\n * \n * @returns A reference to this `SubscriptionManager` object.\n */\n register(ref: string | Identifiable, subscription: Subscription): SubscriptionManager;\n\n /**\n * Stores a new `Subscription` instance associated with the reference specified\n * by the last `register()` method invokation.\n * \n * @param subscription The `Subscription` instance to register.\n * \n * @returns A reference to this `SubscriptionManager` object.\n */\n append(subscription: Subscription): SubscriptionManager;\n \n /**\n * Unsubscribes and removes all `Subscription` instances associated with the specified reference.\n * \n * @param ref The reference for which to remove all `Subscription` instances.\n * Can be either a string or an `Identifiable` object.\n * \n * @returns `true` whether the specified reference exists; `false` otherwise.\n */\n clearAll(ref: string | Identifiable): boolean;\n\n /**\n * Returns all `Subscription` instances associated with the specified reference.\n * \n * @param ref The reference for which to remove get `Subscription` instances.\n * Can be either a string or an `Identifiable` object.\n * \n * @returns All `Subscription` instances associated with the specified reference, or \n * `null` whether the specified reference does not exists.\n */\n get(ref: string | Identifiable): Array<Subscription> | null;\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The type of connection as defined by the `NetworkInformation.type` property.\r\n */\r\nexport type ConnectionType =\r\n 'bluetooth'\r\n | 'cellular'\r\n | 'ethernet'\r\n | 'mixed'\r\n | 'none'\r\n | 'other'\r\n | 'unknown'\r\n | 'wifi'\r\n | 'wimax';\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The effective type of connection as defined by the `NetworkInformation.effectiveType` property.\r\n */\r\nexport type EffectiveConnectionType =\r\n '2g'\r\n | '3g'\r\n | '4g'\r\n | 'slow-2g';","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ConnectionType } from \"./connection-type\";\r\nimport { EffectiveConnectionType } from \"./effective-connection-type\";\r\n\r\n/**\r\n * The `NetworkInformation` interface of the Network Information API provides\r\n * information about the connection a device is using to communicate with the network\r\n * and provides a means for scripts to be notified if the connection type changes.\r\n * The `NetworkInformation` interface cannot be instantiated. It is instead accessed\r\n * through the connection property of the `Navigator` interface or the `WorkerNavigator`\r\n * interface.\r\n */\r\nexport interface NetworkInformation extends EventTarget {\r\n\r\n /**\r\n * Returns the effective bandwidth estimate in megabits per second,\r\n * rounded to the nearest multiple of 25 kilobits per seconds.\r\n */\r\n readonly downlink: number;\r\n\r\n /**\r\n * Returns the maximum downlink speed, in megabits per second (Mbps),\r\n * for the underlying connection technology.\r\n */\r\n readonly downlinkMax: number;\r\n \r\n /**\r\n * Returns the effective type of the connection meaning one of the `EffectiveConnectionType` enum.\r\n * This value is determined using a combination of recently observed round-trip time and downlink values.\r\n */\r\n readonly effectiveType: EffectiveConnectionType;\r\n\r\n /**\r\n * Returns the type of connection a device is using to communicate with the network.\r\n * It will be one of the `ConnectionType` enum.\r\n */\r\n readonly type: ConnectionType;\r\n \r\n /**\r\n * Returns the estimated effective round-trip time of the current connection,\r\n * rounded to the nearest multiple of 25 milliseconds.\r\n */\r\n readonly rtt: number;\r\n\r\n /**\r\n * Returns `true` whether the user has set a reduced data usage option on the user agent.\r\n * `false` otherwise.\r\n */\r\n readonly saveData: boolean;\r\n\r\n /**\r\n * The event that's fired when connection information changes.\r\n */\r\n onchange: EventListener\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in \r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The `BatteryManager` interface of the Battery Status API provides information about\r\n * the system battery charge level. The `navigator.getBattery()` method returns a promise\r\n * that resolves with a `BatteryManager` interface.\r\n */\r\nexport interface BatteryManager extends EventTarget {\r\n\r\n /**\r\n * A boolean value indicating whether the battery is currently being charged.\r\n */\r\n readonly charging: boolean;\r\n\r\n /**\r\n * A number representing the remaining time in seconds until the battery is fully charged,\r\n * or 0 if the battery is already fully charged.\r\n */\r\n readonly chargingTime: number;\r\n\r\n /**\r\n * A number representing the remaining time in seconds until the battery\r\n * is completely discharged and the system suspends.\r\n */\r\n readonly dischargingTime: number;\r\n\r\n /**\r\n * A number representing the system's battery charge level scaled to a value between 0.0 and 1.0.\r\n */\r\n readonly level: number;\r\n\r\n /**\r\n * Fired when the battery charging state (the `charging` property) is updated.\r\n * \r\n * @param event A generic `Event`.\r\n */\r\n onlevelchange(event: Event): void;\r\n\r\n /**\r\n * Fired when the battery charging time (the `chargingTime` property) is updated.\r\n * \r\n * @param event A generic `Event`.\r\n */\r\n onchargingchange(event: Event): void;\r\n\r\n /**\r\n * Fired when the battery discharging time (the `dischargingTime` property) is updated.\r\n * \r\n * @param event A generic `Event`.\r\n */\r\n onchargingtimechange(event: Event): void;\r\n\r\n /**\r\n * Fired when the battery level (the `level` property) is updated.\r\n * \r\n * @param event A generic `Event`.\r\n */\r\n ondischargingtimechange(event: Event): void;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Destroyable } from \"../lang\";\r\nimport { Log } from \"./log\";\r\n\r\n/**\r\n * The markup interface for Angular Toolbox log connectors. ATX log connectors are\r\n * controllers that apply specific processing to logs (e.g sending logs to a data base...).\r\n */\r\nexport interface LogConnector extends Destroyable {\r\n\r\n /**\r\n * Initializes the controller.\r\n * \r\n * @param logList The initial log list.\r\n */\r\n init(logList: Log[]): void;\r\n\r\n /**\r\n * Sends the specified log to the controller for processing.\r\n * \r\n * @param log The log to be sent for processing.\r\n */\r\n sendLog(log: Log): void;\r\n\r\n /**\r\n * Removes all logs from the controller.\r\n */\r\n clearLogs(): void;\r\n\r\n /**\r\n * Creates a copy of all logs in the controller.\r\n * The copying process depends on the controller implementation.\r\n */\r\n copyLogs(): void;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { LogLevel } from \"./log-level.enum\";\r\n\r\n/**\r\n * Represents a log in the Angular Toolbox framework.\r\n */\r\nexport interface Log {\r\n\r\n /**\r\n * Provides a human readable reference for the invoker associated with this log.\r\n */\r\n readonly caller: string;\r\n\r\n /**\r\n * The message associated with this log.\r\n */\r\n readonly message: string;\r\n\r\n /**\r\n * The criticality level of this log.\r\n */\r\n readonly level: LogLevel;\r\n\r\n /**\r\n * The timestamp at which the log has been created.\r\n */\r\n readonly timestamp: number;\r\n\r\n /**\r\n * Optional metada associated with this log.\r\n * Metadata are typically set by Developer to provide custom objects representations.\r\n */\r\n readonly metadata?: any;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Destroyable } from \"../lang\";\r\nimport { LogConnector } from \"./log-connector\";\r\n\r\n/**\r\n * Transactional loggers allow to create proxy via the `LogConnector` interface\r\n * to send logs to third-party tools.\r\n */\r\nexport interface TransactionalLogger extends Destroyable {\r\n\r\n /**\r\n * Sets a new log connector this transactional logger.\r\n * \r\n * @param value The reference to the new log connector associated with this transactional logger.\r\n * If `null` the logger uses the instance defined by the `DEFAULT_LOG_CONNECTOR` constant.\r\n */\r\n setLogConnector(value: LogConnector | null): void;\r\n \r\n /**\r\n * Returns the reference to the log connector associated with this transactional logger.\r\n * \r\n * @returns The log connector associated with this transactional logger.\r\n */\r\n getLogConnector(): LogConnector;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the level of an Angular Toolbox log.\r\n */\r\nexport enum LogLevel {\r\n\r\n /**\r\n * Indicates that the log is a basic information message.\r\n */\r\n INFO = 0,\r\n \r\n /**\r\n * Indicates that the log represents a config message.\r\n */\r\n CONFIG = 1,\r\n\r\n /**\r\n * Indicates that the log is a warning message.\r\n */\r\n WARNING = 2,\r\n\r\n /**\r\n * Indicates that the log message represents an error.\r\n */\r\n ERROR = 3,\r\n \r\n /**\r\n * A special level used by loggers to prevent logs to be processed.\r\n */\r\n OFF = 4\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { LogConnector } from \"./log-connector\";\r\n\r\n/**\r\n * Defines properties for the `LoggerService` configuration.\r\n */\r\nexport interface LoggerConfig {\r\n\r\n /**\r\n * Defines the log connector of the `LoggerService` singleton.\r\n */\r\n logConnector?: LogConnector;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { LoggerConfig } from \"./logger-config\";\r\n\r\n/**\r\n * The default provider for the `LoggerService` configuration. You typically define\r\n * the custom properties in the main NgModule declaration to initialize the logger:\r\n * \r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: ATX_LOGGER_CONFIG, useValue: { dataConnector: new ConsoleLogConnector() } }\r\n * ],\r\n * ...\r\n * });\r\n */\r\nexport const ATX_LOGGER_CONFIG: LoggerConfig = {}\r\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in \n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Injectable } from '@angular/core';\nimport { AbstractSubscriptionManager } from '../../../core';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that helps to manage unregistration issues of Angular subscriptions.\n */\nexport class SubscriptionService extends AbstractSubscriptionManager {\n\n /**\n * @private\n */\n constructor() {\n super();\n }\n}\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Inject, Injectable, EventEmitter } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { CSS_PROP, DARK_MODE_CONFIG, DarkModeConfig, STORAGE_KEY } from '../../business';\n\n// --> Internal constants\n/**\n * @private\n */\nconst ADD_ACTION: string = \"add\";\n\n/**\n * @private\n */\nconst REMOVE_ACTION: string = \"remove\";\n\n/**\n * @private\n */\nconst TRUE: string = \"true\";\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that provides Dark Mode implementation for your Angular application.\n */\nexport class DarkModeService {\n \n /**\n * @private\n */\n private _darkModeEnabled: boolean = false;\n\n /**\n * @private\n */\n private _cssProperty: string = CSS_PROP;\n\n /**\n * @private\n */\n private _storageKey: string = STORAGE_KEY;\n\n /**\n * The callback function that is triggered when the dark mode changes.\n * \n * @typeParam `EventEmitter<boolean>` the value returned by the `darkModeEnabled()` property.\n */\n public readonly change: EventEmitter<boolean> = new EventEmitter<boolean>(true);\n\n /**\n * @private\n * Creates a new `DarkModeService` instance.\n * \n * @param _document The reference to the `Document` singleton.\n * @param config The reference to the `DarkModeConfig` provider.\n */\n constructor(@Inject(DOCUMENT) private _document: Document, @Inject(DARK_MODE_CONFIG) config: DarkModeConfig) {\n this.initDarkMode(config);\n }\n\n /**\n * Toogles the dark mode state.\n */\n public toggleDarkMode(): void {\n this._darkModeEnabled ? this.disableDarkMode() : this.enableDarkMode();\n }\n\n /**\n * Sets the dark mode state to active.\n */\n public enableDarkMode(): void {\n this.setDarkMode(ADD_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Sets the dark mode state to inactive.\n */\n public disableDarkMode(): void {\n this.setDarkMode(REMOVE_ACTION);\n this.setStoredDarkMode();\n }\n\n /**\n * Returns a `boolean` value that indicates whether the dark mode state is active (`true`), or not (`false`).\n * \n * @returns `true` whether the dark mode state is active; `false` otherwise.\n */\n public darkModeEnabled(): boolean {\n return this._darkModeEnabled;\n }\n\n /**\n * Returns the value of the CSS property as defined by the config provider.\n * \n * @returns The value of the CSS property.\n */\n public getCssProperty(): string {\n return this._cssProperty;\n }\n\n /**\n * Returns the value of the storage key as defined by the config provider.\n * \n * @returns The value of the storage key.\n */\n public getStorageKey(): string {\n return this._storageKey;\n }\n \n /**\n * Removes the dark mode information from local storage.\n */\n public invalidateStorage(): void {\n localStorage.removeItem(this._storageKey);\n }\n \n /**\n * @private\n */\n private initDarkMode(config: DarkModeConfig): void {\n this._darkModeEnabled = config.darkModeEnabled || false;\n this._cssProperty = config.cssProperty || CSS_PROP;\n this._storageKey = config.storageKey || STORAGE_KEY;\n if (this._darkModeEnabled) {\n this.enableDarkMode();\n } else {\n this.initStoredDarkMode();\n }\n if (config.detectBrowserSettings) this.initBrowserMode();\n }\n\n /**\n * @private\n */\n private initStoredDarkMode(): void {\n const result: string | null = localStorage.getItem(this._storageKey);\n if (result === TRUE) this.enableDarkMode();\n }\n \n /**\n * @private\n */\n private setStoredDarkMode(): void {\n const data: string = String(this._darkModeEnabled);\n localStorage.setItem(this._storageKey, data);\n }\n \n /**\n * @private\n */\n private setDarkMode(action: string): void {\n const classList: DOMTokenList = this._document.body.classList;\n if (action === ADD_ACTION) {\n classList.add(this._cssProperty);\n this._darkModeEnabled = true;\n } else if (action === REMOVE_ACTION) {\n classList.remove(this._cssProperty);\n this._darkModeEnabled = false;\n }\n this.change.emit(this._darkModeEnabled);\n }\n \n /**\n * @private\n */\n private initBrowserMode(): void {\n if (this.matchDarkTheme()) return this.enableDarkMode();\n this.disableDarkMode();\n }\n \n /**\n * @private\n */\n private matchDarkTheme(): boolean {\n return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n}\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport { EventEmitter, Inject, Injectable } from '@angular/core';\nimport { ScrollBehavior } from '../../business';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * A lightweight service that provides scrolling capabilities to your Angular application.\n */\nexport class ScrollService {\n\n /**\n * The callback function that is triggered when a scroll operation is performed.\n * \n * @typeParam `EventEmitter<Event>` The reference to the original scroll event.\n */\n public readonly onScroll: EventEmitter<Event> = new EventEmitter<Event>();\n\n /**\n * @private\n * Creates a new `ScrollService` instance.\n * \n * @param _document The reference to the `Document` singleton.\n */\n constructor(@Inject(DOCUMENT) private _document: Document) {\n window.addEventListener(\"scroll\", (e: Event) => {\n this.onScroll.next(e);\n });\n }\n\n /**\n * Scrolls the ancestor containers of the element with the specified selector such that \n * this element is visible to the user.\n * \n * @param selector The selector of the target element.\n * @param arg A `boolean` value:\n * If `true`, the top of the element will be aligned to the top of the visible area of the\n * scrollable ancestor.\n * If `false`, the bottom of the element will be aligned to the bottom of the visible area\n * of the scrollable ancestor. \n * @param arg A dictionary containing the scroll parameters.\n */\n public scrollIntoView(selector: string, arg?: boolean | ScrollIntoViewOptions | undefined): void {\n const elm: Element | null = this._document.querySelector(selector);\n if (elm) elm.scrollIntoView(arg);\n }\n\n /**\n * Scrolls the app viewport to the top of the browser window.\n * \n * @param behavior Specifies whether the scrolling should animate smoothly (`smooth`),\n * happen instantly in a single jump (`instant`), or let the browser\n * choose (`auto`, `default`).\n */\n public gotoTop(behavior: ScrollBehavior = 'smooth'): void {\n const options: ScrollToOptions = {\n top: 0,\n behavior: behavior as any\n };\n this.scroll(options);\n }\n\n /**\n * Scrolls the app viewport according to the specified options, into the browser window.\n * \n * @param options A dictionary containing the scroll parameters.\n */\n public scroll(options?: ScrollToOptions): void {\n window.scroll(options);\n }\n \n /**\n * Scrolls the app viewport by the specified `x/y` coordinates, into the browser window.\n * \n * @param x The horizontal pixel value that you want to scroll by.\n * @param y The vertical pixel value that you want to scroll by.\n */\n public scrollBy(x: number, y: number): void {\n window.scrollBy(x, y);\n }\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * An internal convenient object that defined default `ScrollIntoViewOptions` objects.\r\n */\r\nexport const DEFAULT_SCROLL_BEHAVIOR: ScrollIntoViewOptions = { behavior: \"smooth\", block: \"start\", inline: \"nearest\" };\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AppBridgeCommand } from \"../../model/business/lang/app-bridge-command\";\r\nimport { AppBridgeError } from \"../error\";\r\n\r\n/**\r\n * @private\r\n * The `AppBridge` class is an internal invoker utility that executes commans declared\r\n * by the `AppBridgeService` instance.\r\n */\r\nexport class AppBridge {\r\n \r\n /**\r\n * @private\r\n * Stores all commands registered by the `AppBridgeService` instance.\r\n */\r\n private readonly _commandMap: Map<string, AppBridgeCommand> = new Map<string, AppBridgeCommand>();\r\n\r\n /**\r\n * Executes the command with the specified `name` parameter.\r\n * \r\n * @param name The reference to the command to execute.\r\n * @param args The list of parmeters so be sent to the command.\r\n */\r\n public execute(name: string, ...args: any[]): void {\r\n const command: Function | undefined = this._commandMap.get(name);\r\n if (command) command.apply(null, args);\r\n else throw new AppBridgeError(`Invalid AppBridge command: method width name '${name}' does not exist.`);\r\n }\r\n \r\n /**\r\n * Registers a command.\r\n * \r\n * @param name The name of the command to register.\r\n * @param command The command to register.\r\n */\r\n public addCommand(name: string, command: AppBridgeCommand): void {\r\n this._commandMap.set(name, command);\r\n }\r\n \r\n /**\r\n * Unregisters a command.\r\n * \r\n * @param name The name of the command to unregister.\r\n * \r\n * @returns `true` whether the command existed and has been removed; `false` otherwise.\r\n */\r\n public removeCommand(name: string): boolean {\r\n return this._commandMap.delete(name);\r\n }\r\n\r\n /**\r\n * Returns the command with the specified name.\r\n * \r\n * @param name The name of the command to retrieve.\r\n * \r\n * @returns Returns the command associated with the specified name.\r\n * If no command is associated with the specified name, `undefined` is returned.\r\n */\r\n public getCommand(name: string): AppBridgeCommand | undefined {\r\n return this._commandMap.get(name);\r\n }\r\n\r\n /**\r\n * Returns a boolean indicating whether a command with the specified name exists or not.\r\n * \r\n * @param name The name of the command to retrieve.\r\n * \r\n * @returns Returns `true` whether the command exists; `false` otherwise.\r\n */\r\n public hasCommand(name: string): boolean {\r\n return this._commandMap.has(name);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Injectable, NgZone, Inject } from '@angular/core';\r\nimport { NavigationExtras, Router } from '@angular/router';\r\nimport { DEFAULT_SCROLL_BEHAVIOR } from '../../../util/default-scroll-behavior';\r\nimport { AppBridge } from '../../../core/bridge/app-bridge';\r\nimport { AppBridgeError } from '../../../core';\r\nimport { AppBridgeCommand } from '../../business/lang/app-bridge-command';\r\n\r\n/**\r\n * @private\r\n */\r\nexport const APP_PRIDGE_REF: string = \"appBridge\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst HREF: string = \"href\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst NATIVE_COMMANDS: string = \"navigate|goToAnchor|declareCommand|deleteCommand|getCommand\";\r\n\r\n/**\r\n * A utility service that allows dynamically injected HTML fragments, to interact with the Angular application.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppBridgeService {\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _defaultView: any;\r\n\r\n /**\r\n * @private\r\n * Thereference to the command invoker.\r\n */\r\n private readonly _appBridge: AppBridge;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _router: Router,\r\n private _zone: NgZone,\r\n @Inject(DOCUMENT) private _document: any) {\r\n this._defaultView = _document.defaultView;\r\n this._appBridge = new AppBridge();\r\n if(!this._defaultView[APP_PRIDGE_REF]) this._defaultView[APP_PRIDGE_REF] = this;\r\n }\r\n\r\n /**\r\n * Provides the ability to invoke the `navigate()` method of the Angular app router.\r\n * \r\n * @param commands The commands array as specified by the Angular router `navigate()` method.\r\n * @param extras The navigation options as specified by the Angular router `navigate()` method.\r\n * @return `Promise` that resolves to `true` when navigation succeeds, or `false` when navigation fails.\r\n * \r\n * @see https://angular.dev/api/router/Router#navigate\r\n */\r\n public navigate(commands: string[], extras?: NavigationExtras | undefined): Promise<boolean> {\r\n return this._zone.run(() => {\r\n return this._router.navigate(commands, extras);\r\n });\r\n }\r\n\r\n /**\r\n * Allows to scroll to the fragment specified by the `href` attribute when the user element interact with the associated element.\r\n * \r\n * @example\r\n * <a href=\"#myAnchor\" onclick=\"appBridge.goToAnchor(event)\">My Section</a></code>\r\n * \r\n * @param event The event that triggers the anchor navigation.\r\n * @return `Promise` that resolves to `true` when navigation succeeds, or `false` when navigation fails.\r\n * \r\n * @see https://angular.dev/api/router/Router#navigate\r\n */\r\n public goToAnchor(event: Event): Promise<boolean> {\r\n event.preventDefault();\r\n const anchor: string | null = (event.target as HTMLElement).getAttribute(HREF);\r\n if (!anchor) throw new ReferenceError(\"href attribute is not defined.\");\r\n const elm: HTMLElement = this._document.querySelector(anchor);\r\n if (!elm) return new Promise((resolve: Function) => resolve(false));\r\n elm.scrollIntoView(DEFAULT_SCROLL_BEHAVIOR);\r\n return this._zone.run(() => {\r\n return this._router.navigate([], { fragment: anchor.slice(1)});\r\n });\r\n }\r\n\r\n /**\r\n * Declares a new JavaScript command to be used with dynamically loaded documents.\r\n * \r\n * @param name The name of the command to declare.\r\n * @param command The reference to a JavaScript command to be used with dynamically loaded documents.\r\n */\r\n public declareCommand(name: string, command: AppBridgeCommand): void {\r\n this.checkCommandName(name);\r\n if(!this._appBridge.hasCommand(name)) {\r\n this._appBridge.addCommand(name, command);\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n get: function() {\r\n return this._appBridge.getCommand(name);\r\n }\r\n });\r\n }\r\n }\r\n \r\n /**\r\n * Unregisters a JavaScript command previously referenced with the `declareCommand()` method.\r\n * \r\n * @param name The name of the command to remove.\r\n * \r\n * @returns `true` whether the command existed and has been removed; `false` otherwise.\r\n */\r\n public deleteCommand(name: string): boolean {\r\n this.checkCommandName(name);\r\n if(!this._appBridge.removeCommand(name)) return false;\r\n delete this._defaultView[APP_PRIDGE_REF][name];\r\n return true;\r\n }\r\n \r\n /**\r\n * Returns the JavaScript command previously referenced with the `declareCommand()` method.\r\n * \r\n * @param name The name of the command to retrieve.\r\n * @returns The JavaScript command previously referenced with the specified `name` parameter.\r\n * If no command is found, returns `undefined`.\r\n */\r\n public getCommand(name: string): AppBridgeCommand | undefined { \r\n return this._appBridge.getCommand(name);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private checkCommandName(name: string): void {\r\n if (NATIVE_COMMANDS.includes(name)) throw new AppBridgeError(\"Command name cannot be the reference to a native command: \" + name);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter, Type } from \"@angular/core\";\r\nimport { Uuid } from \"../../../../util\";\r\nimport { Destroyable, WindowRef } from \"../../../business\";\r\n\r\n/**\r\n * The abstract class that must be implemented by services that provide\r\n * functionality to display Angular component within a new browser window.\r\n */\r\nexport abstract class AbstractWindowService implements Destroyable {\r\n\r\n /**\r\n * An event triggered each time a window is closed.\r\n */\r\n public readonly windowClose: EventEmitter<Uuid> = new EventEmitter();\r\n\r\n /**\r\n * @private\r\n */\r\n protected windowRefMap: Map<Uuid, WindowRef<any, any>> = new Map();\r\n\r\n /**\r\n * Returns the window reference object associated with the specified `Uuid` object.\r\n * \r\n * @param uuid The `Uuid` object associated with the window reference to get.\r\n * \r\n * @returns A `WindowRef` object, or `undefined` if the reference cannot be found.\r\n */\r\n public get(uuid: Uuid): WindowRef<any, any> | undefined {\r\n return this.windowRefMap.get(uuid);\r\n }\r\n\r\n /**\r\n * Returns all the window reference objects created by the service.\r\n * \r\n * @returns A list of `WindowRef` objects created by this service.\r\n */\r\n public getAll(): WindowRef<any, any>[] {\r\n return Array.from(this.windowRefMap.values());\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public destroy(): void {\r\n this.windowRefMap.clear();\r\n }\r\n\r\n /**\r\n * Opens a new browser window with the specified properties and attaches an instance of \r\n * the specified component into the window container.\r\n * \r\n * @param component The component to attach in the new window.\r\n * @param init The config used to initialize the window.\r\n * \r\n * @returns A `Uuid` object.\r\n */\r\n abstract open<T>(component: Type<T>, init?: any): Uuid;\r\n\r\n /**\r\n * Closes the window associated with the specified `Uuid` object.\r\n * \r\n * @param uuid The `Uuid` object associated with the window to close.\r\n * \r\n * @returns `true` whether the window exists and is closed; `false` otherwise.\r\n */\r\n abstract close(uuid: Uuid): boolean;\r\n\r\n /**\r\n * Closes all opened windows.\r\n */\r\n abstract closeAll(): void;\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { WindowInit } from \"../../model\";\r\nimport { EMPTY_STRING } from \"../empty-string.const\";\r\n\r\n/**\r\n * A static builder that creates the features associated with a popup window created by\r\n * the `WindowService.open()` method.\r\n */\r\nexport class BrowserWindowFeaturesBuilder {\r\n\r\n /**\r\n * Builds a string that represents the features parameter of the `Window.open()` method.\r\n * \r\n * @param init A `WindowInit` object that contains data to initialize the features string.\r\n * \r\n * @returns A string that represents the features parameter of the `Window.open()` method.\r\n */\r\n public static build(init?: WindowInit): string {\r\n if (!init) return \"popup=true,left=100,top=100,width=800,height=450\";\r\n let features: string = \"popup=true\";\r\n if (init.center) BrowserWindowFeaturesBuilder.setCenterPos(init);\r\n features += BrowserWindowFeaturesBuilder.getLeft(init);\r\n features += BrowserWindowFeaturesBuilder.getTop(init);\r\n features += BrowserWindowFeaturesBuilder.getWidth(init);\r\n features += BrowserWindowFeaturesBuilder.getHeight(init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"directories\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"titlebar\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"scrollbars\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"toolbar\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"location\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"status\", init);\r\n features += BrowserWindowFeaturesBuilder.getPopupProp(\"menubar\", init);\r\n return features;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static setCenterPos(init: WindowInit): void {\r\n const screen: Screen = window.screen;\r\n let meas: number = init.width || 800;\r\n init.left = (screen.width - meas) / 2;\r\n meas = init.height || 450;\r\n init.top = (screen.height - meas) / 2;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getLeft(init?: WindowInit): string {\r\n const v: number | undefined = init?.left;\r\n return \",left=\" + (v || 100);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getTop(init?: WindowInit): string {\r\n const v: number | undefined = init?.top;\r\n return \",top=\" + (v || 100);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getWidth(init?: WindowInit): string {\r\n const v: number | undefined = init?.width;\r\n return \",width=\" + (v || 800);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getHeight(init?: WindowInit): string {\r\n const v: number | undefined = init?.height;\r\n return \",height=\" + (v || 450);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public static getPopupProp(property: string, init?: WindowInit): string {\r\n if (!init) return EMPTY_STRING;\r\n const v: any = (init as any)[property as any];\r\n if (!v) return EMPTY_STRING;\r\n return `,${property}=${v}`;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { WindowInit } from \"../../model\";\r\n\r\n/**\r\n * A static utility class that creates header tags for windows created by the `WindowService.open()` method.\r\n */\r\nexport class WindowHeaderTagUtil {\r\n\r\n /**\r\n * Sets the title of the specified window if defined in the `WindowInit` config object.\r\n * \r\n * @param win The window for which to set the title.\r\n * @param init The `WindowInit` config object used to initialize the window.\r\n */\r\n public static setTitle(win: Window, init?: WindowInit): void {\r\n const title: string | undefined = init?.title;\r\n if (!title) return;\r\n win.document.title = title;\r\n }\r\n\r\n /**\r\n * Sets the icon of the specified window if defined in the `WindowInit` config object.\r\n * \r\n * @param win The window for which to set the icon.\r\n * @param init The `WindowInit` config object used to initialize the window.\r\n */\r\n public static setIcon(win: Window, init?: WindowInit): void {\r\n const icon: string | undefined = init?.icon;\r\n if (!icon) return;\r\n const doc: Document = win.document;\r\n const head: HTMLHeadElement = doc.getElementsByTagName('head')[0];\r\n const link: HTMLLinkElement = doc.createElement('link');\r\n link.rel = 'shortcut icon';\r\n link.href = icon;\r\n head.appendChild(link);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ApplicationRef, ComponentRef, Injectable, OnDestroy, Type } from \"@angular/core\";\r\nimport { EMPTY_STRING, Uuid } from \"../../../../util\";\r\nimport { WindowInit, WindowRef } from \"../../../business\";\r\nimport { WindowTarget } from \"../../../business/ui/window/window-target\";\r\nimport { BrowserWindowFeaturesBuilder } from \"../../../../util/window/window-features-builder\";\r\nimport { WindowHeaderTagUtil } from \"../../../../util/window/window-header-tag-util\";\r\nimport { AbstractWindowService } from \"./abstract-window.service\";\r\n\r\n/**\r\n * @private\r\n */\r\ntype EvtListener = (this: Window, ev: BeforeUnloadEvent) => any;\r\n\r\n/**\r\n * @private\r\n */\r\nconst EVT_TYPE: string = \"beforeunload\";\r\n\r\n/**\r\n * Provides functionality to display Angular component within a new browser window.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WindowService extends AbstractWindowService implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _appRef: ApplicationRef) {\r\n super();\r\n const beforeUnloadHandler: EvtListener = ()=> {\r\n this.ngOnDestroy();\r\n window.removeEventListener(EVT_TYPE, beforeUnloadHandler);\r\n };\r\n window.addEventListener(EVT_TYPE, beforeUnloadHandler);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public open<T>(component: Type<T>, init?: WindowInit): Uuid {\r\n const id: Uuid = Uuid.build();\r\n const features: string = BrowserWindowFeaturesBuilder.build(init);\r\n const win: WindowProxy = window.open(EMPTY_STRING, this.getTarget(init), features) as WindowProxy;\r\n WindowHeaderTagUtil.setTitle(win, init);\r\n WindowHeaderTagUtil.setIcon(win, init);\r\n const componentRef: ComponentRef<T> = this._appRef.bootstrap(component, win.document.body);\r\n const winRef: WindowRef<T, Window> = {\r\n window: win as Window,\r\n componentRef: componentRef\r\n };\r\n const unloadListener: EvtListener = ()=> {\r\n this.windowClose.emit(id);\r\n win.removeEventListener(EVT_TYPE, unloadListener);\r\n };\r\n win.addEventListener(EVT_TYPE, unloadListener);\r\n this.windowRefMap.set(id, winRef);\r\n return id;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public close(uuid: Uuid): boolean {\r\n const winRef: WindowRef<any, Window> | undefined = this.windowRefMap.get(uuid);\r\n if (!winRef) return false;\r\n this.windowRefMap.delete(uuid);\r\n winRef.window.close();\r\n winRef.window = null as any;\r\n winRef.componentRef.destroy();\r\n winRef.componentRef as any;\r\n return true;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public closeAll(): void {\r\n const keys: IterableIterator<Uuid> = this.windowRefMap.keys();\r\n for (const key of keys) this.close(key);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.closeAll();\r\n this.destroy();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getTarget(init?: WindowInit): WindowTarget {\r\n if (init) return init.target || WindowTarget.BLANK;\r\n return WindowTarget.BLANK;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { VERSION_CONFIG, VersionConfig, VersionManager } from '../../business';\r\nimport { AbstractVersionManager } from '../../../core';\r\n\r\n/**\r\n * A lightweight service that provides Semantic Versioning implementation for your Angular projects.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class VersionService extends AbstractVersionManager implements VersionManager {\r\n\r\n /**\r\n * Creates a new VersionService instance.\r\n * @param config the reference to the VersionConfig provider.\r\n */\r\n constructor(@Inject(VERSION_CONFIG) config: VersionConfig) {\r\n super(config);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * Provides the list of HTTP verbs.\r\n */\r\nexport enum HTTPMethodRef {\r\n\r\n /**\r\n * @private\r\n * A reference to the `connect` route associated with the `CONNECT` HTTP verb.\r\n */\r\n CONNECT = 'connect',\r\n \r\n /**\r\n * @private\r\n * A reference to the `delete` route associated with the `DELETE` HTTP verb.\r\n */\r\n DELETE = 'delete',\r\n \r\n /**\r\n * @private\r\n * A reference to the `get` route associated with the `GET` HTTP verb.\r\n */\r\n GET = 'get',\r\n \r\n /**\r\n * @private\r\n * A reference to the `head` route associated with the `HEAD` HTTP verb.\r\n */\r\n HEAD = 'head',\r\n \r\n /**\r\n * @private\r\n * A reference to the `options` route associated with the `OPTIONS` HTTP verb.\r\n */\r\n OPTIONS = 'options',\r\n \r\n /**\r\n * @private\r\n * A reference to the `patch` route associated with the `PATCH` HTTP verb.\r\n */\r\n PATCH = 'patch',\r\n \r\n /**\r\n * @private\r\n * A reference to the `post` route associated with the `POST` HTTP verb.\r\n */\r\n POST = 'post',\r\n \r\n /**\r\n * @private\r\n * A reference to the `put` route associated with the `PUT` HTTP verb.\r\n */\r\n PUT = 'put',\r\n \r\n /**\r\n * @private\r\n * A reference to the `trace` route associated with the `TRACE` HTTP verb.\r\n */\r\n TRACE = 'trace'\r\n }","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { TokenType } from \"./model/token-type\";\r\n\r\n/**\r\n * @private\r\n * The reference to the default delimiter.\r\n * Value is `\"/\"`.\r\n */\r\nexport const DEFAULT_DELIMITER: string = \"/\";\r\n\r\n/**\r\n * @private\r\n * The reference to the case insensitive flag.\r\n * Value is `\"i\"`.\r\n */\r\nexport const I_FLAG: string = \"i\";\r\n\r\n/**\r\n * @private\r\n * The reference to the global flag.\r\n * Value is `\"g\"`.\r\n */\r\nexport const G_FLAG: string = \"g\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `{` `TokenType`.\r\n */\r\nexport const LEFT_CURLY_BRACE: TokenType = \"{\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `}` `TokenType`.\r\n */\r\nexport const RIGHT_CURLY_BRACE: TokenType = \"}\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `*` `TokenType`.\r\n */\r\nexport const ASTERISK: TokenType = \"*\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `+` `TokenType`.\r\n */\r\nexport const PLUS: TokenType = \"+\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `?` `TokenType`.\r\n */\r\nexport const QUESTION_MARK: TokenType = \"?\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `NAME` `TokenType`.\r\n */\r\nexport const NAME: TokenType = \"NAME\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `PATTERN` `TokenType`.\r\n */\r\nexport const PATTERN: TokenType = \"PATTERN\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `CHAR` `TokenType`.\r\n */\r\nexport const CHAR: TokenType = \"CHAR\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `ESCAPED` `TokenType`.\r\n */\r\nexport const ESCAPED: TokenType = \"ESCAPED\";\r\n\r\n/**\r\n * @private\r\n * The reference to the `END` `TokenType`.\r\n */\r\nexport const END: TokenType = \"END\";\r\n\r\n/**\r\n * @private\r\n * The reference to the semi colon (`;`) character.\r\n */\r\nexport const SEMI_COLON: TokenType = \";\";\r\n\r\n/**\r\n * @private\r\n * The reference to the colon (`:`) character.\r\n */\r\nexport const COLON: string = \":\";\r\n\r\n/**\r\n * @private\r\n * The reference to the left parenthesis (`(`) character.\r\n */\r\nexport const LEFT_PARENTHESIS: string = \"(\";\r\n\r\n/**\r\n * @private\r\n * The reference to the right parenthesis (`)`) character.\r\n */\r\nexport const RIGHT_PARENTHESIS: string = \")\";\r\n\r\n/**\r\n * @private\r\n * The reference to the escaped back slash (`\\\\`) character.\r\n */\r\nexport const ESC_BACK_SLASH: string = \"\\\\\";\r\n\r\n/**\r\n * @private\r\n * The reference to the carret (`^`) character.\r\n */\r\nexport const CARRET: string = \"^\";\r\n\r\n/**\r\n * @private\r\n * The reference to the carret (`$`) character.\r\n */\r\nexport const DOLLAR: string = \"$\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { Encode } from \"./model/encode\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst ESCAPE_REGEXP: RegExp = /([.+*?=^!:${}()[\\]|/\\\\])/g;\r\n\r\n/**\r\n * @private\r\n */\r\nconst ESCAPE_VALUE: string = \"\\\\$1\";\r\n\r\n/**\r\n * @private\r\n * Escape a regular expression string.\r\n * \r\n * @param str The regular expression string to escape.\r\n * @returns An escaped a regular expression string.\r\n */\r\nexport const escapeRegexpString: Encode = (str: string)=> {\r\n return str.replace(ESCAPE_REGEXP, ESCAPE_VALUE);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { I_FLAG } from \"./constants\";\r\n\r\n/**\r\n * @private\r\n * Get the flags for a regexp from the spcified options.\r\n * \r\n * @param options The options used to determine the flags for a regexp.\r\n * @returns The flags for a regexp depending on the spcified options.\r\n */\r\nexport const getFlags: (options: { sensitive?: boolean })=> string = (options: { sensitive?: boolean }): string=> {\r\n return options.sensitive ? EMPTY_STRING : I_FLAG;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { ASTERISK, PLUS, QUESTION_MARK } from \"./constants\";\r\nimport { DecodeKeyToString } from \"./model/decode-key-to-string\";\r\nimport { Encode } from \"./model/encode\";\r\nimport { escapeRegexpString } from \"./escape-to-regexp-string\";\r\nimport { Key } from \"./model/key\";\r\n\r\n/**\r\n * @private\r\n * Returns a function that converts a token into a regexp string.\r\n */\r\nexport const toKeyRegexp: (stringify: Encode, delimiter: string)=> DecodeKeyToString = (stringify: Encode, delimiter: string): DecodeKeyToString => {\r\n const segmentPattern: string = `[^${escapeRegexpString(delimiter)}]+?`;\r\n return (key: Key): string => {\r\n const prefix: string = key.prefix ? stringify(key.prefix) : EMPTY_STRING;\r\n const suffix: string = key.suffix ? stringify(key.suffix) : EMPTY_STRING;\r\n const modifier = key.modifier || EMPTY_STRING;\r\n if (key.name) {\r\n const pattern: string = key.pattern || segmentPattern;\r\n if (key.modifier === PLUS || key.modifier === ASTERISK) {\r\n const mod: string = key.modifier === ASTERISK ? QUESTION_MARK : EMPTY_STRING;\r\n const split: string = key.separator ? stringify(key.separator) : EMPTY_STRING;\r\n return `(?:${prefix}((?:${pattern})(?:${split}(?:${pattern}))*)${suffix})${mod}`;\r\n }\r\n return `(?:${prefix}(${pattern})${suffix})${modifier}`;\r\n }\r\n return `(?:${prefix}${suffix})${modifier}`;\r\n };\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { escapeRegexpString } from \"./escape-to-regexp-string\";\r\nimport { LooseReplacerProvider } from \"./model/loose-replacer-provider\";\r\n\r\n/**\r\n * @private\r\n * Escape and repeat loose characters for regular expressions.\r\n * \r\n * @param value The string expression to escape.\r\n * @param loose \r\n * @returns The escaped string transfromed from the original string expression.\r\n */\r\nexport const looseReplacer: LooseReplacerProvider = (value: string, loose: string): string => {\r\n return loose ? `${escapeRegexpString(value)}+` : escapeRegexpString(value);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { G_FLAG } from \"./constants\";\r\nimport { escapeRegexpString } from \"./escape-to-regexp-string\";\r\nimport { looseReplacer } from \"./loose-replacer\";\r\nimport { Encode } from \"./model/encode\";\r\nimport { NonDelimiterEncoderProvider } from \"./model/non-delimiter-encoder-provider\";\r\n\r\n/**\r\n * @private\r\n * Encode all non-delimiter characters using the encode function.\r\n */\r\nexport const toStringify: NonDelimiterEncoderProvider = (loose: boolean, delimiter: string): Encode => {\r\n if (!loose) return escapeRegexpString;\r\n const re: RegExp = new RegExp(`[^${escapeRegexpString(delimiter)}]+|(.)`, G_FLAG);\r\n return (value: string) => value.replace(re, looseReplacer);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING, STRING } from \"../../../../util\";\r\nimport { CARRET, DOLLAR } from \"./constants\";\r\nimport { Encode } from \"./model/encode\";\r\nimport { escapeRegexpString } from \"./escape-to-regexp-string\";\r\nimport { Key } from \"./model/key\";\r\nimport { getFlags } from \"./get-flags\";\r\nimport { PathToRegexpOptions } from \"./model/path-to-regexp-options\";\r\nimport { TokenData } from \"./token-data\";\r\nimport { DecodeKeyToString } from \"./model/decode-key-to-string\";\r\nimport { toKeyRegexp } from \"./to-key-regexp\";\r\nimport { toStringify } from \"./to-stringify\";\r\nimport { TokenDataRegExpFactory } from \"./model/token-data-regexp-factory\";\r\n\r\n/**\r\n * @Private\r\n * Expose a function for taking tokens and returning a RegExp.\r\n */\r\nexport const tokenDataToRegexp: TokenDataRegExpFactory = (data: TokenData, keys: Key[], options: PathToRegexpOptions): RegExp => {\r\n const {\r\n trailing = true,\r\n start = true,\r\n end = true,\r\n loose = true,\r\n } = options;\r\n const stringify: Encode = toStringify(loose, data.delimiter);\r\n const keyToRegexp: DecodeKeyToString = toKeyRegexp(stringify, data.delimiter);\r\n let pattern: string = start ? CARRET : EMPTY_STRING;\r\n \r\n for (const token of data.tokens as any) {\r\n if (typeof token === STRING) {\r\n pattern += stringify(token);\r\n } else {\r\n if (token.name) keys.push(token);\r\n pattern += keyToRegexp(token);\r\n }\r\n }\r\n\r\n if (trailing) pattern += `(?:${stringify(data.delimiter)})?`;\r\n pattern += end ? DOLLAR : `(?=${escapeRegexpString(data.delimiter)}|$)`;\r\n\r\n // URLs in general are case-sensitive (with the exception of machine names).\r\n // See https://www.w3.org/TR/WD-html40-970708/htmlweb.html\r\n // Note that default modifier is \"i\".\r\n return new RegExp(pattern, getFlags(options));\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { Token } from \"./model/token\";\r\n\r\n/**\r\n * @private\r\n * Tokenized path instance.\r\n */\r\nexport class TokenData {\r\n\r\n /**\r\n * @private\r\n * Creates a new `TokenData` instance.\r\n * \r\n * @param tokens A list of `Token` objects.\r\n * @param delimiter the string delimiter for this `TokenData` instance.\r\n */\r\n constructor(public readonly tokens: Token[],\r\n public readonly delimiter: string) {}\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { ASTERISK, CHAR, ESCAPED, PLUS, QUESTION_MARK } from \"./constants\";\r\nimport { LexToken } from \"./model/lex-token\";\r\n\r\n/**\r\n * @private\r\n */\r\nexport class Iter {\r\n\r\n /**\r\n * @private\r\n */\r\n private _index: number = 0;\r\n\r\n /**\r\n * @private \r\n */\r\n constructor(private _tokens: LexToken[]) {}\r\n\r\n /**\r\n * @private\r\n */\r\n public tryConsume(type: LexToken[\"type\"]): string | undefined {\r\n const token: LexToken = this.peek();\r\n if (token.type !== type) return;\r\n this._index++;\r\n return token.value;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public consume(type: LexToken[\"type\"]): string {\r\n const value: string | undefined = this.tryConsume(type);\r\n if (value !== undefined) return value;\r\n const { type: nextType, index } = this.peek();\r\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: https://git.new/pathToRegexpError`);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public text(): string {\r\n let result = EMPTY_STRING;\r\n let value: string | undefined;\r\n while ((value = this.tryConsume(CHAR) || this.tryConsume(ESCAPED))) {\r\n result += value;\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public modifier(): string {\r\n return this.tryConsume(QUESTION_MARK) || this.tryConsume(ASTERISK) || this.tryConsume(PLUS) || EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public peek(): LexToken {\r\n return this._tokens[this._index];\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { TokenType } from \"./token-type\";\r\n\r\n/**\r\n * @private\r\n * A markup interface for token types consumed by `Lexer` objects.\r\n */\r\nexport const SIMPLE_TOKENS: Record<string, TokenType> = {\r\n \"!\": \"!\",\r\n \"@\": \"@\",\r\n \";\": \";\",\r\n \"*\": \"*\",\r\n \"+\": \"+\",\r\n \"?\": \"?\",\r\n \"{\": \"{\",\r\n \"}\": \"}\",\r\n};\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { ESC_BACK_SLASH, CHAR, COLON, END, ESCAPED, LEFT_PARENTHESIS, NAME, PATTERN, QUESTION_MARK, RIGHT_PARENTHESIS } from \"./constants\";\r\nimport { Iter } from \"./iter\";\r\nimport { LexToken } from \"./model/lex-token\";\r\nimport { Lexer } from \"./model/lexer-type\";\r\nimport { SIMPLE_TOKENS } from \"./model/simple-tokens\";\r\nimport { TokenType } from \"./model/token-type\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst ID_CHAR: RegExp = /^\\p{XID_Continue}$/u;\r\n\r\n/**\r\n * @private\r\n * A lexer method that tokenizes input string.\r\n * \r\n * @param str The string expression to analyse.\r\n * @returns A new `Iter`object instance built from the specified input string.\r\n */\r\nexport const lexer: Lexer = (str: string): Iter => {\r\n const chars: string[] = [...str];\r\n const tokens: LexToken[] = [];\r\n let i: number = 0;\r\n\r\n while (i < chars.length) {\r\n const value: string = chars[i];\r\n const type: TokenType = SIMPLE_TOKENS[value];\r\n\r\n if (type) {\r\n tokens.push({ type, index: i++, value });\r\n continue;\r\n }\r\n\r\n if (value === ESC_BACK_SLASH) {\r\n tokens.push({ type: ESCAPED, index: i++, value: chars[i++] });\r\n continue;\r\n }\r\n\r\n if (value === COLON) {\r\n let name: string = EMPTY_STRING;\r\n\r\n while (ID_CHAR.test(chars[++i])) {\r\n name += chars[i];\r\n }\r\n\r\n if (!name) {\r\n throw new TypeError(`Missing parameter name at ${i}`);\r\n }\r\n\r\n tokens.push({ type: NAME, index: i, value: name });\r\n continue;\r\n }\r\n\r\n if (value === LEFT_PARENTHESIS) {\r\n const pos: number = i++;\r\n let count: number = 1;\r\n let pattern: string = EMPTY_STRING;\r\n\r\n if (chars[i] === QUESTION_MARK) {\r\n throw new TypeError(`Pattern cannot start with \"?\" at ${i}`);\r\n }\r\n\r\n while (i < chars.length) {\r\n if (chars[i] === ESC_BACK_SLASH) {\r\n pattern += chars[i++] + chars[i++];\r\n continue;\r\n }\r\n\r\n if (chars[i] === RIGHT_PARENTHESIS) {\r\n count--;\r\n if (count === 0) {\r\n i++;\r\n break;\r\n }\r\n } else if (chars[i] === LEFT_PARENTHESIS) {\r\n count++;\r\n if (chars[i + 1] !== QUESTION_MARK) {\r\n throw new TypeError(`Capturing groups are not allowed at ${i}`);\r\n }\r\n }\r\n\r\n pattern += chars[i++];\r\n }\r\n\r\n if (count) throw new TypeError(`Unbalanced pattern at ${pos}`);\r\n if (!pattern) throw new TypeError(`Missing pattern at ${pos}`);\r\n\r\n tokens.push({ type: PATTERN, index: i, value: pattern });\r\n continue;\r\n }\r\n\r\n tokens.push({ type: CHAR, index: i, value: chars[i++] });\r\n }\r\n\r\n tokens.push({ type: END, index: i, value: EMPTY_STRING });\r\n \r\n return new Iter(tokens);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/pillarjs/path-to-regexp\r\n * - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE\r\n */\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { ASTERISK, RIGHT_CURLY_BRACE, DEFAULT_DELIMITER, END, NAME, LEFT_CURLY_BRACE, PATTERN, SEMI_COLON } from \"./constants\";\r\nimport { Iter } from \"./iter\";\r\nimport { ParseOptions } from \"./model/parse-options\";\r\nimport { Token } from \"./model/token\";\r\nimport { TokenData } from \"./token-data\";\r\nimport { lexer } from \"./lexer\";\r\nimport { Encode } from \"./model/encode\";\r\nimport { RouteStringTokenizer } from \"./model/route-string-tokenizer\";\r\nimport { LexToken } from \"./model/lex-token\";\r\n\r\n/**\r\n * @private\r\n * A NOOP `Endoder` function.\r\n * @param value The input string value.\r\n * @returns The input string value.\r\n */\r\nconst NOOP_VALUE: Encode = (value: string): string => value;\r\n\r\n/**\r\n * @private\r\n * Parse a string for the raw tokens.\r\n */\r\nexport const stringToTokenData: RouteStringTokenizer = (str: string, options: ParseOptions = {}): TokenData => {\r\n const {\r\n delimiter = DEFAULT_DELIMITER,\r\n encodePath = NOOP_VALUE,\r\n } = options;\r\n const tokens: Token[] = [];\r\n const it: Iter = lexer(str);\r\n let keyIndex: number = 0;\r\n\r\n do {\r\n const path: string = it.text();\r\n if (path) tokens.push(encodePath(path));\r\n const name: string | undefined = it.tryConsume(NAME);\r\n const pattern: string | undefined = it.tryConsume(PATTERN);\r\n if (name || pattern) {\r\n tokens.push({\r\n name: name || String(keyIndex++),\r\n pattern,\r\n });\r\n const next: LexToken = it.peek();\r\n if (next.type === ASTERISK) {\r\n throw new TypeError(\r\n `Unexpected * at ${next.index}, you probably want \\`/*\\` or \\`{/:foo}*\\`: https://git.new/pathToRegexpError`,\r\n );\r\n }\r\n continue;\r\n }\r\n const asterisk = it.tryConsume(ASTERISK);\r\n if (asterisk) {\r\n tokens.push({\r\n name: String(keyIndex++),\r\n pattern: `[^${escape(delimiter)}]*`,\r\n modifier: ASTERISK,\r\n separator: delimiter,\r\n });\r\n continue;\r\n }\r\n\r\n const open: string | undefined = it.tryConsume(LEFT_CURLY_BRACE);\r\n if (open) {\r\n const prefix: string = it.text();\r\n const name: string | undefined = it.tryConsume(NAME);\r\n const pattern: string | undefined = it.tryConsume(PATTERN);\r\n const suffix: string = it.text();\r\n const separator: string | undefined = it.tryConsume(SEMI_COLON) ? it.text() : prefix + suffix;\r\n\r\n it.consume(RIGHT_CURLY_BRACE);\r\n\r\n const modifier = it.modifier();\r\n\r\n tokens.push({\r\n name: name || (pattern ? String(keyIndex++) : EMPTY_STRING),\r\n prefix: encodePath(prefix),\r\n suffix: encodePath(suffix),\r\n pattern,\r\n modifier,\r\n separator,\r\n });\r\n continue;\r\n }\r\n\r\n it.consume(END);\r\n break;\r\n } while (true);\r\n\r\n return new TokenData(tokens, delimiter);\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Destroyable, HttpMockProductionPolicy } from \"../model\";\r\nimport { HttpMockingFrameworkConfig } from \"../model/business/mock/http/config/http-mocking-framework-config\";\r\nimport { HttpMockServiceError } from \"../core\";\r\nimport { HTTPMethodRef } from \"../framework/mock/http/util/http-method-ref.enum\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst POLICY_WARNING: string = \"HTTP Mocking Framework is running in production mode\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst POLICY_ERROR: HttpMockServiceError = new HttpMockServiceError(POLICY_WARNING + \": remove all framework references or change the 'productionPolicy' property value of the HTTP_MOCKING_FRAMEWORK_CONFIG provider.\");\r\n\r\n/**\r\n * @private\r\n */\r\nconst FLAG_ID: string = \"http-mocking-framework-flag\";\r\n\r\n/**\r\n * The object that manages the HTTP Mocking Framework options.\r\n */\r\nexport class HttpMockingFrameworkConfigManager implements Destroyable {\r\n\r\n /**\r\n * @private\r\n */\r\n private _document!: Document;\r\n \r\n /**\r\n * @private\r\n */\r\n private _config?: HttpMockingFrameworkConfig;\r\n \r\n /**\r\n * @private\r\n */\r\n private readonly _isProdMode: boolean;\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _prodPolicy: HttpMockProductionPolicy;\r\n\r\n /**\r\n * Returns the value specified by the `disableVisualFlag` of the `HttpMockingFrameworkConfig` provider,\r\n * or `false` when no provider is defined.\r\n */\r\n public get disableVisualFlag(): boolean {\r\n const cfg: HttpMockingFrameworkConfig | undefined = this._config;\r\n return cfg && cfg.disableVisualFlag ? cfg.disableVisualFlag : false;\r\n }\r\n\r\n /**\r\n * Returns the value specified by the `productionPolicy` of the `HttpMockingFrameworkConfig` provider,\r\n * or `HttpMockProductionPolicy.ERROR` when no provider is defined.\r\n */\r\n public get productionPolicy(): HttpMockProductionPolicy {\r\n return this._prodPolicy;\r\n }\r\n\r\n /**\r\n * @private\r\n * Creates and Initializes the manager with the specified config.\r\n * \r\n * @param document The reference to the `Document` object, injected by Angular.\r\n * @param isDevMode Indicates wheter Angular runs in development mode (`true`), or in production mode (`false`).\r\n * @param config The `HttpMockingFrameworkConfi` provider.\r\n */\r\n constructor(document: Document, isDevMode: boolean, config?: HttpMockingFrameworkConfig) {\r\n this._isProdMode = !isDevMode;\r\n this._document = document;\r\n this._config = config;\r\n this._prodPolicy = config && config.productionPolicy !== undefined ? config.productionPolicy : HttpMockProductionPolicy.ERROR;\r\n this.checkPolicy();\r\n this.createVisualFlag(document, config);\r\n }\r\n \r\n /**\r\n * Apply a strategy depending on the current production policy and environment.\r\n * @param route An optional parameter used when the methhod is associated to a HTTP request.\r\n * Must be the representation of the intercepted route path.\r\n * @param method An optional parameter used when the methhod is associated to a HTTP request.\r\n * Must be the representation of the intercepted HTTP method.\r\n */\r\n public checkPolicy(route?: string, method: HTTPMethodRef | undefined = undefined): void {\r\n if (!this._isProdMode) return;\r\n if (this._prodPolicy === HttpMockProductionPolicy.ERROR) throw POLICY_ERROR;\r\n if (this._prodPolicy === HttpMockProductionPolicy.SILENT) return;\r\n const routeMsg: string = route ? `: intercepted request=[path=${route}, method=${method?.toUpperCase()}]` : \".\";\r\n console.warn(POLICY_WARNING + routeMsg);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public destroy(): void {\r\n const cfg: HttpMockingFrameworkConfig | undefined = this._config;\r\n const noFlag: boolean = (cfg && cfg.disableVisualFlag) === true;\r\n this._config = null as any;\r\n if (noFlag) return;\r\n const doc: Document = this._document;\r\n const flag: HTMLElement | null = doc.getElementById(FLAG_ID);\r\n if (flag) {\r\n flag.onmouseover = flag.onmouseout =null;\r\n doc.body.removeChild(flag);\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private createVisualFlag(document: Document, config?: HttpMockingFrameworkConfig): void {\r\n if (config && config.disableVisualFlag) return;\r\n const flag: HTMLDivElement = document.createElement(\"div\");\r\n const text: Text = document.createTextNode(\"HTTP Mocking Framwork\");\r\n const style: CSSStyleDeclaration = flag.style;\r\n const body = document.body;\r\n flag.setAttribute(\"id\", FLAG_ID);\r\n style.backgroundColor = \"red\";\r\n style.color = \"white\";\r\n style.textAlign = \"center\";\r\n style.position = \"fixed\";\r\n style.width = \"100%\";\r\n style.overflow = \"hidden\";\r\n style.height = \"26px\";\r\n style.transition = \"all 0.25s ease-in-out\";\r\n style.zIndex = \"10000\";\r\n style.opacity = \"1\";\r\n style.userSelect = \"none\";\r\n flag.onmouseover = ()=> {\r\n style.height = \"26px\";\r\n style.opacity = \"1\";\r\n };\r\n flag.onmouseout = ()=> {\r\n style.height = \"6px\";\r\n style.opacity = \"0.35\";\r\n };\r\n flag.appendChild(text);\r\n body.insertBefore(flag, body.firstChild);\r\n setTimeout(()=> {\r\n style.height = \"4px\";\r\n style.opacity = \"0.35\";\r\n }, 4000);\r\n }\r\n};","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Inject, Injectable, isDevMode, OnDestroy, Optional } from '@angular/core';\r\nimport { HttpMockInterceptor, HttpMockConfig, HttpMethodMock, HttpMockEndpoint, HTTP_MOCKING_FRAMEWORK_CONFIG, HttpMockProductionPolicy } from '../../../business';\r\nimport { HTTPMethodRef } from '../../../../framework/mock/http/util/http-method-ref.enum';\r\nimport { tokenDataToRegexp } from '../../../../framework/mock/http/path-to-regexp/token-data-to-regexp';\r\nimport { RouteMockConfig } from '../../../../framework/mock/http/config/route-mock-config';\r\nimport { Key } from '../../../../framework/mock/http/path-to-regexp/model/key';\r\nimport { stringToTokenData } from '../../../../framework/mock/http/path-to-regexp/string-to-token-data';\r\nimport { DEFAULT_DELIMITER } from '../../../../framework/mock/http/path-to-regexp/constants';\r\nimport { Uuid } from '../../../../util';\r\nimport { TokenData } from '../../../../framework/mock/http/path-to-regexp/token-data';\r\nimport { HttpMockServiceError } from '../../../../core/error';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { HttpMockingFrameworkConfigManager } from '../../../../util/http-mocking-framework-config.manager';\r\nimport { HttpMockingFrameworkConfig } from '../../../business/mock/http/config/http-mocking-framework-config';\r\nimport { IdentifiableComponent } from '../../../../core';\r\n\r\n/**\r\n * @private\r\n * Reference to the original type for this class.\r\n */\r\nexport const HTTP_MOCK_SERVICE: string = \"HttpMockService\";\r\n\r\n/**\r\n * @private\r\n * An internal utility for storring references to endpoint mock configs.\r\n */\r\ninterface HttpMockEndpointStorage {\r\n methodMock: HttpMethodMock;\r\n regexp: RegExp;\r\n keys: Key[];\r\n configId: string;\r\n}\r\n\r\n/**\r\n * The `HttpMockService` class provides the API for managing HTTP mock configuration objects.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpMockService extends IdentifiableComponent implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n * Ensures that class type is still accessible after TypeScript compilation.\r\n */\r\n public readonly type: string = HTTP_MOCK_SERVICE;\r\n\r\n /**\r\n * @private\r\n * The list of IDs associated with each config object.\r\n */\r\n private _configIdList: Uuid[] = [];\r\n\r\n /**\r\n * @private\r\n * Stores the complete collection of mocking behaviors for each registered config.\r\n */\r\n private _configList: Map<string, Map<string, HttpMockEndpointStorage[]>> = new Map<string, Map<string, HttpMockEndpointStorage[]>>();\r\n\r\n /**\r\n * @private\r\n * The reference to the current app URL origin.\r\n */\r\n private readonly APP_ORIGIN: string = window.location.origin;\r\n\r\n /**\r\n * @private\r\n * The reference to the èHttpMockingFrameworkConfigManager` instance.\r\n */\r\n private readonly _configMmanager: HttpMockingFrameworkConfigManager;\r\n\r\n /**\r\n * Returns the vreference to the `HttpMockingFrameworkConfigManager` instance,\r\n * associated with this service.\r\n */\r\n public get configMmanager(): HttpMockingFrameworkConfigManager {\r\n return this._configMmanager;\r\n }\r\n\r\n /**\r\n * @private\r\n * Creates a new `HttpMockService` instance.\r\n * \r\n * @param _document The reference to the app document.\r\n * @param config The optional config provider for the HTTP Mocking Framework.\r\n */\r\n constructor(@Inject(DOCUMENT) document: Document, @Optional() @Inject(HTTP_MOCKING_FRAMEWORK_CONFIG) config: HttpMockingFrameworkConfig) {\r\n super(HTTP_MOCK_SERVICE);\r\n this._configMmanager = new HttpMockingFrameworkConfigManager(document, isDevMode(), config);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this._configMmanager.checkPolicy();\r\n this._configMmanager.destroy();\r\n }\r\n\r\n /**\r\n * Adds the specified `HttpMockConfig` object to this `HttpMockService` instance.\r\n * \r\n * @param config The `HttpMockConfig` object to add to this `HttpMockService` instance.\r\n * @Returns The `Uuid` instance associated with the added `HttpMockConfig` object.\r\n */\r\n public addConfig(config: HttpMockConfig): Uuid {\r\n const origin: string = config.origin || this.APP_ORIGIN;\r\n this._configMmanager.checkPolicy();\r\n this.checkOrigin(origin);\r\n let id: Uuid | undefined = config.id;\r\n if (!id) {\r\n id = Uuid.build();\r\n config.id = id;\r\n } else {\r\n if (this.hasRegisteredConfig(id)) throw new HttpMockServiceError(`A config object has already been registered with the id: [\"${id.toString()}\"].`) ;\r\n }\r\n this._configIdList.push(id);\r\n const uuid: string = id.toString();\r\n config.interceptors.forEach((interceptor: HttpMockInterceptor) => this.extractConfig(interceptor, origin, uuid) );\r\n return id;\r\n }\r\n\r\n /**\r\n * Returns the current app URL origin.\r\n * \r\n * @returns A string that represents the current app URL origin.\r\n */\r\n public getAppOrigin(): string {\r\n return this.APP_ORIGIN;\r\n }\r\n\r\n /**\r\n * Removes the configuration registered with the specified `uuid` from this `HttpMockService` instance.\r\n * \r\n * @param uuid The UUID of the configuration to remove.\r\n */\r\n public removeConfig(uuid: Uuid): void {\r\n this._configMmanager.checkPolicy();\r\n if (!this.hasRegisteredConfig(uuid)) return;\r\n const configId: string = uuid.toString();\r\n this._configList.forEach((value: Map<string, HttpMockEndpointStorage[]>, key: string) => {\r\n this.deleteConfigById(value, configId);\r\n if (value.size === 0) this._configList.delete(key);\r\n });\r\n this._configIdList.splice(this._configIdList.indexOf(uuid), 1);\r\n }\r\n\r\n /**\r\n * Removes all registred configurations from this `HttpMockService` instance.\r\n */\r\n public clearConfigs(): void {\r\n this._configMmanager.checkPolicy();\r\n this._configList.clear();\r\n this._configIdList.length = 0;\r\n }\r\n /**\r\n * Returns a boolean value that indicates whether a config with the specified UUID has been registered\r\n * (`true`), or not (`false`).\r\n * \r\n * @param uuid The UUID of the config to check.\r\n * @returns `true` whether a config with the specified UUID has been registered; `false` otherwise.\r\n */\r\n public hasRegisteredConfig(uuid: Uuid): boolean {\r\n return this._configIdList.indexOf(uuid) !== -1;\r\n }\r\n\r\n /**\r\n * Returns the `RouteMockConfig` object associated with the specified `URL` instance and HTTP method.\r\n * \r\n * @param url The `URL` instance for which to find a route config.\r\n * @param method The HTTP method for which to find a route config.\r\n * @returns The `RouteMockConfig` object associated with the specified `URL` instance and HTTP method whether it exists;\r\n * `undefined` otherwise.\r\n */\r\n public getRouteConfig(url: URL, method: HTTPMethodRef): RouteMockConfig | undefined {\r\n const urlConfigList: Map<string, HttpMockEndpointStorage[]> | undefined = this._configList.get(url.origin);\r\n const route: string = url.pathname;\r\n this._configMmanager.checkPolicy(route, method);\r\n let result: RouteMockConfig | undefined = undefined;\r\n if (!urlConfigList) return result;\r\n const methodList: HttpMockEndpointStorage[] | undefined = urlConfigList.get(method);\r\n if (!methodList) return result;\r\n let len: number = methodList.length - 1;\r\n while (len >= 0 ) {\r\n const methodMap: HttpMockEndpointStorage = methodList[len];\r\n const regexp: RegExp = methodMap.regexp;\r\n if (regexp.test(route)) {\r\n result = {\r\n methodConfig: methodMap.methodMock,\r\n parameters: this.buildParameters(regexp, methodMap.keys, route),\r\n searchParams: url.searchParams\r\n };\r\n break;\r\n }\r\n len--;\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private buildParameters(regexp: RegExp, keys: Key[], route: string): any {\r\n const execResult: RegExpExecArray | null = regexp.exec(route);\r\n if (!execResult) return null;\r\n const params: any = {};\r\n let len: number = execResult.length - 1;\r\n let i: number = 1;\r\n for (; i <= len; ++i) {\r\n const key: Key = keys[i - 1];\r\n params[key.name] = execResult[i];\r\n }\r\n return params;\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private extractConfig(interceptor: HttpMockInterceptor, globalOrigin: string, configId: string): void {\r\n const endpoints: HttpMockEndpoint[] = interceptor.endpoints;\r\n let origin: string | undefined = interceptor.origin;\r\n if (origin) this.checkOrigin(origin);\r\n else origin = globalOrigin;\r\n if (!this._configList.has(origin)) this._configList.set(origin, new Map<string, HttpMockEndpointStorage[]>());\r\n endpoints.forEach((endpoint: HttpMockEndpoint) => {\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.GET, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.POST, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.PUT, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.DELETE, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.HEAD, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.OPTIONS, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.PATCH, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.CONNECT, configId);\r\n this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.TRACE, configId);\r\n });\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private extractEndpointConfig(origin: string, endpoint: HttpMockEndpoint, method: HTTPMethodRef, configId: string): void {\r\n const ep: any = endpoint;\r\n if (!ep[method as any]) return;\r\n const originConfig: Map<string, HttpMockEndpointStorage[]> = this._configList.get(origin) as any;\r\n const route: string = endpoint.route;\r\n const data: TokenData = stringToTokenData(route);\r\n const keys: Key[] = [];\r\n const regexp: RegExp = tokenDataToRegexp(data, keys, {});\r\n if (!originConfig.has(method)) originConfig.set(method, []);\r\n const methodConfig: HttpMockEndpointStorage[] = originConfig.get(method) as any;\r\n methodConfig.push({\r\n regexp: regexp,\r\n keys: keys,\r\n methodMock: ep[method],\r\n configId: configId\r\n });\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private checkOrigin(origin: string): void {\r\n if (origin.endsWith(DEFAULT_DELIMITER)) throw new SyntaxError(`Origin must not end with a / character: [\"${origin}\"].`);\r\n }\r\n \r\n /**\r\n * @rivate \r\n */\r\n private deleteConfigById(storageMap: Map<string, HttpMockEndpointStorage[]>, configId: string): void {\r\n storageMap.forEach((storage: HttpMockEndpointStorage[], key: string) => {\r\n const cleanedConfig: HttpMockEndpointStorage[] = this.cleanConfig(storage, configId);\r\n if (cleanedConfig.length) storageMap.set(key, cleanedConfig);\r\n else storageMap.delete(key);\r\n });\r\n }\r\n\r\n /**\r\n * @rivate \r\n */\r\n private cleanConfig(storage: HttpMockEndpointStorage[], configId: string): HttpMockEndpointStorage[] {\r\n return storage.filter((value: HttpMockEndpointStorage)=> value.configId !== configId);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogLevel } from \"../../../model\";\r\n\r\n/**\r\n * @private\r\n * \r\n * The default implementation of the `Log` interface.\r\n */\r\nexport class LogImpl implements Log {\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly caller: string;\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly message: string;\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly level: LogLevel;\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly timestamp: number;\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public readonly metadata: any;\r\n\r\n /**\r\n * @private\r\n * Creates a new `LogImpl` instance.\r\n * \r\n * @param caller Ahuman readable reference for the invoker associated with this log.\r\n * @param message The message associated with this log.\r\n * @param level The criticality level of this log.\r\n * @param metadata Optional metada associated with this log.\r\n */\r\n constructor(caller: string, message: string, level: LogLevel, metadata?: any) {\r\n this.caller = caller;\r\n this.message = message;\r\n this.level = level;\r\n this.metadata = metadata;\r\n this.timestamp = Date.now();\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogConnector } from \"../../../model\";\r\n\r\n/**\r\n * The default ATX log connector. Allows to process logs silently.\r\n * This can be useful for removing logs from production environments, if needed.\r\n */\r\nexport class DefaultLogConnector implements LogConnector {\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public destroy(): void {}\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public init(logList: Log[]): void {}\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public sendLog(log: Log): void { }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public clearLogs(): void { }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public copyLogs(): void { }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogConnector, LogLevel } from \"../../../model\";\r\n\r\n/**\r\n * An implementation of the `LogConnector` interface that sends logs to the JavaScript\r\n * native `console` object.\r\n */\r\nexport class ConsoleLogConnector implements LogConnector {\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public destroy(): void {}\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public init(logList: Log[]): void {\r\n logList.forEach(log=> this.sendLog(log));\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public sendLog(log: Log): void {\r\n const level: LogLevel = log.level;\r\n if (level === LogLevel.INFO) return console.info(log);\r\n if (level === LogLevel.CONFIG) return console.log(log);\r\n if (level === LogLevel.ERROR) return console.error(log) ;\r\n console.warn(log);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public clearLogs(): void {\r\n console.clear();\r\n }\r\n\r\n /**\r\n * Not supported.\r\n */\r\n public copyLogs(): void {}\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogConnector, LogLevel } from \"../../../model\";\r\nimport { EMPTY_STRING } from \"../../../util\";\r\nimport { LogUtil } from \"../util\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst DIV: string = \"div\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst SPAN: string = \"span\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_INFO: string = \"atx-log\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_CONFIG: string = \"atx-config-log\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_ERROR: string = \"atx-error-log\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_WARN: string = \"atx-warn-log\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_TIME: string = \"atx-log-time\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_LEVEL: string = \"atx-log-level\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_CALLER: string = \"atx-log-caller\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_MSG: string = \"atx-log-message\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst S_LOG_METADA: string = \"atx-log-metadata\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst STYLE_ID: string = 'atx-log-container-style';\r\n\r\n/**\r\n * An implementation of the `LogConnector` interface that processes logs as HTML renderable elements.\r\n */\r\nexport class HtmlLogConnector implements LogConnector {\r\n\r\n /**\r\n * @private\r\n */\r\n private _logs: Log[] = [];\r\n \r\n /**\r\n * @private\r\n */\r\n private _tgt: HTMLElement;\r\n\r\n /**\r\n * Creates a new `HtmlLogConnector` instance.\r\n * \r\n * @param target The HTML element where the logs will be rendered.\r\n * @param injectStyle Indicates whether the ATX default HTML styles are injected into the current document (`true`), or not (`false`).\r\n */\r\n constructor(target: HTMLElement, injectStyle: boolean = true) {\r\n this._tgt = target;\r\n if (injectStyle) this.injectStyle()\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public init(logList: Log[]): void {\r\n const len: number = logList.length - 1;\r\n let i: number = 0;\r\n for (; i <= len; ++i) this.sendLog(logList[i]);\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public sendLog(log: Log): void {\r\n this._logs.push(log);\r\n this._tgt.appendChild(this.buildLog(log));\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public destroy(): void {\r\n this._tgt = null as any;\r\n this._logs.length = 0;\r\n this._logs = null as any;\r\n this.deleteStyle();\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public clearLogs(): void {\r\n this._logs.length = 0;\r\n this._tgt.innerHTML = EMPTY_STRING;\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public copyLogs(): void {\r\n const logs: string = LogUtil.logListToString(this._logs);\r\n navigator.clipboard.writeText(logs);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private buildLog(log: Log): HTMLElement {\r\n const d: HTMLElement = document.createElement(DIV);\r\n d.classList.add(this.getCssClassName(log.level));\r\n d.appendChild(\r\n this.getSpan(`[${LogUtil.dateToHHMMSS(log.timestamp)}]`, S_LOG_TIME)\r\n );\r\n d.appendChild(\r\n this.getSpan(`[${LogUtil.getLevelString(log.level)}]`, S_LOG_LEVEL)\r\n );\r\n d.appendChild(\r\n this.getSpan(`[${log.caller}]`, S_LOG_CALLER)\r\n );\r\n d.appendChild(\r\n this.getSpan(`[${log.message}]`, S_LOG_MSG)\r\n );\r\n d.appendChild(\r\n this.getSpan(LogUtil.metadataToString(log.metadata), S_LOG_METADA)\r\n );\r\n return d;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getCssClassName(level: LogLevel) : string {\r\n if (level === LogLevel.INFO) return S_LOG_INFO;\r\n if (level === LogLevel.CONFIG) return S_LOG_CONFIG;\r\n if (level === LogLevel.ERROR) return S_LOG_ERROR;\r\n return S_WARN;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getSpan(value: any, style: string | null = null): HTMLElement {\r\n const s: HTMLElement = document.createElement(SPAN);\r\n if(style) s.classList.add(style);\r\n s.innerText = value;\r\n return s;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private injectStyle() {\r\n const style: HTMLStyleElement = document.createElement('style');\r\n style.id = STYLE_ID;\r\n style.innerHTML = \".atx-log-container{width:100%;background:black;font-family:monospace;font-size:14px;padding:10px 12px}.atx-log,.atx-config-log{color:white}.atx-error-log{color:red}.atx-warn-log{color:gold}.atx-log-metadata{color:#469afa}\";\r\n this._tgt.classList.add(\"atx-log-container\");\r\n this.getHead().appendChild(style);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private deleteStyle(): void {\r\n const style: HTMLElement | null = document.getElementById(STYLE_ID);\r\n if (style) this.getHead().removeChild(style);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getHead(): HTMLHeadElement {\r\n return document.getElementsByTagName('head')[0];\r\n }\r\n}","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { Log, LogConnector, Logger, TransactionalLogger, LogLevel } from \"../../../model\";\nimport { DefaultLogConnector } from \"../connector\";\nimport { LogBuilder } from \"../util\";\n\n/**\n * A convenient immutable instance of the `DefaultLogConnector` class.\n */\nexport const DEFAULT_LOG_CONNECTOR: LogConnector = new DefaultLogConnector();\n\n/**\n * The base class for all `Logger` objects.\n */\nexport abstract class AbstractLogger implements Logger, TransactionalLogger {\n\n /**\n * @inheritdoc\n */\n public minLogLevel: LogLevel = LogLevel.INFO;\n\n /**\n * The list of logs sent to this logger.\n */\n protected logs: Log[] = [];\n\n /**\n * The reference to the log connector associated with this logger.\n */\n protected logConnector: LogConnector = DEFAULT_LOG_CONNECTOR;\n\n /**\n * @inheritdoc\n */\n public setLogConnector(value: LogConnector | null): void {\n this.logConnector = value || DEFAULT_LOG_CONNECTOR;\n this.logConnector.init(this.logs);\n }\n \n /**\n * @inheritdoc\n */\n public getLogConnector(): LogConnector {\n return this.logConnector;\n }\n\n /**\n * @inheritdoc\n */\n public getLogs(): Log[] {\n return this.logs;\n }\n\n /**\n * @inheritdoc\n */\n public info(caller: string | any, msg: string, metadata?: any): void {\n this.addLog(caller, msg, LogLevel.INFO, metadata);\n }\n\n /**\n * @inheritdoc\n */\n public config(caller: string | any, msg: string, metadata?: any): void {\n this.addLog(caller, msg, LogLevel.CONFIG, metadata);\n }\n\n /**\n * @inheritdoc\n */\n public error(caller: string | any, msg: string, metadata?: any): void {\n this.addLog(caller, msg, LogLevel.ERROR, metadata);\n }\n \n /**\n * @inheritdoc\n */\n public warn(caller: string | any, msg: string, metadata?: any): void {\n this.addLog(caller, msg, LogLevel.WARNING, metadata);\n }\n\n /**\n * @inheritdoc\n */\n public destroy(): void {\n this.logConnector = null as any;\n this.clearLogs();\n }\n\n /**\n * @inheritdoc\n */\n public clearLogs(): void {\n this.logs.length = 0;\n }\n\n /**\n * @private\n */\n private addLog(caller: string | any, msg: string, level: LogLevel, metadata?: any): void {\n if (level < this.minLogLevel) return;\n const log: Log = LogBuilder.build(caller, msg, level, metadata);\n this.logs.push(log);\n this.logConnector.sendLog(log);\n }\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log, LogLevel } from \"../../../model\";\r\nimport { LogImpl } from \"../impl\";\r\n\r\n/**\r\n * A static builder that creates new `Log` objects.\r\n */\r\nexport class LogBuilder {\r\n\r\n /**\r\n * Builds and returns a new `Log` object initialized with the specified parameters.\r\n * \r\n * @param caller The reference to the object that sends the new log.\r\n * @param message The message of the new log.\r\n * @param level The level of the new log.\r\n * @param metadata The optional metadata associated with the new log.\r\n * \r\n * @returns A new `Log` object.\r\n */\r\n public static build(caller: string, message: string, level: LogLevel = LogLevel.INFO, metadata?: any): Log {\r\n return new LogImpl(caller, message, level, metadata);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A convenient string used to identify logs of LogLevel.INFO.\r\n */\r\nexport const LOG_INFO_STRING: string = \"INFO\";\r\n\r\n/**\r\n * A convenient string used to identify logs of LogLevel.CONFIG.\r\n */\r\nexport const LOG_CONFIG_STRING: string = \"CONFIG\";\r\n\r\n/**\r\n * A convenient string used to identify logs of LogLevel.WARNING.\r\n */\r\nexport const LOG_WARNING_STRING: string = \"WARNING\";\r\n\r\n/**\r\n * A convenient string used to identify logs of LogLevel.ERROR.\r\n */\r\nexport const LOG_ERROR_STRING: string = \"ERROR\";","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { formatDate } from \"@angular/common\";\r\nimport { Log, LogLevel} from \"../../../model\";\r\nimport { EMPTY_STRING, OBJECT, STRING } from \"../../../util\";\r\nimport { LOG_CONFIG_STRING, LOG_ERROR_STRING, LOG_INFO_STRING, LOG_WARNING_STRING } from \"./log.constant\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst TS_FMT: string = \"hh:mm:ss\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst SEPARATOR: string = \", \";\r\n\r\n/**\r\n * @private\r\n */\r\nconst R_BRACKET: string = \"[\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst L_BRACKET: string = \"]\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst LOCALE: string = \"en-us\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst getStringEnd: Function = (cusror: number, size: number) => {\r\n return cusror !== size ? SEPARATOR : EMPTY_STRING;\r\n}\r\n\r\n/**\r\n * A convenient utility class for formatting logs.\r\n */\r\nexport class LogUtil {\r\n\r\n /**\r\n * Turns the specified log list into a human redeable string.\r\n * \r\n * @param logList The list of logs to format.\r\n * @returns The formatted log list.\r\n */\r\n public static logListToString(logList: Log[]): string {\r\n const len: number = logList.length - 1,\r\n getLevelString = LogUtil.getLevelString;\r\n let logs: string = EMPTY_STRING,\r\n i: number = 0,\r\n levelTxt: string = EMPTY_STRING;\r\n for(; i <= len; ++i) {\r\n const log: Log = logList[i];\r\n logs += `[${LogUtil.dateToHHMMSS(log.timestamp)}][${getLevelString(log.level)}][${log.caller}][${log.message}]${LogUtil.metadataToString(log.metadata)}\\n`;\r\n }\r\n return logs;\r\n }\r\n\r\n /**\r\n * Turns the specified log level into a human redeable string.\r\n * \r\n * @param level The log level to format.\r\n * @returns The formatted log level.\r\n */\r\n public static getLevelString(level: LogLevel): string {\r\n if (level === LogLevel.INFO) return LOG_INFO_STRING;\r\n if (level === LogLevel.CONFIG) return LOG_CONFIG_STRING;\r\n if (level === LogLevel.WARNING) return LOG_WARNING_STRING;\r\n if (level === LogLevel.ERROR) return LOG_ERROR_STRING;\r\n return EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Return a string that represents the specified metadata object.\r\n * \r\n * @param obj The metadata object to format.\r\n * @returns A string that represents the specified metadata object.\r\n */\r\n public static metadataToString(obj: any): string {\r\n let result: string = EMPTY_STRING;\r\n if (!obj) return result;\r\n if (Array.isArray(obj)) return LogUtil.formatArray(obj);\r\n const keys: string[] = Object.keys(obj),\r\n len: number = keys.length - 1;\r\n let i: number = 0;\r\n for(; i <= len; ++i) {\r\n const key: string = keys[i];\r\n const value: any = obj[key];\r\n if (value === null) result += `${key}=null${getStringEnd(i, len)}`;\r\n else if (value === undefined) result += `${key}=undefined${getStringEnd(i, len)}`;\r\n else if (typeof value === STRING) result += `${key}=\"${value}\"${getStringEnd(i, len)}`;\r\n else if (Array.isArray(value)) result += `${key}=${LogUtil.formatArray(value)}${getStringEnd(i, len)}`;\r\n else if (typeof value === OBJECT) result += `${key}=${LogUtil.metadataToString(value)}${getStringEnd(i, len)}`;\r\n else result += `${key}=${value}${getStringEnd(i, len)}`;\r\n };\r\n if(result.endsWith(SEPARATOR)) {\r\n result = result.slice(0, - 2);\r\n }\r\n return result !== EMPTY_STRING ? R_BRACKET + result + L_BRACKET : result;\r\n }\r\n \r\n /**\r\n * Returns a string that represents the specified timestamp under the form of `\"hh:mm:ss\"`.\r\n * \r\n * @param timestamp The timestamp to format.\r\n * @returns A string that represents the specified timestamp under the form of `\"hh:mm:ss\"`.\r\n */\r\n public static dateToHHMMSS(timestamp: number): string {\r\n return formatDate(timestamp, TS_FMT, LOCALE);\r\n }\r\n \r\n /**\r\n * Returns a string that represents the specified array.\r\n * \r\n * @param array The array to format.\r\n * @returns A tring that represents the specified array.\r\n */\r\n private static formatArray(array: any[]): string {\r\n const len: number = array.length - 1;\r\n let i: number = 0,\r\n result: string = EMPTY_STRING;\r\n for(; i <= len; ++i) {\r\n const value: any = array[i];\r\n if (typeof value === STRING) result += `\"${value}\"${getStringEnd(i, len)}`;\r\n else if (Array.isArray(value)) result += `${LogUtil.formatArray(value)}${getStringEnd(i, len)}`;\r\n else if (typeof value === OBJECT) result += `${LogUtil.metadataToString(value)}${getStringEnd(i, len)}`;\r\n else result += `${value}${getStringEnd(i, len)}`;\r\n }\r\n return `[${result}]`;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AbstractLogger } from \"../../../logging\";\r\n\r\n/**\r\n * @private\r\n * The `Logger` implementation used by the `HttpMockLoggingService` class to manage logs.\r\n */\r\nexport class HttpMockLogger extends AbstractLogger {}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A utility enum that stores constants used by the `HttpMockLoggingService` to create log messages.\r\n */\r\nexport enum HttpMockLoggingConstant {\r\n \r\n /**\r\n * @private\r\n * The \"caller\" reference for all logs of the HTTP Mocking Framework.\r\n */\r\n CALLER = \"HTTP Mocking Framework\",\r\n \r\n /**\r\n * @private\r\n * The \"message\" reference for all valid logs of the HTTP Mocking Framework.\r\n */\r\n RESPONSE_MESSAGE = \"HTTP response\",\r\n\r\n /**\r\n * @private\r\n * The \"message\" reference for all error logs of the HTTP Mocking Framework.\r\n */\r\n ERROR_MESSAGE = \"HTTP error\",\r\n\r\n /**\r\n * @private\r\n * The \"message\" reference for all prefetch logs of the HTTP Mocking Framework.\r\n */\r\n CONFIG_MESSAGE = \"HTTP prefetch\"\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { HttpMockLogger } from \"../../../../../framework/mock/http/logging/http-mock-logger\";\r\nimport { TransactionalLogger, HttpMockLoggingMetadata, LogConnector, Log, HttpMockLoggingPrefetchMetadata } from \"../../../../business\";\r\nimport { HttpMockLoggingConstant } from \"../../../../business/logging/http-mock-logging-constant.enum\";\r\n\r\n/**\r\n * @private\r\n * \r\n * The utility service that manages the HTTP Mocking Framework logs.\r\n */\r\n@Injectable({\r\n providedIn: 'platform'\r\n})\r\nexport class HttpMockLoggingService implements TransactionalLogger, OnDestroy {\r\n\r\n /**\r\n * Returns the number of logs currently processed by this logger.\r\n */\r\n public get size(): number {\r\n return this._logger.getLogs().length;\r\n }\r\n\r\n /**\r\n * The `HttpMockLogger` instance encapsulated by this service.\r\n */\r\n private _logger: HttpMockLogger;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor() {\r\n this._logger = new HttpMockLogger();\r\n }\r\n\r\n /**\r\n * Processes information logs with the specified metadata.\r\n * \r\n * @param metadata The metadata associated with the HTTP method to log.\r\n * \r\n * @return The log for the specified metadata.\r\n */\r\n public info(metadata: HttpMockLoggingMetadata): Log {\r\n this._logger.info(HttpMockLoggingConstant.CALLER, HttpMockLoggingConstant.RESPONSE_MESSAGE, metadata);\r\n return this.getLastLog();\r\n }\r\n\r\n /**\r\n * Processes error logs with the specified metadata.\r\n * \r\n * @param metadata The metadata associated with the HTTP method to log.\r\n * \r\n * @return The log for the specified metadata.\r\n */\r\n public error(metadata: HttpMockLoggingMetadata): Log {\r\n this._logger.error(HttpMockLoggingConstant.CALLER, HttpMockLoggingConstant.ERROR_MESSAGE, metadata);\r\n return this.getLastLog();\r\n }\r\n\r\n /**\r\n * @private\r\n * Processes a special kind of logs that are used to indicate that a HTTP operation\r\n * started and no response is available yet.\r\n * \r\n * @param metadata The metadata associated with the HTTP method to log.\r\n */\r\n public prefetch(metadata: HttpMockLoggingPrefetchMetadata): void {\r\n this._logger.config(HttpMockLoggingConstant.CALLER, HttpMockLoggingConstant.CONFIG_MESSAGE, metadata);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public clearLogs(): void {\r\n this._logger.clearLogs();\r\n this._logger.getLogConnector().clearLogs();\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public setLogConnector(value: LogConnector | null): void {\r\n this._logger.setLogConnector(value);\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public getLogConnector(): LogConnector {\r\n return this._logger.getLogConnector();\r\n }\r\n \r\n /**\r\n * @inheritdoc\r\n */\r\n public destroy(): void {\r\n this.clearLogs()\r\n this._logger.destroy();\r\n this._logger = null as any;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public getLogs(): Log[] {\r\n return this._logger.getLogs();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private getLastLog(): Log {\r\n const logs: Log[] = this._logger.getLogs();\r\n return logs[logs.length - 1];\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AtxConsoleJson } from '../../../model/business/atx-console-json';\r\n\r\n/**\r\n * @private\r\n * The component that recursively renders `AtxConsoleJson` objects in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-json-viewer-panel',\n imports: [\n CommonModule\n ],\n templateUrl: './json-viewer-panel.component.html',\n styleUrl: './json-viewer-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxJsonViewerPanelComponent {\r\n\r\n /**\r\n * @private\r\n * The data to be rendererd whithin this component.\r\n */\r\n @Input()\r\n public data: AtxConsoleJson | null = null;\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (data) {\r\n @if (data.children) {\r\n <details>\r\n <summary>\r\n @if (data.label) {\r\n <span class=\"atx-prop-label\">{{ data.label }}</span>:\r\n <span [ngClass]=\"data.typeClass\">{{ data.value }}</span>\r\n } @else {\r\n {{ data.value }}\r\n }\r\n </summary>\r\n @for (item of data.children; track item) {\r\n <atx-json-viewer-panel [data]=\"item\"/>\r\n }\r\n </details>\r\n } @else {\r\n <div class=\"primitive\">\r\n <span class=\"atx-prop-label\">{{ data.label }}</span>: <span [ngClass]=\"data.typeClass\">{{ data.value }}</span>\r\n </div>\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * The list of object types used to qualify parsed objects.\r\n */\r\nexport enum ConsoleBodyType {\r\n\r\n /**\r\n * @private\r\n * Indicates that the type of object is not supported.\r\n */\r\n INVALID = -1,\r\n \r\n /**\r\n * @private\r\n * Indicates that the object is null.\r\n */\r\n NULL = 0,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is a Json.\r\n */\r\n JSON = 1,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is a string.\r\n */\r\n TEXT = 2,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is a Blob instance.\r\n */\r\n BLOB = 3,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is a FormData instance.\r\n */\r\n FORM_DATA = 4,\r\n\r\n /**\r\n * @private\r\n * Indicates that the object is an ArrayBuffer instance.\r\n */\r\n ARRAY_BUFFER = 5\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * The list of CSS class types for rendered objects.\r\n */\r\nexport enum ConsoleTypeClass {\r\n\r\n /**\r\n * @private\r\n * The class type for JS vanilla objects.\r\n */\r\n OBJECT = \"atx-object\",\r\n \r\n /**\r\n * @private\r\n * The class type for JS string primitives.\r\n */\r\n STRING = \"atx-string\",\r\n\r\n /**\r\n * @private\r\n * The class type for JS number primitives.\r\n */\r\n NUMBER= \"atx-number\",\r\n\r\n /**\r\n * @private\r\n * The class type for JS boolean primitives.\r\n */\r\n BOOLEAN= \"atx-boolean\",\r\n \r\n /**\r\n * @private\r\n * The class type for JS Arrays.\r\n */\r\n ARRAY= \"atx-array\",\r\n\r\n /**\r\n * @private\r\n * The class type for the JS `null` type.\r\n */\r\n NULL= \"atx-null\"\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { BOOLEAN, NUMBER, OBJECT, STRING } from '../../../../util';\r\nimport { AtxConsoleJson } from '../model/business/atx-console-json';\r\nimport { ConsoleBodyType } from './console-body-type';\r\nimport { ConsoleTypeClass } from './console-type-class';\r\n\r\nconst NULL: string = \"null\";\r\nconst ARR_END: string = '...]';\r\nconst OBJ_END: string = '...}'\r\n\r\n/**\r\n * @private\r\n * A utility class for managing metadata objects.\r\n */\r\nexport class DataUtil {\r\n\r\n /**\r\n * @private\r\n * Parses the specified object and returns a `AtxConsoleJson` tree that represents\r\n * the structure of parsed object.\r\n * \r\n * @param obj The object to parse.\r\n * @param label An optional `label` used to set the label property of the `AtxConsoleJson` object.\r\n * @returns a `AtxConsoleJson` tree object.\r\n */\r\n public static parseJson(obj: any, label?: string): AtxConsoleJson {\r\n const primitive: string = typeof obj;\r\n let type: ConsoleTypeClass = ConsoleTypeClass.OBJECT,\r\n value: any = obj,\r\n children: any = null;\r\n if (primitive === STRING) type = ConsoleTypeClass.STRING;\r\n else if (primitive === NUMBER) type = ConsoleTypeClass.NUMBER;\r\n else if (primitive === BOOLEAN) type = ConsoleTypeClass.BOOLEAN;\r\n else if (Array.isArray(obj)) {\r\n const rawValue: string = JSON.stringify(obj);\r\n let len: number = obj.length - 1;\r\n let idx: number = 0;\r\n type = ConsoleTypeClass.ARRAY;\r\n value = rawValue.length > 50 ? rawValue.substring(0, 46) + ARR_END : rawValue;\r\n children = [];\r\n for (; len >= 0; len--) {\r\n children.push(DataUtil.parseJson(obj[len], String(idx)));\r\n idx++;\r\n }\r\n } else if (obj === null) {\r\n type = ConsoleTypeClass.NULL;\r\n value = NULL;\r\n }\r\n else {\r\n const keys: string[] = Object.keys(obj);\r\n const rawValue: string = JSON.stringify(obj);\r\n let len: number = keys.length - 1;\r\n children = [];\r\n for (; len >= 0; len--) {\r\n const key: string = keys[len];\r\n children.push(DataUtil.parseJson(obj[key], key));\r\n }\r\n value = rawValue.length > 50 ? rawValue.substring(0, 46) + OBJ_END : rawValue;\r\n }\r\n return {\r\n label: label,\r\n typeClass: type,\r\n value: value,\r\n children: children\r\n }\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns a constant of the ConsoleBodyType enum, depending on the type of the specified object.\r\n * \r\n * @param obj The object for wich to get the type.\r\n * @returns A constant of the ConsoleBodyType enum.\r\n */\r\n public static getBodyType(obj: any): ConsoleBodyType {\r\n const primitive: string = typeof obj;\r\n if (obj === null || obj === undefined) return ConsoleBodyType.NULL;\r\n if (primitive === STRING) return ConsoleBodyType.TEXT;\r\n if (obj instanceof Blob) return ConsoleBodyType.BLOB;\r\n if (obj instanceof FormData) return ConsoleBodyType.FORM_DATA;\r\n if (obj instanceof ArrayBuffer) return ConsoleBodyType.ARRAY_BUFFER;\r\n if (primitive === OBJECT) return ConsoleBodyType.JSON;\r\n return ConsoleBodyType.INVALID;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { AtxJsonViewerPanelComponent } from '../json-viewer-panel/json-viewer-panel.component';\r\nimport { AtxConsoleJson } from '../../../model/business/atx-console-json';\r\nimport { DataUtil } from '../../../util/data.util';\r\n\r\n/**\r\n * @private\r\n * The component that renders JSON data in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-json-viewer',\n imports: [\n AtxJsonViewerPanelComponent\n ],\n templateUrl: './json-viewer.component.html',\n styleUrl: './json-viewer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxJsonViewerComponent {\r\n\r\n /**\r\n * @private\r\n */\r\n protected parsedData: AtxConsoleJson | null = null;\r\n\r\n /**\r\n * @private\r\n * Sets the data to be rendererd whithin this component.\r\n */\r\n @Input()\r\n public set data(value: any) {\r\n if (!value) {\r\n this.parsedData = null;\r\n return;\r\n }\r\n this.parsedData = DataUtil.parseJson(value);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<atx-json-viewer-panel [data]=\"parsedData\"/>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log } from '../../../../../model';\r\n\r\n/**\r\n * @private\r\n * The base class for all components that display logs information in the ATX monitoring console.\r\n */\r\nexport class AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected currLog: Log | null = null;\r\n\r\n /**\r\n * @private\r\n * Sets the log for which to render information.\r\n */\r\n public set log(value: Log | null) {\r\n this.currLog = value;\r\n }\r\n\r\n /**\r\n * @private\r\n * Gets the log for which to render information.\r\n */\r\n public get log(): Log | null {\r\n return this.currLog;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { Log } from '../../../../../../model';\r\nimport { HttpParams, HttpRequest } from '@angular/common/http';\r\nimport { AtxJsonViewerComponent } from '../json-viewer/json-viewer.component';\r\nimport { DataUtil } from '../../../util/data.util';\r\nimport { ConsoleBodyType } from '../../../util/console-body-type';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\n\r\n/**\r\n * @private\r\n * The component that displays payload data associated with an HTTP request in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-payload-renderer',\n imports: [\n AtxJsonViewerComponent\n ],\n templateUrl: './payload-renderer.component.html',\n styleUrl: './payload-renderer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxPayloadRendererComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected json: any = null;\r\n\r\n /**\r\n * @private\r\n */\r\n protected formData: any | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected queryParams: any[] | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log (value: Log | null) {\r\n super.log = value;\r\n this.json = this.formData = this.queryParams = null;\r\n if(!value) return;\r\n const request: HttpRequest<any> = value.metadata.request;\r\n const params: HttpParams = request.params;\r\n const paramsKeys: string[] = params.keys();\r\n const body: any = request.body;\r\n const bodyType: ConsoleBodyType = DataUtil.getBodyType(body);\r\n if (paramsKeys.length > 0) {\r\n this.queryParams = [];\r\n paramsKeys.forEach(key=> this.queryParams?.push( { key: key, value: params.get(key) } ));\r\n }\r\n if (bodyType === ConsoleBodyType.FORM_DATA) {\r\n this.formData = Array.from(body);\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.TEXT) {\r\n this.json = JSON.parse(body);\r\n }\r\n }\r\n}\r\n","\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (queryParams) {\r\n <details>\r\n <summary>\r\n Query String Parameters\r\n </summary>\r\n <div class=\"content\">\r\n @for (item of queryParams; track item) {\r\n <dl>\r\n <dt>{{ item.key }}:</dt>\r\n <dd>{{ item.value }}</dd>\r\n </dl>\r\n }\r\n </div>\r\n </details>\r\n} @else if (json) {\r\n <details>\r\n <summary>\r\n Request Payload\r\n </summary>\r\n <div class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </div>\r\n </details>\r\n} @else if (formData) {\r\n <details>\r\n <summary>\r\n Form Data\r\n </summary>\r\n <div class=\"content\">\r\n <ul>\r\n @for (entry of formData; track entry) {\r\n <li>[ {{ entry }} ]</li>\r\n }\r\n </ul>\r\n </div>\r\n </details>\r\n} \r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockRequestMetadata } from \"../../../../model\";\r\nimport { AtxTimelineData } from \"../model/business/atx-timeline-data\";\r\n\r\n/**\r\n * @private\r\n * A utility class for computing the timeline data of an HTTP request.\r\n */\r\nexport class TimelineUtil {\r\n\r\n /**\r\n * @private\r\n * Returns the timeline data for the specified HTTP log.\r\n * \r\n * @param metadata The HTTP metadata for which to get the timeline data.\r\n * @returns A `AtxTimelineData` object.\r\n */\r\n public static getTimelineData(metadata: HttpMockRequestMetadata): AtxTimelineData {\r\n const duration: number = metadata.duration;\r\n if (duration === 0) return { downloadStart: 0, downloadLength: 0 };\r\n const downloadLength: number = Math.round(100 * (duration - metadata.stalled) / duration);\r\n return { downloadStart: 100 - downloadLength, downloadLength: downloadLength };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { HttpMockLoggingMetadata, HttpMockRequestMetadata, Log } from '../../../../../../model';\r\nimport { DatePipe } from '@angular/common';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { TimelineUtil } from '../../../util/timeline.util';\r\n\r\n/**\r\n * @private\r\n * The component that displays the timeline of an HTTP response in the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-timing-renderer',\r\n imports: [\r\n DatePipe\r\n ],\r\n templateUrl: './timing-renderer.component.html',\r\n styleUrl: './timing-renderer.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AtxTimingRendererComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected hasData: boolean = false;\r\n \r\n /**\r\n * @private\r\n */\r\n protected start: number = NaN;\r\n \r\n /**\r\n * @private\r\n */\r\n protected downloadStart: number = NaN;\r\n \r\n /**\r\n * @private\r\n */\r\n protected downloadLength: number = NaN;\r\n \r\n /**\r\n * @private\r\n */\r\n protected duration: number = 0;\r\n \r\n /**\r\n * @private\r\n */\r\n protected error: boolean = false;\r\n\r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n if (!value) {\r\n this.hasData = this.error = false;\r\n this.start = this.downloadStart = this.downloadLength = NaN;\r\n this.duration = 0;\r\n return;\r\n }\r\n const metadata: HttpMockLoggingMetadata = value.metadata;\r\n const response: HttpResponse<any> | undefined = metadata.response;\r\n if (!response) return;\r\n const requestMetadata: HttpMockRequestMetadata = metadata.requestMetadata;\r\n this.error = response.status >= 400;\r\n this.hasData = true;\r\n this.start = requestMetadata.start;\r\n this.duration = requestMetadata.duration;\r\n const timelineData = TimelineUtil.getTimelineData(requestMetadata);\r\n this.downloadStart = timelineData.downloadStart;\r\n this.downloadLength = timelineData.downloadLength;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (hasData) {\r\n <section class=\"content\">\r\n <dl>\r\n <dt>Connection start</dt>\r\n <dd>{{ start | date: 'short' }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request/Response</dt>\r\n <dd class=\"timeline\">\r\n <div>\r\n <div [attr.style]=\"'width:' + downloadStart + '%'\">\r\n stalled\r\n <div class=\"stalled\"></div>\r\n <div class=\"time\">{{ downloadStart }} ms</div>\r\n </div>\r\n <div [attr.style]=\"'width:' + downloadLength + '%;margin-left:' + downloadStart + '%'\">\r\n download\r\n <div class=\"download\" [class.error]=\"error\"></div>\r\n <div class=\"time\">{{ duration }} ms</div>\r\n </div>\r\n </div>\r\n </dd>\r\n </dl>\r\n </section>\r\n} \r\n\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser'\r\nimport { PipeTransform, Pipe } from \"@angular/core\";\r\n\r\n/**\r\n * A basic implementation of a HTML sanitization pipe.\r\n */\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: true\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _sanitizer: DomSanitizer) {}\r\n\r\n /**\r\n * Transforms the HTML input string value into a `SafeHtml` instance and returns the result\r\n * of the transformation.\r\n * \r\n * @param value The HTML input value to transform into a `SafeHtml` instance.\r\n * @returns A `SafeHtml` instance based on the specified input value.\r\n */\r\n public transform(value: string): SafeHtml {\r\n return this._sanitizer.bypassSecurityTrustHtml(value);\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Log } from \"../../../../model\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst SLASH: string = \"/\";\r\n\r\n/**\r\n * @private\r\n * A utility class for managing request resources path.\r\n */\r\nexport class UrlUtil {\r\n\r\n /**\r\n * @private\r\n * Returns the resource name from the specified HTTP log.\r\n * \r\n * @param log The HTTP log for which to get the resource name.\r\n * @returns A string that represents the resource name of the specified HTTP log.\r\n */\r\n public static getResourceName(log: Log): string {\r\n return UrlUtil.getResourceNameFromPath(UrlUtil.getResourcePath(log));\r\n }\r\n\r\n /**\r\n * @private\r\n * Returns the resource name from the specified URL path.\r\n * \r\n * @param pathname The URL path for which to get the resource name.\r\n * @returns A string that represents the resource name of the specified URL path.\r\n */\r\n public static getResourceNameFromPath(pathname: string): string {\r\n const pos: number = pathname.length - 1;\r\n if (pathname.lastIndexOf(SLASH) === pos) pathname = pathname.substring(0, pos);\r\n return pathname.substring(pathname.lastIndexOf(SLASH) + 1);\r\n }\r\n\r\n /**\r\n * @private\r\n * Returns the resource path from the specified HTTP log.\r\n * \r\n * @param log The HTTP log for which to get the resource path.\r\n * @returns A string that represents the resource path of the specified HTTP log.\r\n */\r\n public static getResourcePath(log: Log): string {\r\n return log.metadata.requestMetadata.url.pathname;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\r\nimport { AtxJsonViewerComponent } from '../json-viewer/json-viewer.component';\r\nimport { DataUtil } from '../../../util/data.util';\r\nimport { ConsoleBodyType } from '../../../util/console-body-type';\r\nimport { SafeHtmlPipe } from '../../../../../../pipe';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { UrlUtil } from '../../../util/url.util';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\nimport { HttpMockLoggingMetadata, Log } from '../../../../../../model';\r\n\r\n/**\r\n * @Private\r\n */\r\nconst IMG_TYPE: string = 'image/';\r\n\r\n/**\r\n * @private\r\n * The component that displays HTTP response data preview in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-response-preview-renderer',\n imports: [\n AtxJsonViewerComponent,\n SafeHtmlPipe\n ],\n templateUrl: './response-preview-renderer.component.html',\n styleUrl: './response-preview-renderer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxResponsePreviewRendererComponent extends AtxLogRendererBase implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n protected json: any = null;\r\n\r\n /**\r\n * @private\r\n */\r\n protected text: string | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected response: any = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected imgUrl: string | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected trustUrl: SafeUrl | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected resourceName!: string;\r\n \r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n this.ngOnDestroy();\r\n if (!value) return;\r\n const metadata: HttpMockLoggingMetadata = value.metadata; \r\n const response: HttpResponse<any> = metadata.response;\r\n if (!response) return\r\n const body: any = response.body;\r\n this.response = value;\r\n this.json = this.text = this.imgUrl = this.trustUrl = null;\r\n if (!body) return;\r\n const bodyType: ConsoleBodyType = DataUtil.getBodyType(body);\r\n if (bodyType === ConsoleBodyType.TEXT) {\r\n this.text = body;\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.JSON) {\r\n this.json = body;\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.BLOB) {\r\n const type = body.type;\r\n if (type.startsWith(IMG_TYPE)) {\r\n this.resourceName = UrlUtil.getResourceNameFromPath((response as any).url);\r\n const url: string = URL.createObjectURL(body);\r\n this.imgUrl = url;\r\n this.trustUrl = this.sanitizer.bypassSecurityTrustUrl(url);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private sanitizer: DomSanitizer) {\r\n super();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.revokeObjectURL();\r\n this.json = this.text = this.json = this.response = this.imgUrl = this.trustUrl = null;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected revokeObjectURL(): void {\r\n if (this.imgUrl) URL.revokeObjectURL(this.imgUrl);\r\n }\r\n}\r\n","\r\n<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (response) {\r\n @if (text) {\r\n <section class=\"content\" [innerHTML]=\"text | safeHtml \"></section>\r\n } @else if (json) {\r\n <section class=\"content\">\r\n <atx-json-viewer [data]=\"json\"/>\r\n </section>\r\n } @else if (imgUrl) {\r\n <section class=\"content img-preview\">\r\n <div>\r\n <img [src]=\"imgUrl\" (load)=\"revokeObjectURL()\" [alt]=\"resourceName\" [title]=\"resourceName\">\r\n </div>\r\n </section>\r\n } @else {\r\n <section class=\"content center-content\">\r\n <strong>Preview not available</strong>\r\n </section>\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { DataUtil } from '../../../util/data.util';\r\nimport { ConsoleBodyType } from '../../../util/console-body-type';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\nimport { HttpMockLoggingMetadata, Log } from '../../../../../../model';\r\n\r\n/**\r\n * @private\r\n * The component that displays HTTP response data in the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-response-body-renderer',\r\n templateUrl: './response-body-renderer.component.html',\r\n styleUrl: './response-body-renderer.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AtxResponseBodyRendererComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected text: string | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected body: any = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected blob: Blob | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n protected arrayBuffer: ArrayBuffer | null = null;\r\n \r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n this.ngOnDestroy();\r\n if (!value) return;\r\n const metadata: HttpMockLoggingMetadata = value.metadata; \r\n const response: HttpResponse<any> = metadata.response;\r\n if (!response) return\r\n const body: any = response.body;\r\n this.body = body;\r\n if (!body) return;\r\n const bodyType: ConsoleBodyType = DataUtil.getBodyType(body);\r\n if (bodyType === ConsoleBodyType.TEXT) {\r\n this.text = body;\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.JSON) {\r\n this.text = JSON.stringify(body);\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.BLOB) {\r\n this.blob = body;\r\n return;\r\n }\r\n if (bodyType === ConsoleBodyType.ARRAY_BUFFER) this.arrayBuffer = body;\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.text = this.body = this.blob = this.arrayBuffer = null;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (body) {\r\n <section class=\"content\">\r\n @if (text) {\r\n {{ text }}\r\n } @else if (blob) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Blob</dd>\r\n </dl>\r\n <dl>\r\n <dt>size:</dt>\r\n <dd>{{ blob.size }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>type:</dt>\r\n <dd>{{ blob.type }}</dd>\r\n </dl>\r\n } @else if (arrayBuffer) {\r\n <dl>\r\n <dt>Binary data:</dt>\r\n <dd>Array Buffer</dd>\r\n </dl>\r\n <dl>\r\n <dt>byte length:</dt>\r\n <dd>{{ arrayBuffer.byteLength }}</dd>\r\n </dl>\r\n } @else {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n }\r\n </section>\r\n} @else if (currLog) {\r\n <div class=\"center-content\">\r\n <strong>This request has no data available</strong>\r\n </div>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * A utility class that indicates the type of user's action.\r\n */\r\nexport enum AtxConsoleActionType {\r\n\r\n /**\r\n * @private\r\n * Idincates that the logs must be cleared.\r\n */\r\n CLEAR_LOGS = 0,\r\n\r\n /**\r\n * @private\r\n * Idincates that the logs must be exported.\r\n */\r\n EXPORT_LOGS = 1,\r\n\r\n /**\r\n * @private\r\n * Idincates that logs must be imported.\r\n */\r\n IMPORT_LOGS = 2,\r\n \r\n /**\r\n * @private\r\n * Idincates that the a log is selected.\r\n */\r\n LOG_SELECT = 3,\r\n\r\n /**\r\n * @private\r\n * Idincates that the details panel must be closed.\r\n */\r\n CLOSE_DETAILS_PANEL = 4\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { HttpMockLoggingMetadata, Log } from '../../../../../../model';\r\nimport { NgStyle } from '@angular/common';\r\nimport { HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\n\r\n/**\r\n * @private\r\n * The component that displays HTTP request info in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-request-info-renderer',\n imports: [\n NgStyle,\n ],\n templateUrl: './request-info-renderer.component.html',\n styleUrl: './request-info-renderer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxRequesInfoComponent extends AtxLogRendererBase {\r\n \r\n /**\r\n * @private\r\n */\r\n protected request!: HttpRequest<any>;\r\n \r\n /**\r\n * @private\r\n */\r\n protected response!: HttpResponse<any>;\r\n\r\n /**\r\n * @private\r\n * Gest or sets the log for which to display general information.\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n if (!value) {\r\n this.request = this.response = null as any;\r\n return;\r\n }\r\n const metadata: HttpMockLoggingMetadata = value.metadata; \r\n const request: HttpRequest<any> = metadata.request; \r\n this.request = request;\r\n this.response = metadata.response;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<details open>\r\n <summary>General</summary>\r\n <section>\r\n <dl>\r\n <dt>Request URL:</dt>\r\n <dd>{{ request.url }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Request Method:</dt>\r\n <dd>{{ request.method }}</dd>\r\n </dl>\r\n <dl>\r\n <dt>Status Code:</dt>\r\n <dd class=\"status-container\">\r\n @if (response) {\r\n <svg [ngStyle]=\"{ fill: response.status < 400 ? 'green' : 'red' }\" \r\n width=\"13\" height=\"13\" viewBox=\"0 0 16 16\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\"/>\r\n </svg>\r\n {{ response.status }} {{ response.statusText }}\r\n } @else {\r\n <svg fill=\"orange\" width=\"13\" height=\"13\" viewBox=\"0 0 16 16\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\"/>\r\n </svg>\r\n prefetch\r\n }\r\n </dd>\r\n </dl>\r\n </section>\r\n</details>\r\n<details>\r\n <summary>Response Headers</summary>\r\n <section>\r\n @if (response) {\r\n @for( item of response.headers.keys(); track item) {\r\n <dl>\r\n <dt>{{ item }}</dt>\r\n <dd>{{ response.headers.get(item) }}</dd>\r\n </dl>\r\n \r\n }\r\n }\r\n </section>\r\n</details>\r\n<details>\r\n <summary>Request Headers</summary>\r\n <section>\r\n @for(item of request.headers.keys(); track item) {\r\n <dl>\r\n <dt>{{ item }}</dt>\r\n <dd>{{ request.headers.get(item) }}</dd>\r\n </dl>\r\n }\r\n </section>\r\n</details>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter, Injectable, Output } from \"@angular/core\";\r\nimport { AtxConsoleAction } from \"../business/atx-console-action\";\r\nimport { AtxConsoleActionType } from \"../business/atx-console-action-type\";\r\n\r\n/**\r\n * @private\r\n * The service responsible for sending user's actions to the controller.\r\n */\r\n@Injectable()\r\nexport class AtxUserActionService {\r\n\r\n /**\r\n * @private\r\n * An event emitter that triggers event representing user's actions.\r\n */\r\n @Output()\r\n public readonly action: EventEmitter<AtxConsoleAction> = new EventEmitter(true);\r\n \r\n /**\r\n * @private\r\n * Sends a user's actions to the system.\r\n * \r\n * @param type The type of action to send.\r\n * @param data Optional data associated with the user's actions.\r\n */\r\n public sendAction(type: AtxConsoleActionType, data: any = null): void {\r\n this.action.emit( { type: type, data: data } );\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { HttpMockLoggingMetadata, Log } from '../../../../../model';\r\nimport { HttpRequest } from '@angular/common/http';\r\nimport { AtxPayloadRendererComponent } from '../renderer/payload-renderer/payload-renderer.component';\r\nimport { AtxTimingRendererComponent } from '../renderer/timing-renderer/timing-renderer.component';\r\nimport { AtxResponsePreviewRendererComponent } from '../renderer/response-preview-renderer/response-preview-renderer.component';\r\nimport { AtxResponseBodyRendererComponent } from '../renderer/response-body-renderer/response-body-renderer.component';\r\nimport { AtxUserActionService } from '../../model/service/atx-user-action.service';\r\nimport { AtxConsoleActionType } from '../../model/business/atx-console-action-type';\r\nimport { AtxRequesInfoComponent } from '../renderer/request-info-renderer/request-info-renderer.component';\r\nimport { AtxLogRendererBase } from '../abstract/log-renderer-base';\r\n\r\n/**\r\n * @private\r\n * The component that layouts all the logs details in the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-monitoring-console-details',\r\n imports: [\r\n AtxPayloadRendererComponent,\r\n AtxTimingRendererComponent,\r\n AtxResponsePreviewRendererComponent,\r\n AtxResponseBodyRendererComponent,\r\n AtxRequesInfoComponent\r\n ],\r\n templateUrl: './request-details.component.html',\r\n styleUrl: './request-details.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AtxRequestDetailsComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected hasPayload: boolean = false;\r\n \r\n /**\r\n * @private\r\n */\r\n protected readonly actionType: any = AtxConsoleActionType;\r\n \r\n /**\r\n * @private\r\n */\r\n protected currSection: number = 0;\r\n\r\n /**\r\n * @private\r\n * Gest or sets the log for which to display details.\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n if (value) {\r\n const metadata: HttpMockLoggingMetadata = value.metadata; \r\n const request: HttpRequest<any> = metadata.request;\r\n this.checkPayload(request);\r\n this._cdr.detectChanges();\r\n return;\r\n }\r\n this.hasPayload = false;\r\n this._cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected action: AtxUserActionService,\r\n private _cdr: ChangeDetectorRef) {\r\n super();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected changeSection(idx: number): void {\r\n this.currSection = idx;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private checkPayload(request: HttpRequest<any>): void {\r\n const hasBody: boolean = (request.body !== null && request.body !== undefined);\r\n this.hasPayload = (request.params.keys().length > 0 || hasBody);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (currLog) {\r\n <header>\r\n <menu>\r\n <li role=\"button\" (click)=\"changeSection(0)\"><span [class.selected]=\"currSection === 0\">Headers</span></li>\r\n @if (hasPayload) {\r\n <li role=\"button\" (click)=\"changeSection(1)\"><span [class.selected]=\"currSection === 1\">Payload</span></li>\r\n }\r\n <li role=\"button\" (click)=\"changeSection(2)\"><span [class.selected]=\"currSection === 2\">Preview</span></li>\r\n <li role=\"button\" (click)=\"changeSection(3)\"><span [class.selected]=\"currSection === 3\">Response</span></li>\r\n <li role=\"button\" (click)=\"changeSection(4)\"><span [class.selected]=\"currSection === 4\">Timing</span></li>\r\n <div role=\"button\" (click)=\"action.sendAction(actionType.CLOSE_DETAILS_PANEL)\" title=\"Close\" class=\"header-btn\">\r\n <svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708\"/>\r\n </svg>\r\n </div>\r\n </menu>\r\n </header>\r\n <main>\r\n @if (currSection === 0) {\r\n <atx-request-info-renderer [log]=\"currLog\"/>\r\n } @else if (currSection === 1) {\r\n <atx-payload-renderer [log]=\"currLog\"/>\r\n } @else if (currSection === 2) {\r\n <atx-response-preview-renderer [log]=\"currLog\"/>\r\n } @else if (currSection === 3) {\r\n <section class=\"raw-response\">\r\n <atx-response-body-renderer [log]=\"currLog\"/>\r\n </section>\r\n } @else if (currSection === 4) {\r\n <atx-timing-renderer [log]=\"currLog\"/>\r\n }\r\n </main>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst B: string = \" B\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst KB: string = \" KB\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst MB: string = \" MB\";\r\n\r\n/**\r\n * @private\r\n * A utility class for managing request data size.\r\n */\r\nexport class SizeUtil {\r\n\r\n /**\r\n * The string reference to the initial data size.\r\n */\r\n public static readonly INITIAL_SIZE: string = \"0 B\";\r\n\r\n /**\r\n * @private\r\n * Returns the size of the specified object in bytes.\r\n * \r\n * @param obj The object for which to get the size.\r\n * @returns The size of the specified object.\r\n */\r\n public static getSize(obj: any): number {\r\n if (!obj) return 0;\r\n return new TextEncoder().encode(JSON.stringify(obj)).length;\r\n }\r\n \r\n /**\r\n * @private\r\n * \r\n * Returns the string representation of the specified size.\r\n * @param size The size, in bytes, for which to get the string representation.\r\n * @returns The string representation of the specified size.\r\n */\r\n public static sizeToString(size: number): string {\r\n if (size < 1024) return size + B;\r\n size = size / 1024;\r\n if (size < 1024) return size.toFixed(2) + KB;\r\n return (size / 1024).toFixed(2) + MB;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Log, LogLevel } from '../../../../../model';\r\nimport { Uuid } from '../../../../../util';\r\nimport { SizeUtil } from \"../../util/size.util\";\r\n\r\n/**\r\n * @private\r\n * A convenient service that stores the state of an `AtxMonitoringConsoleComponent` instance.\r\n */\r\n@Injectable()\r\nexport class AtxMonitoringConsoleState {\r\n\r\n /**\r\n * @private\r\n * Returns the `Log` object currently selected, or `null` if no log is selected.\r\n */\r\n public get selectedLog(): Log | null {\r\n return this._selectedLog;\r\n };\r\n\r\n /**\r\n * @private\r\n * Returns a string that represents the size of all requests stored within this service.\r\n * The string is in the format defined by the `SizeUtil.sizeToString()` method.\r\n */\r\n public get cumulativeSize(): string {\r\n return this._cumulativeSize;\r\n };\r\n\r\n /**\r\n * @private\r\n * Returns the list of logs stored within this service.\r\n */\r\n public get logs(): Log[] {\r\n return this._logs;\r\n };\r\n\r\n /**\r\n * @private\r\n * Returns the number of logs stored within this service.\r\n */\r\n public get numLogs(): number {\r\n return this._logs.length;\r\n };\r\n\r\n /**\r\n * @private\r\n */\r\n private _selectedLog: Log | null = null;\r\n\r\n /**\r\n * @private\r\n */\r\n private _cumulativeSize: string = SizeUtil.INITIAL_SIZE;\r\n\r\n /**\r\n * @private\r\n */\r\n private _logs: Log[] = [];\r\n\r\n /**\r\n * @private\r\n */\r\n private _size: number = 0;\r\n\r\n /**\r\n * @private\r\n * Initializes the service.\r\n * Allows to inject the logs previously collected by the `HttpMockLoggingService` singleton.\r\n * \r\n * @param logs The list of logs that must be stored within this service.\r\n */\r\n public init(logs: Log[]): void {\r\n const len: number = logs.length - 1;\r\n let i: number = 0;\r\n for (; i <= len; ++i) this.addLog(logs[i]);\r\n }\r\n\r\n /**\r\n * @private\r\n * Adds the specified log to the service for storage purpose.\r\n * \r\n * @param log The log to add to this service.\r\n */\r\n public addLog(log: Log): void {\r\n if (log.level !== LogLevel.CONFIG) {\r\n const size: number = SizeUtil.getSize(log.metadata.response.body);\r\n const id: Uuid = log.metadata.requestMetadata.id;\r\n this._size += size;\r\n this._cumulativeSize = SizeUtil.sizeToString(this._size);\r\n const idx: number = this._logs.findIndex(prefetch => prefetch.metadata.requestMetadata.id === id);\r\n idx > -1 ? this._logs.splice(idx, 1, log) : this._logs.push(log);\r\n if (this.selectedLog?.metadata.requestMetadata.id === id) this._selectedLog = log;\r\n } else this._logs.push(log);\r\n }\r\n\r\n /**\r\n * @private\r\n * Removes all the logs stored within this service and sets all service properties\r\n * to their default value.\r\n */\r\n public clearLogs(): void {\r\n this._selectedLog = null;\r\n this._size = this._logs.length = 0;\r\n this._cumulativeSize = SizeUtil.INITIAL_SIZE;\r\n }\r\n\r\n /**\r\n * @private\r\n * Indicates that the specified log is the currently selected log.\r\n * \r\n * @param log The log to set as the currently selected log.\r\n */\r\n public selectLog(log: Log | null): void {\r\n this._selectedLog = log;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\nimport { AtxMonitoringConsoleState } from '../../model/service/atx-monitoring-console.state';\r\n\r\n/**\r\n * @private\r\n * Represents the footer element of the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-console-footer',\r\n standalone: true,\r\n templateUrl: './console-footer.component.html',\r\n styleUrl: './console-footer.component.scss'\r\n})\r\nexport class AtxConsoleFooterComponent {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected state: AtxMonitoringConsoleState) {}\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<footer>\r\n <div>\r\n {{ state.numLogs }} request(s)\r\n </div>\r\n <div class=\"menu-separator\"></div>\r\n <div>\r\n {{ state.cumulativeSize }} resources\r\n </div>\r\n</footer>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\nimport { AtxConsoleActionType } from '../../model/business/atx-console-action-type';\r\nimport { AtxUserActionService } from '../../model/service/atx-user-action.service';\r\n\r\n/**\r\n * @private\r\n * Represents the user's action menu element of the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-console-menu',\r\n standalone: true,\r\n templateUrl: './console-menu.component.html',\r\n styleUrl: './console-menu.component.scss'\r\n})\r\nexport class AtxConsoleMenuComponent {\r\n\r\n /**\r\n * @private\r\n */\r\n protected readonly actionType: any = AtxConsoleActionType;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected action: AtxUserActionService) {}\r\n\r\n /**\r\n * @private\r\n */\r\n protected onFileSelect(event: Event): void {\r\n this.action.sendAction(AtxConsoleActionType.IMPORT_LOGS, (event.target as HTMLInputElement).files);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n<menu>\r\n <li id=\"clear-btn\" role=\"button\" title=\"Clear network log\" (click)=\"action.sendAction(actionType.CLEAR_LOGS)\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16\"/>\r\n <path d=\"M11.354 4.646a.5.5 0 0 0-.708 0l-6 6a.5.5 0 0 0 .708.708l6-6a.5.5 0 0 0 0-.708\"/>\r\n </svg>\r\n </li>\r\n <div class=\"menu-separator\"></div>\r\n <li id=\"filter-btn\" title=\"Filter\" class=\"disabled\">\r\n <svg width=\"19\" height=\"19\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10 8.692V13.5a.5.5 0 0 1-.342.474l-3 1A.5.5 0 0 1 6 14.5V8.692L1.628 3.834A.5.5 0 0 1 1.5 3.5zm1 .5v1.308l4.372 4.858A.5.5 0 0 1 7 8.5v5.306l2-.666V8.5a.5.5 0 0 1 .128-.334L13.5 3.308V2z\"/>\r\n </svg>\r\n </li>\r\n <li id=\"search-btn\" title=\"Search\" class=\"disabled\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0\"/>\r\n </svg>\r\n </li>\r\n <div class=\"menu-separator\"></div>\r\n <li id=\"import-btn\" role=\"button\" title=\"Import\" (click)=\"importField.click()\">\r\n <svg width=\"19\" height=\"19\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5\"/>\r\n <path d=\"M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z\"/>\r\n </svg>\r\n <input type=\"file\" #importField accept=\".hmfl\" (change)=\"onFileSelect($event)\">\r\n </li>\r\n <li id=\"export-btn\" role=\"button\" title=\"Export\" (click)=\"action.sendAction(actionType.EXPORT_LOGS)\">\r\n <svg width=\"18\" height=\"18\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5\"/>\r\n <path d=\"M7.646 1.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 2.707V11.5a.5.5 0 0 1-1 0V2.707L5.354 4.854a.5.5 0 1 1-.708-.708z\"/>\r\n </svg>\r\n </li>\r\n</menu>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpContextToken } from \"@angular/common/http\";\r\n\r\n/**\r\n * @private\r\n * A HTTP context value that indicates whether the specified log is imported (`true`), or not (`false`).\r\n */\r\nexport const ATX_IS_IMPORTED_LOG: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => false);","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\n\r\n/**\r\n * @private\r\n * A spinner icon component.\r\n */\r\n@Component({\r\n selector: 'atx-spinner',\r\n standalone: true,\r\n templateUrl: './spinner.component.html',\r\n styleUrl: './spinner.component.scss'\r\n})\r\nexport class AtxSpinnerComponent {}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41m-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9\"/>\r\n <path fill-rule=\"evenodd\" d=\"M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5 5 0 0 0 8 3M3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9z\"/>\r\n</svg>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { Log } from '../../../../../../model';\r\nimport { ATX_IS_IMPORTED_LOG } from '../../../model/business/atx-is-imported-log';\r\nimport { ConsoleBodyType } from '../../../util/console-body-type';\r\nimport { DataUtil } from '../../../util/data.util';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { AtxSpinnerComponent } from '../spinner/spinner.component';\r\nimport { AtxLogRendererBase } from '../../abstract/log-renderer-base';\r\n\r\n/**\r\n * @private\r\n * The component responsible for managing icons the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-icon-renderer',\n templateUrl: './icon-renderer.component.html',\n styleUrl: './icon-renderer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AtxSpinnerComponent\n ]\n})\r\nexport class AtxIconRendererComponent extends AtxLogRendererBase {\r\n\r\n /**\r\n * @private\r\n */\r\n protected bodyType: ConsoleBodyType = ConsoleBodyType.INVALID;\r\n\r\n /**\r\n * @private\r\n */\r\n protected hasReponse: boolean = false;\r\n \r\n /**\r\n * @private\r\n */\r\n protected isImported: boolean = false;\r\n\r\n /**\r\n * @private\r\n */\r\n @Input()\r\n public override set log(value: Log | null) {\r\n super.log = value;\r\n if (!value) {\r\n this.hasReponse = this.isImported = false;\r\n this.bodyType = ConsoleBodyType.INVALID;\r\n return;\r\n }\r\n const response: HttpResponse<any> = value.metadata.response;\r\n const complete: boolean = response !== null && response !== undefined;\r\n this.hasReponse = complete;\r\n this.bodyType = complete ? DataUtil.getBodyType(response.body) : ConsoleBodyType.INVALID;\r\n this.isImported = value.metadata.request?.context.get(ATX_IS_IMPORTED_LOG);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (hasReponse) {\r\n <svg width=\"24\" height=\"24\" fill=\"currentColor\">\r\n @if (bodyType == 0) {\r\n <use href=\"#empty-icon\"/>\r\n } @else if (bodyType == 1) {\r\n <use href=\"#json-icon\"/>\r\n } @else if (bodyType == 2) {\r\n <use href=\"#text-icon\"/>\r\n } @else if (bodyType == 3) {\r\n <use href=\"#blob-icon\"/>\r\n } @else if (bodyType == 5) {\r\n <use href=\"#bin-icon\"/>\r\n }\r\n </svg>\r\n @if (isImported) {\r\n <svg width=\"24\" height=\"24\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\" d=\"M3.5 6a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h9a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 1 0-1h2A1.5 1.5 0 0 1 14 6.5v8a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 14.5v-8A1.5 1.5 0 0 1 3.5 5h2a.5.5 0 0 1 0 1z\"/>\r\n <path fill-rule=\"evenodd\" d=\"M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z\"/>\r\n </svg>\r\n }\r\n} @else if (currLog) {\r\n <atx-spinner />\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\nimport { Log } from '../../../../../../model';\r\nimport { HttpResponse } from '@angular/common/http';\r\nimport { SizeUtil } from '../../../util/size.util';\r\nimport { UrlUtil } from '../../../util/url.util';\r\nimport { AtxIconRendererComponent } from '../icon-renderer/icon-renderer.component';\r\nimport { AtxMonitoringConsoleState } from '../../../model/service/atx-monitoring-console.state';\r\nimport { AtxUserActionService } from '../../../model/service/atx-user-action.service';\r\nimport { AtxConsoleActionType } from '../../../model/business/atx-console-action-type';\r\n\r\n/**\r\n * @private\r\n */\r\nconst TPL_DASH: string = \"---\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst PREFETCH: string = \"prefetch\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst MS_SUFIX: string = \" ms\";\r\n\r\n/**\r\n * @private\r\n * The component that layouts HTTP logs via a table element in the ATX monitoring console.\r\n */\r\n@Component({\n selector: 'atx-request-list-renderer',\n imports: [\n AtxIconRendererComponent\n ],\n templateUrl: './request-list-renderer.component.html',\n styleUrl: './request-list-renderer.component.scss'\n})\r\nexport class AtxRequestListRendererComponent {\r\n \r\n /**\r\n * @private\r\n */\r\n protected readonly actionType: any = AtxConsoleActionType;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected state: AtxMonitoringConsoleState,\r\n protected action: AtxUserActionService) {}\r\n\r\n /**\r\n * @private\r\n * Returns the data size for the specified log.\r\n */\r\n protected getSize(log: Log): string {\r\n const response: HttpResponse<any> | null = log.metadata.response;\r\n if (response) {\r\n const size: number = SizeUtil.getSize(response.body);\r\n return SizeUtil.sizeToString(size);\r\n }\r\n return TPL_DASH;\r\n }\r\n\r\n /**\r\n * @private\r\n * Returns the HTTP status for the specified log.\r\n */\r\n protected getStatus(log: Log): string | number { const response: HttpResponse<any> | null = log.metadata.response;\r\n if (response) return response.status;\r\n return PREFETCH;\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns the transaction duration for the specified log.\r\n */\r\n protected getTime(log: Log): string {\r\n const response: HttpResponse<any> | null = log.metadata.response;\r\n if (response) return log.metadata.requestMetadata.duration + MS_SUFIX;\r\n return TPL_DASH;\r\n }\r\n\r\n /**\r\n * @private\r\n * RIndicates whether the specified log is an error (true), or not (false).\r\n */\r\n protected isError(log: Log): boolean {\r\n const response: HttpResponse<any> | null = log.metadata.response;\r\n if (response) return response.status >= 400;\r\n return false;\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns the resource name for the specified log.\r\n */\r\n protected getResourceName(log: Log): string {\r\n return UrlUtil.getResourceName(log);\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns the resource path for the specified log.\r\n */\r\n protected getResourcePath(log: Log): string {\r\n return UrlUtil.getResourcePath(log);\r\n }\r\n\r\n /**\r\n * @private\r\n * Applies user's filters to the spefivied log (previously unreleased).\r\n */\r\n protected checkFilters(log: Log): boolean {\r\n return true;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n<table id=\"request-list\" >\r\n <thead>\r\n <tr>\r\n <th class=\"name-header\">\r\n Name\r\n <div role=\"button\" title=\"Expand\" class=\"header-btn\" (click)=\"action.sendAction(actionType.CLOSE_DETAILS_PANEL)\">\r\n <svg width=\"20\" height=\"20\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n @if (this.state.selectedLog) {\r\n <path fill-rule=\"evenodd\" d=\"M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8m-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5\"/>\r\n }\r\n </svg>\r\n </div>\r\n </th>\r\n @if (!this.state.selectedLog) {\r\n <th>Status</th>\r\n <th>Size</th>\r\n <th>Time</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (log of this.state.logs; track log.metadata.requestMetadata.id) {\r\n @if (checkFilters(log)) {\r\n <tr [class.error-row]=\"isError(log)\" role=\"button\" (click)=\"action.sendAction(actionType.LOG_SELECT, log)\"\r\n [class.selected-row]=\"this.state.selectedLog === log\">\r\n <td [title]=\"getResourcePath(log)\">\r\n <atx-icon-renderer [log]=\"log\"/>\r\n <div class=\"resource-cell\">\r\n {{ getResourceName(log) }}\r\n <br>\r\n {{ getResourcePath(log) }}\r\n </div>\r\n </td>\r\n @if (!this.state.selectedLog) {\r\n <td>{{ getStatus(log) }}</td>\r\n <td>{{ getSize(log) }}</td>\r\n <td>{{ getTime(log) }}</td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n</table>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockLoggingConstant } from \"../../../../../model/business/logging/http-mock-logging-constant.enum\";\r\nimport { LogLevel } from \"../../../../../model\";\r\n\r\n/**\r\n * @private\r\n * A utility class that returns a human-readable message depending on the specified level.\r\n */\r\nexport class LogMessageUtil {\r\n \r\n /**\r\n * @private\r\n * Returns a human-readable message depending on the specified level.\r\n * \r\n * @param level The level for which to get the message.\r\n * @returns A string.\r\n */\r\n public static getMessageFromLevel(level: LogLevel): HttpMockLoggingConstant {\r\n if (level === LogLevel.INFO) return HttpMockLoggingConstant.RESPONSE_MESSAGE;\r\n if (level === LogLevel.ERROR) return HttpMockLoggingConstant.ERROR_MESSAGE;\r\n return HttpMockLoggingConstant.CONFIG_MESSAGE;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockRequestMetadata } from \"../../../../../model\";\r\nimport { AtxHttpRequestMetadataDto } from \"../../model/business/io/atx-http-request-metadata.dto.ts\";\r\nimport { Uuid } from \"../../../../../util\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpMockRequestMetadata` objects into `AtxHttpRequestMetadataDto` objects.\r\n */\r\nexport class RequestMetadataConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpMockRequestMetadata` object into an `AtxHttpRequestMetadataDto` object.\r\n * \r\n * @param headers The `HttpMockRequestMetadata` object to convert.\r\n * @returns A new `AtxHttpRequestMetadataDto` object.\r\n */\r\n public static requestMetadataToDto(metadata: HttpMockRequestMetadata): AtxHttpRequestMetadataDto {\r\n return {\r\n duration: metadata.duration,\r\n id: metadata.id.toString(),\r\n stalled: metadata.stalled,\r\n start: metadata.start,\r\n url: metadata.url.toString()\r\n };\r\n }\r\n \r\n /**\r\n * @private\r\n * Converts an `AtxHttpRequestMetadataDto` object into a `HttpMockRequestMetadata` object.\r\n * \r\n * @param headersDto The `AtxHttpRequestMetadataDto` objects to convert.\r\n * @returns A new `HttpMockRequestMetadata` objects.\r\n */\r\n public static dtoToRequestMetadata(dto: AtxHttpRequestMetadataDto): HttpMockRequestMetadata {\r\n return {\r\n duration: dto.duration,\r\n id: Uuid.fromString(dto.id),\r\n stalled: dto.stalled,\r\n start: dto.start,\r\n url: new URL(dto.url)\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { AtxHeaderDto } from \"../../model/business/io/atx-header-dto\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpHeaders` instances into lists of `AtxHeaderDto` objects.\r\n */\r\nexport class HttpHeadersConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpHeaders` instance into a list of `AtxHeaderDto` object.\r\n * \r\n * @param headers The `HttpHeaders` instance to convert.\r\n * @returns A new `AtxHeaderDto` object.\r\n */\r\n public static headersToDto(headers: HttpHeaders): AtxHeaderDto[] {\r\n const dtoList: AtxHeaderDto[] = [];\r\n const keys: string[] = headers.keys();\r\n let cursor: number = keys.length - 1;\r\n for(; cursor >= 0; cursor--) {\r\n const key: string = keys[cursor];\r\n dtoList.push({\r\n name: key,\r\n value: headers.getAll(key)\r\n });\r\n }\r\n return dtoList;\r\n }\r\n\r\n /**\r\n * @private\r\n * Converts a list of `AtxHeaderDto` objects into a `HttpHeaders` instance.\r\n * \r\n * @param headersDto The list of `AtxHeaderDto` objects to convert.\r\n * @returns A new `HttpHeaders` instance.\r\n */\r\n public static dtoToHeaders(headersDto: AtxHeaderDto[]): HttpHeaders {\r\n let headers: HttpHeaders = new HttpHeaders();\r\n let cursor: number = headersDto.length - 1;\r\n for(; cursor >= 0; cursor--) {\r\n const entry: AtxHeaderDto = headersDto[cursor];\r\n const value: string[] | null = entry.value;\r\n if (value) headers = headers.append(entry.name, value);\r\n \r\n }\r\n return headers;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * A utility class that unserialize the `FormData` objects.\r\n */\r\nexport class FormDataSerializer {\r\n\r\n /**\r\n * @private\r\n * Unserializes the specified `FormData` objects.\r\n * \r\n * @param data The string to turn into a `FormData` object.\r\n * @returns A `FormData` object, or null whether the `data` string is not a Array string.\r\n */\r\n public static unserialize(data: string): FormData | null {\r\n const result: FormData = new FormData();\r\n const arr: any[] = JSON.parse(data);\r\n if (!Array.isArray(arr)) return null;\r\n let cursor: number = arr.length - 1;\r\n for(; cursor >= 0; cursor--) {\r\n const entry: string[] = arr[cursor];\r\n result.append(entry[0], entry[1]);\r\n }\r\n return result;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ConsoleBodyType } from \"../console-body-type\";\r\nimport { FormDataSerializer } from \"./form-data-serializer\";\r\n\r\n/**\r\n * @private\r\n * A utility class that serialize and unserialize the objects rendered into the monitoring console.\r\n */\r\nexport class BodySerializer {\r\n\r\n /**\r\n * @private\r\n * Serializes the specified object depending on the `type` parameter.\r\n * \r\n * @param data The object to serialize.\r\n * @param type The type of the object to serialize.\r\n * @returns A string, or `null` whether the object type is not supported.\r\n */\r\n public static serialize(data: any, type: ConsoleBodyType): string | null {\r\n if (type === ConsoleBodyType.TEXT) return data;\r\n if (type === ConsoleBodyType.JSON) return JSON.stringify(data);\r\n if (type === ConsoleBodyType.BLOB) return null;\r\n if (type === ConsoleBodyType.FORM_DATA) return JSON.stringify(Array.from(data));\r\n if (type === ConsoleBodyType.ARRAY_BUFFER) null;\r\n return null;\r\n }\r\n \r\n /**\r\n * @private\r\n * Unserializes the specified string depending on the `type` parameter.\r\n * \r\n * @param data The string to unserialize.\r\n * @param type The type of the object to unserialize.\r\n * @returns An object, or `null` whether the object type is not supported.\r\n */\r\n public static unserialize(data: any, type: ConsoleBodyType): any {\r\n if (type === ConsoleBodyType.TEXT) return data;\r\n if (type === ConsoleBodyType.JSON) return JSON.parse(data);\r\n if (type === ConsoleBodyType.BLOB) return null;\r\n if (type === ConsoleBodyType.FORM_DATA) return FormDataSerializer.unserialize(data);\r\n if (type === ConsoleBodyType.ARRAY_BUFFER) null;\r\n return null;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ConsoleBodyType } from \"../console-body-type\";\r\nimport { DataUtil } from \"../data.util\";\r\nimport { AtxBodyDto } from \"../../model/business/io/atx-body-dto\";\r\nimport { BodySerializer } from \"./body-serializer\";\r\n\r\n/**\r\n * @private\r\n * A utility class that performs conversions between JavaScript objects and `AtxBodyDto` objects.\r\n */\r\nexport class BodyConverter {\r\n\r\n /**\r\n * @private\r\n * Turns a JavaScript object into an `AtxBodyDto` object and returns the result of the conversion.\r\n * \r\n * @param body The JavaScript object to convert.\r\n * @returns An `AtxBodyDto` object.\r\n */\r\n public static bodyToDto(body: any): AtxBodyDto {\r\n const bodyType: ConsoleBodyType = DataUtil.getBodyType(body);\r\n return {\r\n type: bodyType,\r\n data: BodySerializer.serialize(body, bodyType)\r\n };\r\n }\r\n\r\n /**\r\n * @private\r\n * Turns an `AtxBodyDto` object into a JavaScript object and returns the result of the conversion.\r\n * \r\n * @param dto The `AtxBodyDto` object to convert.\r\n * @returns A JavaScript object.\r\n */\r\n public static dtoToBody(dto: AtxBodyDto): any {\r\n return BodySerializer.unserialize(dto.data, dto.type);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpContext, HttpParams, HttpParamsOptions, HttpRequest } from \"@angular/common/http\";\r\nimport { AtxHttpRequestDto } from \"../../model/business/io/atx-http-request.dto\";\r\nimport { HttpHeadersConverter } from \"./log-headers-converter\";\r\nimport { BodyConverter } from \"./body-converter\";\r\nimport { ATX_IS_IMPORTED_LOG } from \"../../model/business/atx-is-imported-log\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpRequest` instances into `AtxHttpRequestDto` objects.\r\n */\r\nexport class HttpRequestConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpRequest` instance into an `AtxHttpRequestDto` object.\r\n * \r\n * @param request The `HttpRequest` instance to convert.\r\n * @returns A new `AtxHttpRequestDto` object.\r\n */\r\n public static buildRequestDto(request: HttpRequest<any>): AtxHttpRequestDto {\r\n return {\r\n body: BodyConverter.bodyToDto(request.body),\r\n reportProgress: request.reportProgress,\r\n withCredentials: request.withCredentials,\r\n responseType: request.responseType,\r\n method: request.method,\r\n url: request.url,\r\n params: request.params.toString(),\r\n headers: HttpHeadersConverter.headersToDto(request.headers)\r\n }\r\n }\r\n \r\n /**\r\n * @private\r\n * Converts an `AtxHttpRequestDto` object into a `HttpRequest` instance.\r\n * \r\n * @param dto The `AtxHttpRequestDto` object to convert.\r\n * @returns A new `HttpRequest` instance.\r\n */\r\n public static buildHttpRequest(dto: AtxHttpRequestDto): HttpRequest<any> {\r\n const ctx: HttpContext = new HttpContext();\r\n const paramsOpt: HttpParamsOptions = {\r\n fromString: dto.params\r\n };\r\n const init: any = {\r\n headers: HttpHeadersConverter.dtoToHeaders(dto.headers),\r\n reportProgress: dto.reportProgress,\r\n responseType: dto.responseType,\r\n withCredentials: dto.withCredentials,\r\n params: new HttpParams(paramsOpt),\r\n context: ctx\r\n };\r\n const body: any = BodyConverter.dtoToBody(dto.body);\r\n const request: HttpRequest<any> = new HttpRequest<any>(dto.method, dto.url, body, init);\r\n ctx.set(ATX_IS_IMPORTED_LOG, true);\r\n return request;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpResponse } from \"@angular/common/http\";\r\nimport { HttpHeadersConverter } from \"./log-headers-converter\";\r\nimport { AtxHttpResponseDto } from \"../../model/business/io/atx-http-response.dto\";\r\nimport { BodyConverter } from \"./body-converter\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpResponse` instances into `AtxHttpResponseDto` objects.\r\n */\r\nexport class HttpResponseConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpResponse` instance into an `AtxHttpResponseDto` object.\r\n * \r\n * @param response The `HttpResponse` instance to convert.\r\n * @returns A new `AtxHttpResponseDto` object.\r\n */\r\n public static buildResponseDto(response: HttpResponse<any>): AtxHttpResponseDto {\r\n return {\r\n body: BodyConverter.bodyToDto(response.body),\r\n headers: HttpHeadersConverter.headersToDto(response.headers),\r\n status: response.status,\r\n statusText: response.statusText,\r\n url: response.url\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * Converts an `AtxHttpResponseDto` object into a `HttpResponse` instance.\r\n * \r\n * @param dto The `AtxHttpResponseDto` object to convert.\r\n * @returns A new `HttpResponse` instance.\r\n */\r\n public static buildHttpResponse(dto: AtxHttpResponseDto): HttpResponse<any> {\r\n const init: any = {\r\n body: BodyConverter.dtoToBody(dto.body),\r\n headers: HttpHeadersConverter.dtoToHeaders(dto.headers),\r\n status: dto.status,\r\n statusText: dto.statusText,\r\n url: dto.url\r\n };\r\n return new HttpResponse(init);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockLoggingMetadata } from \"../../../../../model\";\r\nimport { AtxHttpLogMetadataDto } from \"../../model/business/io/atx-http-log-metadata.dto\";\r\nimport { RequestMetadataConverter } from \"./request-metadata-converter\";\r\nimport { HttpRequestConverter } from \"./http-request-converter\";\r\nimport { HttpResponseConverter } from \"./http-response-converter\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `HttpMockLoggingMetadata` objects into `AtxHttpLogMetadataDto` objects.\r\n */\r\nexport class LogMetadataConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `HttpMockLoggingMetadata` object into an `AtxHttpLogMetadataDto` object.\r\n * \r\n * @param headers The `HttpMockLoggingMetadata` object to convert.\r\n * @returns A new `AtxHttpLogMetadataDto` object.\r\n */\r\n public static metadataToDto(metadata: HttpMockLoggingMetadata): AtxHttpLogMetadataDto {\r\n return {\r\n request: HttpRequestConverter.buildRequestDto(metadata.request),\r\n response: HttpResponseConverter.buildResponseDto(metadata.response),\r\n requestMetadata: RequestMetadataConverter.requestMetadataToDto(metadata.requestMetadata)\r\n };\r\n }\r\n\r\n /**\r\n * @private\r\n * Converts an `AtxHttpLogMetadataDto` object into a `HttpMockLoggingMetadata` object.\r\n * \r\n * @param headersDto The `AtxHttpLogMetadataDto` objects to convert.\r\n * @returns A new `HttpMockLoggingMetadata` objects.\r\n */\r\n public static dtoToMetadata(dto: AtxHttpLogMetadataDto): HttpMockLoggingMetadata {\r\n return {\r\n request: HttpRequestConverter.buildHttpRequest(dto.request),\r\n response: HttpResponseConverter.buildHttpResponse(dto.response),\r\n requestMetadata: RequestMetadataConverter.dtoToRequestMetadata(dto.requestMetadata)\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The type of parameter objects associated with a HTTP call.\r\n */\r\nexport type HttpMockParameters = { [key: string]: any };\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Uuid } from \"../../../../util\";\r\nimport { HTTP_MOCK_SERVICE, HttpMockConfig, HttpMockService } from \"../../../../model\";\r\n\r\n/**\r\n * The definition function for the `@HttpMock` decorator.\r\n * \r\n * @param config The `HttpMockConfig` object used to initialize the HTTP Mocking Framework.\r\n */\r\nexport const HttpMock: Function = (config: HttpMockConfig): Function => {\r\n return (constructor: any)=> {\r\n const getMockService = (instance: any): HttpMockService | undefined => {\r\n return Object.values(instance).find((v: any)=> {\r\n return (v.hasOwnProperty('type') && v.type === HTTP_MOCK_SERVICE);\r\n }) as any;\r\n };\r\n const ngOnInit = constructor.prototype.ngOnInit;\r\n const ngOnDestroy = constructor.prototype.ngOnDestroy;\r\n const uiid: Uuid = config.id || Uuid.build();\r\n if (!ngOnDestroy) throw new ReferenceError(\"Component must implement the OnDestroy interface.\");\r\n if (!ngOnInit) throw new ReferenceError(\"Component must implement the OnInit interface.\");\r\n if (!config.id) config.id = uiid;\r\n constructor.prototype.ngOnInit = function() {\r\n const mockService: HttpMockService | undefined = getMockService(this);\r\n if (!mockService) throw new ReferenceError(\"No provider found for HttpMockService.\");\r\n mockService.addConfig(config);\r\n ngOnInit.call(this);\r\n };\r\n constructor.prototype.ngOnDestroy = function() {\r\n const mockService: HttpMockService | undefined = getMockService(this);\r\n // An exception is already thrown by the ngOnInit() method when HttpMockService is not provided.\r\n // Following check statement prevents failure during Unit Testing:\r\n if (mockService) mockService.removeConfig(uiid);\r\n ngOnDestroy.call(this);\r\n };\r\n };\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\n\r\n/**\r\n * A statefull builder for creating new `HttpHeaders` instances.\r\n */\r\nexport class HttpHeadersMockBuilder {\r\n\r\n /**\r\n * @private\r\n */\r\n private _headers: HttpHeaders = new HttpHeaders();\r\n\r\n /**\r\n * Sets the `\"Cache-Control\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Cache-Control\"` property of the new `HttpHeaders` instance.\r\n * Default value is `\"no-cache\"`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public cacheControl(value: string = \"no-cache\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Cache-Control\", value);\r\n return this;\r\n }\r\n \r\n /**\r\n * Sets the `\"CContent-Type\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Content-Type\"` property of the new `HttpHeaders` instance.\r\n * Default value is `\"application/json; charset=utf-8\"`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public contentType(value: string = \"application/json; charset=utf-8\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Content-Type\", value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"Priority\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Priority\"` property of the new `HttpHeaders` instance.\r\n * Default value is `\"u=0, i\"`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public priority(value: string = \"u=0, i\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Priority\", value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"User-Agent\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"User-Agent\"` property of the new `HttpHeaders` instance.\r\n * Default value is the navigator user agent.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public userAgent(value: string | null = null): HttpHeadersMockBuilder {\r\n this.setHeader(\"User-Agent\", value || navigator.userAgent);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"Accept-Language\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Accept-Language\"` property of the new `HttpHeaders` instance.\r\n * Default value is the navigator language.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public acceptLanguage(value: string | null = null): HttpHeadersMockBuilder {\r\n this.setHeader(\"Accept-Language\", value || navigator.language);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"Accept\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Accept\"` property of the new `HttpHeaders` instance.\r\n * Default value is `'*\\/*'`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public accept(value: string = \"*/*\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Accept\", value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `\"Accept-Encoding\"` property of the new `HttpHeaders` instance with the specified value.\r\n * \r\n * @param value The value used to set the `\"Accept-Encoding\"` property of the new `HttpHeaders` instance.\r\n * Default value is `\"ngzip, deflate, br, zstd\"`.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public acceptEncoding(value: string = \"gzip, deflate, br, zstd\"): HttpHeadersMockBuilder {\r\n this.setHeader(\"Accept-Encoding\", value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets or modifies a value of the new `HttpHeaders` instance.\r\n *\r\n * @param name The header name.\r\n * @param value The value or values to set or override for the given header.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public set(name: string, value: string | string[]): HttpHeadersMockBuilder {\r\n this.setHeader(name, value);\r\n return this;\r\n }\r\n\r\n /**\r\n * Return a new `HttpHeaders` instance, built from the properties specified with the\r\n * `HttpHeadersMockBuilder` methods.\r\n * \r\n * @returns A new `HttpHeaders` instance.\r\n */\r\n public headers(): HttpHeaders {\r\n return this._headers;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private setHeader(name: string, value: string | string[]): void {\r\n const values: string = Array.isArray(value) ? value.join(\", \") : value;\r\n this._headers = this._headers.set(name, values);\r\n }\r\n}\r\n\r\n/**\r\n * A utility function used to create new \"chainable\" `HttpHeadersMockBuilder` instances.\r\n * \r\n * @returns A new `HttpHeadersMockBuilder` instance;\r\n */\r\nexport const httpHeadersMock:()=> HttpHeadersMockBuilder = ()=> new HttpHeadersMockBuilder();","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { httpHeadersMock } from \"./http-headers-mock.builder\";\r\n\r\n/**\r\n * @private\r\n * Internal reference to a new line character.\r\n */\r\nconst CRLF: string = \"\\r\\n\";\r\n\r\n/**\r\n * @private\r\n * A set of static utilities for manipulating `HttpHeaders` objects.\r\n */\r\nexport class HttpHeadersUtil {\r\n\r\n /**\r\n * @private\r\n * Returns a string representation the the specified `HttpHeaders `object, compatible with the format\r\n * expected by the `XMLHttpRequest.getAllResponseHeaders()` method.\r\n * \r\n * @param headers The `HttpHeaders` object to format.\r\n * \r\n * @returns A string compatible with the format expected by the `XMLHttpRequest.getAllResponseHeaders()` method.\r\n */\r\n public static stringify(headers: HttpHeaders | undefined): string {\r\n let result: string = EMPTY_STRING;\r\n if (!headers) return result;\r\n const keys: string[] = headers.keys();\r\n const last: number = keys.length - 1;\r\n keys.forEach((key: string, index: number)=> {\r\n result += `${key}: ${headers.getAll(key)}${index !== last ? CRLF : EMPTY_STRING}`;\r\n });\r\n return result;\r\n }\r\n \r\n /**\r\n * @private\r\n * Returns a `HttpHeaders` object built from the string returns by the `XMLHttpRequest.getAllResponseHeaders()` method,\r\n * or `null` wheher `XMLHttpRequest.getAllResponseHeaders()` return `null`.\r\n * \r\n * @param value The string to turn into a `HttpHeaders `object.\r\n * \r\n * @returns A `HttpHeaders` object, or `null`.\r\n */\r\n public static encode(value: string | null): HttpHeaders | null {\r\n if (value === null) return null;\r\n return new HttpHeaders(value);\r\n }\r\n \r\n /**\r\n * @private\r\n * Creates the default `HttpHeaders` object for a mocked HTTP request.\r\n * \r\n * @returns The default `HttpHeaders` object for a mocked HTTP request.\r\n */\r\n public static createDefaultRequestHeaders(): HttpHeaders {\r\n // \"Accept\" header is set by Angular framework when missing\r\n return httpHeadersMock().cacheControl()\r\n .acceptEncoding()\r\n .acceptLanguage()\r\n .priority()\r\n .userAgent()\r\n .headers();\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * A convenient constant that represents the maximum value for a delayed HTTP response.\r\n */\r\nexport const HTTP_MOCK_MAX_DELAY: number = 10000;\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * The list of all HTTP status text.\r\n */\r\nexport enum HttpStatusText {\r\n\r\n //https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\r\n // Informational\r\n\r\n /**\r\n * The status text associated with the status code `100`.\r\n */\r\n CONTINUE = \"Continue\",\r\n\r\n /**\r\n * The status text associated with the status code `101`.\r\n */\r\n SWITCHING_PROTOCOLS = \"Switching Protocols\",\r\n\r\n /**\r\n * The status text associated with the status code `102`.\r\n */\r\n PROCESSING = \"Processing\",\r\n \r\n /**\r\n * The status text associated with the status code `103`.\r\n */\r\n EARLY_HINTS = \"Early Hints\",\r\n \r\n // Success\r\n\r\n /**\r\n * The status text associated with the status code `200`.\r\n */\r\n OK = \"OK\",\r\n\r\n /**\r\n * The status text associated with the status code `201`.\r\n */\r\n CREATED = \"Created\",\r\n\r\n /**\r\n * The status text associated with the status code `202`.\r\n */\r\n ACCEPTED = \"Accepted\",\r\n\r\n /**\r\n * The status text associated with the status code `203`.\r\n */\r\n NON_AUTHORITATIVE_INFORMATION = \"Non-authoritative Information\",\r\n\r\n /**\r\n * The status text associated with the status code `204`.\r\n */\r\n NO_CONTENT = \"No Content\",\r\n\r\n /**\r\n * The status text associated with the status code `205`.\r\n */\r\n RESET_CONTENT = \"Reset Content\",\r\n\r\n /**\r\n * The status text associated with the status code `206`.\r\n */\r\n PARTIAL_CONTENT = \"Partial Content\",\r\n\r\n /**\r\n * The status text associated with the status code `207`.\r\n */\r\n MULTI_STATUS = \"Multi-Status\",\r\n\r\n /**\r\n * The status text associated with the status code `208`.\r\n */\r\n ALREADY_REPORTED = \"Already Reported\",\r\n\r\n /**\r\n * The status text associated with the status code `226`.\r\n */\r\n IM_USED = \"IM Used\",\r\n\r\n // Redirection\r\n\r\n /**\r\n * The status text associated with the status code `300`.\r\n */\r\n MULTIPLE_CHOICES = \"Multiple Choices\",\r\n\r\n /**\r\n * The status text associated with the status code `301`.\r\n */\r\n MOVED_PERMANENTLY = \"Moved Permanently\",\r\n\r\n /**\r\n * The status text associated with the status code `302`.\r\n */\r\n FOUND = \"Found\",\r\n\r\n /**\r\n * The status text associated with the status code `303`.\r\n */\r\n SEE_OTHER = \"See Other\",\r\n\r\n /**\r\n * The status text associated with the status code `304`.\r\n */\r\n NOT_MODIFIED = \"Not Modified\",\r\n\r\n /**\r\n * The status text associated with the status code `307`.\r\n */\r\n TEMPORARY_REDIRECT = \"Temporary Redirect\",\r\n\r\n /**\r\n * The status text associated with the status code `308`.\r\n */\r\n PERMANENT_REDIRECT = \"Permanent Redirect\",\r\n\r\n // Client Error\r\n \r\n /**\r\n * The status text associated with the status code `400`.\r\n */\r\n BAD_REQUEST = \"Bad Request\",\r\n\r\n /**\r\n * The status text associated with the status code `401`.\r\n */\r\n UNAUTHORIZED = \"Unauthorized\",\r\n\r\n /**\r\n * The status text associated with the status code `402`.\r\n */\r\n PAYMENT_REQUIRED = \"Payment Required\",\r\n\r\n /**\r\n * The status text associated with the status code `403`.\r\n */\r\n FORBIDDEN = \"Forbidden\",\r\n\r\n /**\r\n * The status text associated with the status code `404`.\r\n */\r\n NOT_FOUND = \"Not Found\",\r\n\r\n /**\r\n * The status text associated with the status code `405`.\r\n */\r\n METHOD_NOT_ALLOWED = \"Method Not Allowed\",\r\n\r\n /**\r\n * The status text associated with the status code `406`.\r\n */\r\n NOT_ACCEPTABLE = \"Not Acceptable\",\r\n\r\n /**\r\n * The status text associated with the status code `407`.\r\n */\r\n PROXY_AUTHENTICATION_REQUIRED = \"Proxy Authentication Required\",\r\n\r\n /**\r\n * The status text associated with the status code `408`.\r\n */\r\n REQUEST_TIMEOUT = \"Request Timeout\",\r\n\r\n /**\r\n * The status text associated with the status code `409`.\r\n */\r\n CONFLICT = \"Conflict\",\r\n\r\n /**\r\n * The status text associated with the status code `410`.\r\n */\r\n GONE = \"Gone\",\r\n\r\n /**\r\n * The status text associated with the status code `411`.\r\n */\r\n LENGTH_REQUIRED = \"Length Required\",\r\n\r\n /**\r\n * The status text associated with the status code `412`.\r\n */\r\n PRECONDITION_FAILED = \"Precondition Failed\",\r\n\r\n /**\r\n * The status text associated with the status code `413`.\r\n */\r\n PAYLOAD_TOO_LARGE = \"Payload Too Large\",\r\n\r\n /**\r\n * The status text associated with the status code `414`.\r\n */\r\n URI_TOO_LONG = \"URI Too Long\",\r\n\r\n /**\r\n * The status text associated with the status code `415`.\r\n */\r\n UNSUPPORTED_MEDIA_TYPE = \"Unsupported Media Type\",\r\n\r\n /**\r\n * The status text associated with the status code `416`.\r\n */\r\n RANGE_NOT_SATISFIABLE = \"Range Not Satisfiable\",\r\n\r\n /**\r\n * The status text associated with the status code `417`.\r\n */\r\n EXPECTATION_FAILED = \"Expectation Failed\",\r\n\r\n /**\r\n * The status text associated with the status code `418`.\r\n */\r\n I_M_A_TEAPOT = \"I'm a teapot\",\r\n\r\n /**\r\n * The status text associated with the status code `421`.\r\n */\r\n MISDIRECTED_REQUEST = \"Misdirected Request\",\r\n\r\n /**\r\n * The status text associated with the status code `422`.\r\n */\r\n UNPROCESSABLE_ENTITY = \"Unprocessable Entity\",\r\n\r\n /**\r\n * The status text associated with the status code `423`.\r\n */\r\n LOCKED = \"Locked\",\r\n\r\n /**\r\n * The status text associated with the status code `424`.\r\n */\r\n FAILED_DEPENDENCY = \"Failed Dependency\",\r\n\r\n /**\r\n * The status text associated with the status code `426`.\r\n */\r\n UPGRADE_REQUIRED = \"Upgrade Required\",\r\n\r\n /**\r\n * The status text associated with the status code `428`.\r\n */\r\n PRECONDITION_REQUIRED = \"Precondition Required\",\r\n\r\n /**\r\n * The status text associated with the status code `429`.\r\n */\r\n TOO_MANY_REQUESTS = \"Too Many Requests\",\r\n\r\n /**\r\n * The status text associated with the status code `431`.\r\n */\r\n REQUEST_HEADER_FIELDS_TOO_LARGE = \"Request Header Fields Too Large\",\r\n\r\n /**\r\n * The status text associated with the status code `451`.\r\n */\r\n UNAVAILABLE_FOR_LEGAL_REASONS = \"Unavailable For Legal Reasons\",\r\n\r\n //Server Error\r\n\r\n /**\r\n * The status text associated with the status code `500`.\r\n */\r\n INTERNAL_SERVER_ERROR = \"Internal Server Error\",\r\n \r\n /**\r\n * The status text associated with the status code `501`.\r\n */\r\n NOT_IMPLEMENTED = \"Not Implemented\",\r\n \r\n /**\r\n * The status text associated with the status code `502`.\r\n */\r\n BAD_GATEWAY = \"Bad Gateway\",\r\n \r\n /**\r\n * The status text associated with the status code `503`.\r\n */\r\n SERVICE_UNAVAILABLE = \"Service Unavailable\",\r\n \r\n /**\r\n * The status text associated with the status code `504`.\r\n */\r\n GATEWAY_TIMEOUT = \"Gateway Timeout\",\r\n \r\n /**\r\n * The status text associated with the status code `505`.\r\n */\r\n HTTP_VERSION_NOT_SUPPORTED = \"HTTP Version Not Supported\",\r\n \r\n /**\r\n * The status text associated with the status code `506`.\r\n */\r\n VARIANT_ALSO_NEGOTIATES = \"Variant Also Negotiates\",\r\n \r\n /**\r\n * The status text associated with the status code `507`.\r\n */\r\n INSUFFICIENT_STORAGE = \"Insufficient Storage\",\r\n \r\n /**\r\n * The status text associated with the status code `508`.\r\n */\r\n LOOP_DETECTED = \"Loop Detected\",\r\n \r\n /**\r\n * The status text associated with the status code `510`.\r\n */\r\n NOT_EXTENDED = \"Not Extended\",\r\n \r\n /**\r\n * The status text associated with the status code `511`.\r\n */\r\n NETWORK_AUTHENTICATION_REQUIRED = \"Network Authentication Required\",\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpStatusCode } from \"@angular/common/http\";\r\nimport { HttpStatusText } from \"./http-status-text.enum\";\r\n\r\n/**\r\n * @private\r\n * A utility class that helps to retreive a status text depending on its status code.\r\n */\r\nexport class HttpStatusTextFinder {\r\n\r\n /**\r\n * @private\r\n * Retreives and return a status text depending on its status code.\r\n * \r\n * @param code The status code for which to find the status text.\r\n * @returns A `HttpStatusText` constant.\r\n */\r\n public static getStatusText(code: HttpStatusCode): HttpStatusText {\r\n if(code === HttpStatusCode.Continue) return HttpStatusText.CONTINUE;\r\n if(code === HttpStatusCode.SwitchingProtocols) return HttpStatusText.SWITCHING_PROTOCOLS;\r\n if(code === HttpStatusCode.Processing) return HttpStatusText.PROCESSING;\r\n if(code === HttpStatusCode.EarlyHints) return HttpStatusText.EARLY_HINTS;\r\n if(code === HttpStatusCode.Ok) return HttpStatusText.OK;\r\n if(code === HttpStatusCode.Created) return HttpStatusText.CREATED;\r\n if(code === HttpStatusCode.Accepted) return HttpStatusText.ACCEPTED;\r\n if(code === HttpStatusCode.NonAuthoritativeInformation) return HttpStatusText.NON_AUTHORITATIVE_INFORMATION;\r\n if(code === HttpStatusCode.NoContent) return HttpStatusText.NO_CONTENT;\r\n if(code === HttpStatusCode.ResetContent) return HttpStatusText.RESET_CONTENT;\r\n if(code === HttpStatusCode.PartialContent) return HttpStatusText.PARTIAL_CONTENT;\r\n if(code === HttpStatusCode.MultiStatus) return HttpStatusText.MULTI_STATUS;\r\n if(code === HttpStatusCode.AlreadyReported) return HttpStatusText.ALREADY_REPORTED;\r\n if(code === HttpStatusCode.ImUsed) return HttpStatusText.IM_USED;\r\n if(code === HttpStatusCode.MultipleChoices) return HttpStatusText.MULTIPLE_CHOICES;\r\n if(code === HttpStatusCode.MovedPermanently) return HttpStatusText.MOVED_PERMANENTLY;\r\n if(code === HttpStatusCode.Found) return HttpStatusText.FOUND;\r\n if(code === HttpStatusCode.SeeOther) return HttpStatusText.SEE_OTHER;\r\n if(code === HttpStatusCode.NotModified) return HttpStatusText.NOT_MODIFIED;\r\n if(code === HttpStatusCode.TemporaryRedirect) return HttpStatusText.TEMPORARY_REDIRECT;\r\n if(code === HttpStatusCode.PermanentRedirect) return HttpStatusText.PERMANENT_REDIRECT;\r\n if(code === HttpStatusCode.BadRequest) return HttpStatusText.BAD_REQUEST;\r\n if(code === HttpStatusCode.Unauthorized) return HttpStatusText.UNAUTHORIZED;\r\n if(code === HttpStatusCode.PaymentRequired) return HttpStatusText.PAYMENT_REQUIRED;\r\n if(code === HttpStatusCode.Forbidden) return HttpStatusText.FORBIDDEN;\r\n if(code === HttpStatusCode.NotFound) return HttpStatusText.NOT_FOUND;\r\n if(code === HttpStatusCode.MethodNotAllowed) return HttpStatusText.METHOD_NOT_ALLOWED;\r\n if(code === HttpStatusCode.NotAcceptable) return HttpStatusText.NOT_ACCEPTABLE;\r\n if(code === HttpStatusCode.ProxyAuthenticationRequired) return HttpStatusText.PROXY_AUTHENTICATION_REQUIRED;\r\n if(code === HttpStatusCode.RequestTimeout) return HttpStatusText.REQUEST_TIMEOUT;\r\n if(code === HttpStatusCode.Conflict) return HttpStatusText.CONFLICT;\r\n if(code === HttpStatusCode.Gone) return HttpStatusText.GONE;\r\n if(code === HttpStatusCode.LengthRequired) return HttpStatusText.LENGTH_REQUIRED;\r\n if(code === HttpStatusCode.PreconditionFailed) return HttpStatusText.PRECONDITION_FAILED;\r\n if(code === HttpStatusCode.PayloadTooLarge) return HttpStatusText.PAYLOAD_TOO_LARGE;\r\n if(code === HttpStatusCode.UriTooLong) return HttpStatusText.URI_TOO_LONG;\r\n if(code === HttpStatusCode.UnsupportedMediaType) return HttpStatusText.UNSUPPORTED_MEDIA_TYPE;\r\n if(code === HttpStatusCode.RangeNotSatisfiable) return HttpStatusText.RANGE_NOT_SATISFIABLE;\r\n if(code === HttpStatusCode.ExpectationFailed) return HttpStatusText.EXPECTATION_FAILED;\r\n if(code === HttpStatusCode.ImATeapot) return HttpStatusText.I_M_A_TEAPOT;\r\n if(code === HttpStatusCode.MisdirectedRequest) return HttpStatusText.MISDIRECTED_REQUEST;\r\n if(code === HttpStatusCode.UnprocessableEntity) return HttpStatusText.UNPROCESSABLE_ENTITY;\r\n if(code === HttpStatusCode.Locked) return HttpStatusText.LOCKED;\r\n if(code === HttpStatusCode.FailedDependency) return HttpStatusText.FAILED_DEPENDENCY;\r\n if(code === HttpStatusCode.UpgradeRequired) return HttpStatusText.UPGRADE_REQUIRED;\r\n if(code === HttpStatusCode.PreconditionRequired) return HttpStatusText.PRECONDITION_REQUIRED;\r\n if(code === HttpStatusCode.TooManyRequests) return HttpStatusText.TOO_MANY_REQUESTS;\r\n if(code === HttpStatusCode.RequestHeaderFieldsTooLarge) return HttpStatusText.REQUEST_HEADER_FIELDS_TOO_LARGE;\r\n if(code === HttpStatusCode.UnavailableForLegalReasons) return HttpStatusText.UNAVAILABLE_FOR_LEGAL_REASONS;\r\n if(code === HttpStatusCode.InternalServerError) return HttpStatusText.INTERNAL_SERVER_ERROR;\r\n if(code === HttpStatusCode.NotImplemented) return HttpStatusText.NOT_IMPLEMENTED;\r\n if(code === HttpStatusCode.BadGateway) return HttpStatusText.BAD_GATEWAY;\r\n if(code === HttpStatusCode.ServiceUnavailable) return HttpStatusText.SERVICE_UNAVAILABLE;\r\n if(code === HttpStatusCode.GatewayTimeout) return HttpStatusText.GATEWAY_TIMEOUT;\r\n if(code === HttpStatusCode.HttpVersionNotSupported) return HttpStatusText.HTTP_VERSION_NOT_SUPPORTED;\r\n if(code === HttpStatusCode.VariantAlsoNegotiates) return HttpStatusText.VARIANT_ALSO_NEGOTIATES;\r\n if(code === HttpStatusCode.InsufficientStorage) return HttpStatusText.INSUFFICIENT_STORAGE;\r\n if(code === HttpStatusCode.LoopDetected) return HttpStatusText.LOOP_DETECTED;\r\n if(code === HttpStatusCode.NotExtended) return HttpStatusText.NOT_EXTENDED;\r\n if(code === HttpStatusCode.NetworkAuthenticationRequired) return HttpStatusText.NETWORK_AUTHENTICATION_REQUIRED;\r\n return HttpStatusText.INTERNAL_SERVER_ERROR;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders, HttpStatusCode } from \"@angular/common/http\";\r\nimport { HttpMockError, HttpResponseMock } from \"../../../../model\";\r\nimport { HttpHeadersUtil } from \"./http-headers.util\";\r\nimport { HTTP_MOCK_MAX_DELAY } from \"./http-mock-max-delay\";\r\nimport { HttpStatusTextFinder } from \"./http-status-text-finder\";\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\n\r\n/**\r\n * A statefull builder for creating new `HttpResponseMock` instances.\r\n */\r\nexport class HttpResponseMockBuilder {\r\n\r\n /**\r\n * @private\r\n */\r\n private _response: HttpResponseMock = {\r\n url: null,\r\n body: null,\r\n status: HttpStatusCode.Ok,\r\n statusText: EMPTY_STRING,\r\n error: null,\r\n delay: 0\r\n };\r\n\r\n /**\r\n * Sets the body property of the new `HttpResponseMock` instance with the specified `body` value.\r\n * \r\n * @param body The value used to set the body property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public body(body: any): HttpResponseMockBuilder {\r\n this._response.body = body;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the headers property of the new `HttpResponseMock` instance with the specified `headers` value.\r\n * \r\n * @param headers The value used to set the `headers` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public headers(headers: HttpHeaders): HttpResponseMockBuilder {\r\n this._response.headers = headers;\r\n return this;\r\n }\r\n\r\n /**\r\n * Add the list of HTTP headers generated by the `HttpHeadersUtil.createDefaultRequestHeaders()`\r\n * to the mock response.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public defaultHeaders(): HttpResponseMockBuilder {\r\n const defaultHeaders: HttpHeaders = HttpHeadersUtil.createDefaultRequestHeaders();\r\n let headers: HttpHeaders | undefined = this._response.headers;\r\n if (headers) {\r\n const keys: string[] = defaultHeaders.keys();\r\n keys.forEach(key=> headers?.append(key, defaultHeaders.get(key) as any))\r\n } else headers = defaultHeaders;\r\n this._response.headers = headers;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `status` property of the new `HttpResponseMock` instance with the specified `status` value.\r\n * \r\n * @param status The value used to set the `status` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public status(status: number): HttpResponseMockBuilder {\r\n this._response.status = status;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `url` property of the new `HttpResponseMock` instance with the specified `url` value.\r\n * \r\n * @param url The value used to set the `url` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public url(url: string | null): HttpResponseMockBuilder {\r\n this._response.url = url;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the `delay` property of the new `HttpResponseMock` instance with the specified `timer` duration.\r\n * Maximum value is `10000` miliseconds (10 seconds).\r\n * \r\n * @param timer The value used to set the `delay` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public delay(timer?: number): HttpResponseMockBuilder;\r\n \r\n /**\r\n * Sets the `delay` property of the new `HttpResponseMock` instance with the specified `timer` duration.\r\n * Maximum value is `10000` miliseconds (10 seconds).\r\n * \r\n * @param timer The value used to set the `delay` property of the new `HttpResponseMock` instance.\r\n * \r\n * @returns A reference to this `HttpResponseMockBuilder` instance.\r\n */\r\n public delay(min?: number, max?: number): HttpResponseMockBuilder;\r\n\r\n /**\r\n * @private\r\n * Overload implementation \r\n */\r\n public delay(...arg: any): HttpResponseMockBuilder {\r\n if (arg.length <= 1) {\r\n let timer: number = arg[0] || NaN;\r\n if (isNaN(timer)) {\r\n this._response.delay = HTTP_MOCK_MAX_DELAY - Math.random() * HTTP_MOCK_MAX_DELAY;\r\n return this;\r\n }\r\n if (timer > HTTP_MOCK_MAX_DELAY) {\r\n this._response.delay = HTTP_MOCK_MAX_DELAY;\r\n return this;\r\n }\r\n if (timer < 0) timer = 0;\r\n this._response.delay = timer;\r\n return this;\r\n }\r\n let min: number = arg[0], max: number = arg[1];\r\n if (max > HTTP_MOCK_MAX_DELAY) max = HTTP_MOCK_MAX_DELAY;\r\n if (min < 0 || min > max) min = 0;\r\n this._response.delay = Math.floor(Math.random() * (max - min) + min);\r\n return this;\r\n }\r\n\r\n /**\r\n * Returns a new `HttpResponseMock` instance, built from the properties specified with the\r\n * `HttpResponseMockBuilder` methods.\r\n * \r\n * @param error An optional value used to set the `error` property of the new `HttpResponseMock` instance.\r\n * The `error` parameter values take precedence over all other properties of the `HttpResponseMock`\r\n * instance.\r\n * @returns A new `HttpResponseMock` instance.\r\n */\r\n public response(error: HttpMockError | null = null): HttpResponseMock {\r\n this._response.error = error;\r\n this._response.statusText = HttpStatusTextFinder.getStatusText(this._response.status);\r\n return this._response;\r\n }\r\n}\r\n\r\n/**\r\n * A utility function used to create new \"chainable\" `HttpResponseMockBuilder` instances.\r\n * \r\n * @returns A new `HttpResponseMockBuilder` instance.\r\n */\r\nexport const httpResponseMock:()=> HttpResponseMockBuilder = ()=> new HttpResponseMockBuilder();","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the possible values for the `responseType` property of the\r\n * `FetchClientBuilder.buildFetchClient()` method.\r\n */\r\nexport enum FetchClientResponseType {\r\n\r\n /**\r\n * Allows to return the response as a promise that resolves with an `ArrayBuffer`.\r\n */\r\n ARRAY_BUFFER = \"arrayBuffer\",\r\n \r\n /**\r\n * Allows to return the response as a promise that resolves with a `Blob`.\r\n */\r\n BLOB = \"blob\",\r\n\r\n /**\r\n * Allows to return the response as a promise that resolves with a `FormData` object.\r\n */\r\n FORM_DATA = \"formData\",\r\n\r\n /**\r\n * Allows to return the response as a promise which resolves with the result of parsing the body text as JSON.\r\n */\r\n JSON = \"json\",\r\n \r\n /**\r\n * Allows to return the response as a promise that resolves with a `String`.\r\n * The response is always decoded using UTF-8.\r\n */\r\n TEXT = \"text\",\r\n \r\n /**\r\n * Allows to return the response as a promise that resolves with a `Response` object.\r\n */\r\n RESPONSE = \"response\"\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { FetchClient } from \"../../../../model\";\r\nimport { from } from \"rxjs\";\r\nimport { FetchClientResponseType } from \"./fetch-client-response-type.enum\";\r\n\r\n/**\r\n * A static utility class for building `FetchClient` objects.\r\n */\r\nexport class FetchClientBuilder {\r\n\r\n /**\r\n * Builds and returns a new `FetchClient` object.\r\n * \r\n * @param input The definition of the resource to fetch.\r\n * @param init The object containing options to configure the request.\r\n * @param responseType Specifies the type of response for the resource to fetch.\r\n * \r\n * @returns A new `FetchClient` object.\r\n */\r\n public static buildFetchClient(input: RequestInfo | URL, init: RequestInit | null = null, responseType: FetchClientResponseType = FetchClientResponseType.JSON): FetchClient {\r\n return from(fetch(input, init || undefined).then((response: Response) => {\r\n const rspType: FetchClientResponseType = responseType;\r\n if (response.ok) return rspType !== FetchClientResponseType.RESPONSE ? FetchClientBuilder.buildResponseStrategy(response, rspType) : response;\r\n throw new HttpErrorResponse({\r\n status: response.status,\r\n statusText: response.statusText\r\n });\r\n }));\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private static buildResponseStrategy(response: Response, responseType: FetchClientResponseType): Promise<any>{\r\n if (responseType === FetchClientResponseType.JSON) return response.json();\r\n if (responseType === FetchClientResponseType.BLOB) return response.blob();\r\n if (responseType === FetchClientResponseType.FORM_DATA) return response.formData();\r\n if (responseType === FetchClientResponseType.ARRAY_BUFFER) return response.arrayBuffer();\r\n if (responseType === FetchClientResponseType.TEXT) return response.text();\r\n return response.json();\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n * A utility class used by delegate `XhrProxy` instances to dispatch `ProgressEvent`\r\n * instances.\r\n * \r\n * This class is not exposed.\r\n */\r\nexport class ProgressEventMock extends ProgressEvent {\r\n \r\n /**\r\n * @private\r\n */\r\n private _total: number = NaN;\r\n\r\n /**\r\n * A 64-bit unsigned integer indicating the size, in bytes, of the data already\r\n * transmitted or processed. \r\n */\r\n override set total(value: number) {\r\n this._total = value;\r\n }\r\n override get total(): number {\r\n return this._total;\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private _loaded: number = 0;\r\n\r\n /**\r\n * A 64-bit unsigned integer indicating the total size, in bytes, of the data being\r\n * transmitted or processed. \r\n */\r\n override set loaded(value: number) {\r\n this._loaded = value;\r\n }\r\n override get loaded(): number {\r\n return this._loaded;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n *\r\n * This source code is derived from the following original source code:\r\n * - https://github.com/benlesh/event-target-polyfill\r\n * - Copyright (c) 2020 Ben Lesh\r\n * \r\n * Use of the original source code is governed by an MIT-style license \r\n * that can be found in the LICENSE file at\r\n * https://github.com/benlesh/event-target-polyfill/blob/master/LICENSE\r\n */\r\n\r\nimport { FUNCTION } from \"../../../../util\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst ADD: string = \"addEventListener\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst REMOVE: string = \"removeEventListener\";\r\n\r\n/**\r\n * @private\r\n * A utility class the provides an implementation for the `EventTarget` interface.\r\n * This class is used internally by the framework; please do not expose it.\r\n * \r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\r\n */\r\nexport class EventTargetImpl implements EventTarget {\r\n\r\n /**\r\n * @private\r\n */\r\n private _listenerList: Map<string, any>;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor() {\r\n this._listenerList = new Map<string, any>();\r\n }\r\n\r\n /**\r\n * @private\r\n * Sets up a function that will be called whenever the specified event is delivered to the target.\r\n * \r\n * @param type a case-sensitive string representing the event type to listen for.\r\n * @param listener the object that receives a notification (an object that implements the\r\n * `Event` interface) when an event of the specified type occurs. \r\n * @param options an object that specifies characteristics about the event listener.\r\n * \r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n */\r\n public addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions | undefined): void {\r\n this.checkArgLength(arguments.length, ADD);\r\n const ll: Map<string, any> = this._listenerList;\r\n if (!ll.has(type)) ll.set(type, new Map());\r\n const listenersForType: Map<any, any> = ll.get(type);\r\n if (!listenersForType.has(listener)) {\r\n // Any given listener is only registered once\r\n listenersForType.set(listener, options);\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * Removes an event listener previously registered with `EventTarget.addEventListener()` from the target. \r\n * \r\n * @param type a case-sensitive which specifies the type of event for which to remove an event listener.\r\n * @param listener the event listener function of the event handler to remove from the event target.\r\n * @param options An options object that specifies characteristics about the event listener.\r\n * \r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\r\n */\r\n public removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions | undefined): void {\r\n this.checkArgLength(arguments.length, REMOVE);\r\n const ll: Map<string, any> = this._listenerList;\r\n if (ll.has(type)) {\r\n const listenersForType: Map<any, any> = ll.get(type);\r\n if (listenersForType.has(listener)) listenersForType.delete(listener);\r\n if (listenersForType.size === 0) ll.delete(type);\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * Sends an `Event` to this to the `Event` object, (synchronously) invoking the affected event listeners\r\n * in the appropriate order.\r\n *\r\n * @param event the `Event object to dispatch. Its Event.target property will be set to the current EventTarget.\r\n * @returns true since there are no cancellable events on a base `EventTarget`.\r\n * \r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent\r\n */\r\n public dispatchEvent(event: Event): boolean {\r\n if (!(event instanceof Event)) {\r\n throw new TypeError(\r\n \"Failed to execute 'dispatchEvent' on 'EventTarget': parameter 1 is not of type 'Event'.\"\r\n );\r\n }\r\n const type: string = event.type;\r\n const ll: Map<string, any> = this._listenerList;\r\n const listenersForType = ll.get(type);\r\n if (!listenersForType) return true;\r\n for (const listnerEntry of listenersForType.entries()) {\r\n const listener: any = listnerEntry[0];\r\n const options: any = listnerEntry[1];\r\n // Listener functions must be executed with the EventTarget as the `this` context.\r\n if (typeof listener === FUNCTION) listener.call(this, event);\r\n // Listener objects have their handleEvent method called, if they have one\r\n else if (listener && typeof listener.handleEvent === FUNCTION) listener.handleEvent(event);\r\n if (options && options.once) listenersForType.delete(listener);\r\n if (listenersForType.size === 0) ll.delete(type);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Checks whether the `EventTarget` object has any listeners registered for a specific type of event.\r\n * \r\n * @param type The type of event.\r\n * \r\n * @return A value of `true` if a listener of the specified type is registered; `false` otherwise.\r\n */\r\n public hasEventListener(type: string): boolean {\r\n return this._listenerList.has(type);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private checkArgLength(argLen: number, method: string): void {\r\n if (argLen < 2) {\r\n throw new TypeError(\r\n `TypeError: Failed to execute '${method}' on 'EventTarget': 2 arguments required, but ${argLen === 1 ? 'only 1' : '0'} present.`\r\n );\r\n }\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventTargetImpl } from \"../event/event-target.impl\";\r\n\r\n/**\r\n * @private\r\n * \r\n * Elemenets marked as \"Useless\" are never invoked by the Angular framework.\r\n */\r\nexport class XhrBase extends EventTargetImpl {\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly UNSENT = 0;\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly OPENED = 1;\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly HEADERS_RECEIVED = 2;\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly LOADING = 3;\r\n \r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n readonly DONE = 4;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n get responseXML(): Document | null {\r\n return null;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n withCredentials: boolean = false;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n timeout!: number;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onabort: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onerror: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onload: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onloadend: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onloadstart: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onprogress: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n onreadystatechange: ((this: XMLHttpRequest, ev: Event) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n ontimeout: ((this: XMLHttpRequest, ev: ProgressEvent<EventTarget>) => any) | null = null;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n overrideMimeType(mime: string): void {}\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API - Useless\r\n */\r\n getResponseHeader(name: string): string | null { return null }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { HttpMockRequestMetadata, HttpResponseMock } from \"../../../../model\";\r\nimport { DataStorage } from \"../core/data-storage\";\r\n\r\n/**\r\n * @private\r\n * A static utility class for building `DataStorage` objects.\r\n */\r\nexport class DataStorageBuilder {\r\n\r\n /**\r\n * @private\r\n * Builds and returns a new `DataStorage` objects.\r\n * \r\n * @param httpResponse The `HttpResponseMock` to be stored by the framework.\r\n * @param data The data of the HTTP response to be stored by the framework.\r\n * @param metadata The metadata of the HTTP mock request to be stored by the framework.\r\n * \r\n * @returns A new `DataStorage` object.\r\n */\r\n public static buildDataStorage(httpResponse: HttpResponseMock, data: any, metadata: HttpMockRequestMetadata): DataStorage {\r\n // TODO: add support for different data types (string, Blob, etc.)\r\n const stringifiedData: string = data ? JSON.stringify(data) : EMPTY_STRING;\r\n return {\r\n httpResponse: httpResponse,\r\n loaded: 0,\r\n total: data ? new Blob([stringifiedData]).size : 0,\r\n data: data,\r\n stringifiedData: stringifiedData,\r\n requestMetadata: metadata\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpRequest, HttpResponse } from \"@angular/common/http\";\r\nimport { XhrProxy, HttpMockLoggingMetadata, HttpMockRequestMetadata } from \"../../../../model\";\r\nimport { HttpHeadersUtil } from \"../util/http-headers.util\";\r\n\r\n/**\r\n * @private\r\n * A static builder for creating `HttpMockLoggingMetadata` objects.\r\n */\r\nexport class HttpMockLoggingMetadataBuilder {\r\n\r\n /**\r\n * @private\r\n * Creates and returns a new `HttpMockLoggingMetadata` object.\r\n */\r\n public static build(xhr: XhrProxy, request: HttpRequest<any>, requestMetadata: HttpMockRequestMetadata): HttpMockLoggingMetadata {\r\n const responseInit: any = {\r\n body: xhr.response,\r\n status: xhr.status,\r\n statusText: xhr.statusText,\r\n url: xhr.responseURL,\r\n headers: HttpHeadersUtil.encode(xhr.getAllResponseHeaders())\r\n };\r\n const response: HttpResponse<any> = new HttpResponse(responseInit);\r\n return {\r\n request: request,\r\n response: response,\r\n requestMetadata: requestMetadata\r\n };\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ResponseDelay } from \"../core/response-delay\";\r\nimport { HTTP_MOCK_MAX_DELAY } from \"./http-mock-max-delay\";\r\n\r\n/**\r\n * @private\r\n * A utility for managing HTTP responses delay.\r\n */\r\nexport class HttpMockResponseDelayUtil {\r\n\r\n /**\r\n * @private\r\n * A utility function that return a `ResponseDelay` object, depending on the timer parameters.\r\n * \r\n * @param timer The seed value used to create the `ResponseDelay` object.\r\n * @returns A `ResponseDelay` object.\r\n */\r\n public static getResponseDelay(timer: number): ResponseDelay {\r\n let duration: number = timer;\r\n if (timer < 0) duration = 0;\r\n if (timer > HTTP_MOCK_MAX_DELAY) duration = HTTP_MOCK_MAX_DELAY;\r\n return {\r\n stalled: Math.random() * duration,\r\n duration: duration\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpHeaders, HttpParams, HttpRequest, HttpStatusCode } from \"@angular/common/http\";\r\nimport { XhrProxy, HttpResponseMock, HttpMethodMock, HttpMockError, HttpMockLoggingService, HttpMockRequestMetadata, HttpMockLoggingMetadata, HttpMockLoggingPrefetchMetadata } from \"../../../../model\";\r\nimport { ProgressEventMock } from \"../event/progress-event-mock\";\r\nimport { EMPTY_STRING, Uuid } from \"../../../../util\";\r\nimport { XhrBase } from \"./xhr-base\";\r\nimport { HttpHeadersUtil } from \"../util/http-headers.util\";\r\nimport { RouteMockConfig } from \"../config/route-mock-config\";\r\nimport { Observable, Subscription, of } from \"rxjs\";\r\nimport { DataStorage } from \"../core/data-storage\";\r\nimport { DataStorageBuilder } from \"../util/data-storage.builder\";\r\nimport { HttpMockLoggingMetadataBuilder } from \"../logging/http-mock-logging-metadata.builder\";\r\nimport { HttpMockResponseDelayUtil } from \"../util/http-mock-response-delay.util\";\r\nimport { ResponseDelay } from \"../core/response-delay\";\r\n\r\n/**\r\n * @private\r\n * Intenal \"onreadystatechange\" event.\r\n */\r\nconst READY_STATE_CHANGE_EVENT: Event = new Event(\"onreadystatechange\");\r\n\r\n/**\r\n * @private\r\n */\r\nconst EVT_PROPS_CONFIG: any = { writable: false, value: this };\r\n\r\n/**\r\n * @private\r\n * A utility class used as delegate of `XMLHttpRequest` functionalities when\r\n * a HTTP request is intercepted by the Mocking Framework .\r\n */\r\nexport class DelegateXhr extends XhrBase implements XhrProxy {\r\n \r\n /**\r\n * @private\r\n * Indicates whether the progressive download is activated, or not.\r\n */\r\n private _progressiveDownload: boolean = false;\r\n\r\n /**\r\n * @private\r\n * The config for the intercepted route.\r\n */\r\n private _routeConfig: RouteMockConfig;\r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for HTTP response `data`.\r\n */\r\n private _dataStorage: DataStorage = null as any; \r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `method`.\r\n */\r\n private _method: unknown; \r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request URL.\r\n */\r\n private _url: unknown; \r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `readyState`.\r\n */\r\n private _readyState: number = this.UNSENT;\r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `headers`.\r\n */\r\n private _requestHeaders: HttpHeaders = null as any;\r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `status`.\r\n */\r\n private _status: number = 0;\r\n\r\n /**\r\n * @private\r\n * \r\n * Internal storage for the HTTP request `statusText`.\r\n */\r\n private _statusText: string = EMPTY_STRING;\r\n\r\n /**\r\n * @private\r\n */\r\n private _loadSubscription: Subscription | null = null;\r\n\r\n /**\r\n * Returns the response body content.\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/response\r\n */\r\n get response(): any {\r\n return this._dataStorage?.data || null;\r\n }\r\n\r\n /**\r\n * Returns the numerical HTTP status code of the `XMLHttpRequest` response.\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/status\r\n */\r\n get status(): number {\r\n return this._status;\r\n }\r\n\r\n /**\r\n * Returns a string containing the response status message as returned by the HTTP server.\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/statusText\r\n */\r\n get statusText(): string {\r\n return this._statusText;\r\n }\r\n\r\n /**\r\n * Returns the state the `XMLHttpRequest` client is in.\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/readyState\r\n */\r\n get readyState(): number {\r\n return this._readyState;\r\n }\r\n\r\n /**\r\n * Returns the serialized URL of the response or the empty string if the URL is `null`. \r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/responseURL\r\n */\r\n get responseURL(): string {\r\n return this._url as string;\r\n }\r\n\r\n /**\r\n * Returns the text received from a server following a request being sent.\r\n *\r\n * Throws an `InvalidStateError` DOMException if responseType is not the empty string or \"text\".\r\n *\r\n * @see https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/responseText\r\n */\r\n get responseText(): string {\r\n return this._dataStorage?.stringifiedData || EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Returns an `XMLHttpRequestUpload` object that can be observed to monitor an upload progress. \r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/upload\r\n */\r\n get upload(): XMLHttpRequestUpload {\r\n return null as any;\r\n }\r\n \r\n /**\r\n * Returns an an enumerated string value specifying the type of data contained in the response. \r\n *\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType\r\n */\r\n responseType: XMLHttpRequestResponseType = EMPTY_STRING as any;\r\n\r\n /**\r\n * Initializes a newly-created request, or re-initializes an existing one.\r\n * \r\n * @param method The HTTP request method to use, such as `\"GET\"`, `\"POST\"`, `\"PUT\"`, `\"DELETE\"`,\r\n * etc. Ignored for non-HTTP(S) URLs.\r\n * @param url A string or any other object with a stringifier — including a URL object —\r\n * that provides the URL of the resource to send the request to.\r\n */\r\n open(method: string, url: string | URL): void;\r\n /**\r\n * @private\r\n */\r\n open(method: string, url: string | URL, async: boolean, username?: string | null | undefined, password?: string | null | undefined): void;\r\n /**\r\n * @private\r\n */\r\n open(method: unknown, url: unknown, async?: unknown, username?: unknown, password?: unknown): void {\r\n this._method = method;\r\n this._url = url;\r\n this.setReadyState(this.OPENED);\r\n }\r\n\r\n /**\r\n * Aborts the request if it has already been sent. When a request is aborted, its `readyState`\r\n * is changed to `XMLHttpRequest.UNSENT` and the request status code is set to `0`.\r\n */\r\n abort(): void {\r\n this._readyState = this.UNSENT;\r\n this._status = 0;\r\n this.eventDispatch(\"abort\");\r\n }\r\n\r\n /**\r\n * Returns all the response headers, separated by CRLF, as a string, or returns `null`\r\n * if no response has been received.\r\n * \r\n * @returns All the response headers, separated by CRLF, as a string, or returns `null`\r\n * if no response has been received.\r\n */\r\n getAllResponseHeaders(): any {\r\n if (this._readyState < this.HEADERS_RECEIVED) return null;\r\n const respHeaders: HttpHeaders | undefined = this._dataStorage?.httpResponse.headers;\r\n if (respHeaders) return HttpHeadersUtil.stringify(respHeaders);\r\n return null;\r\n }\r\n\r\n /**\r\n * Sends the request to the server.\r\n * \r\n * @param body A body of data to be sent in the XHR request.\r\n */\r\n send(body?: Document | XMLHttpRequestBodyInit | null | undefined): void {\r\n const start: number = this.now();\r\n const request: HttpRequest<any> = this.buildHttpRequest(body);\r\n const rc: RouteMockConfig = this._routeConfig;\r\n const httpResponseMock: HttpResponseMock = (rc.methodConfig as any).data(request, rc.parameters);\r\n const responseDelay: ResponseDelay = HttpMockResponseDelayUtil.getResponseDelay(httpResponseMock.delay || 0);\r\n const timer: number = responseDelay.duration;\r\n const requestMetadata: HttpMockRequestMetadata = {\r\n start: start,\r\n stalled: responseDelay.stalled,\r\n duration: timer,\r\n url: new URL(this._url as any),\r\n id: Uuid.build()\r\n };\r\n const prefetchMetadata: HttpMockLoggingPrefetchMetadata = {\r\n request: request,\r\n requestMetadata: requestMetadata\r\n };\r\n this._logger.prefetch(prefetchMetadata);\r\n this._loadSubscription = this.loadData(httpResponseMock).subscribe({\r\n next: (data: any) => {\r\n this.setDataStorage(httpResponseMock, requestMetadata, data);\r\n const error: HttpMockError | null = this._dataStorage.httpResponse.error;\r\n setTimeout(()=> {\r\n this.setReadyState(this.HEADERS_RECEIVED);\r\n if (error) return this.onError(request, error);\r\n this.setReadyState(this.LOADING);\r\n const response: HttpResponseMock = this._dataStorage.httpResponse;\r\n if (!this._progressiveDownload) {\r\n this._statusText = response.statusText || EMPTY_STRING;\r\n this._status = response.status || 0;\r\n return this.onLoadComplete(request);\r\n }\r\n this.doProgressiveDownload(request);\r\n }, timer);\r\n },\r\n error: (err: any) => {\r\n this.setDataStorage(httpResponseMock, requestMetadata);\r\n this.onError(request, err);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets the value of an HTTP request header.\r\n * \r\n * @param name The name of the header whose value is to be set.\r\n * @param value The value to set as the body of the header.\r\n */\r\n setRequestHeader(name: string, value: string): void {\r\n this._requestHeaders = this._requestHeaders.set(name, value);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n constructor(routeConfig: RouteMockConfig,\r\n private _logger: HttpMockLoggingService) {\r\n super();\r\n this._routeConfig = routeConfig;\r\n // routeConfig.methodConfig.downloadManager\r\n this._progressiveDownload = false;\r\n this._requestHeaders = new HttpHeaders();\r\n }\r\n \r\n /**\r\n * @private \r\n * Internally used by the framework to delete a `DelegateXhr` instance.\r\n */\r\n public destroy(): void {\r\n this._routeConfig = null as any;\r\n this._requestHeaders = null as any;\r\n this._dataStorage = null as any;\r\n if (this._loadSubscription) {\r\n this._loadSubscription.unsubscribe();\r\n this._loadSubscription = null;\r\n }\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private doProgressiveDownload(request: HttpRequest<any>): void {\r\n const total: number = this._dataStorage.total;\r\n if (total <= 200) {\r\n console.warn(\"[Angular Toolbox]: Body content is too small for emulating progressive download! Minimum size is 200 octets.\");\r\n return this.onLoadComplete(request);\r\n }\r\n // TODO: ameliorate the following process:\r\n const self: DelegateXhr = this;\r\n const chunckSize: number = Math.floor(total / 10);\r\n let cursor: number = 0;\r\n this._statusText = \"Partial Content\";\r\n this._status = HttpStatusCode.PartialContent;\r\n const idx = setInterval(()=> {\r\n cursor += chunckSize;\r\n if (cursor > total) {\r\n cursor = total;\r\n clearInterval(idx);\r\n self.onLoadComplete(request);\r\n } else {\r\n this._dataStorage.loaded = cursor;\r\n self.dispatchProgressEvent();\r\n }\r\n }, 100);\r\n }\r\n\r\n private finalizeRequestMetadata(): HttpMockRequestMetadata {\r\n const ds: DataStorage = this._dataStorage;\r\n const metadata: HttpMockRequestMetadata = ds.requestMetadata;\r\n const duration: number = this.now() - metadata.start;\r\n if (duration > metadata.duration) metadata.duration = duration;\r\n return metadata;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private onLoadComplete(request: HttpRequest<any>): void {\r\n this._dataStorage.loaded = this._dataStorage.total;\r\n this.setReadyState(this.DONE);\r\n this.dispatchProgressEvent(\"load\");\r\n this._logger.info(this.buildMetadata(request));\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private onError(request: HttpRequest<any>, error: HttpMockError): void {\r\n this._status = error.status;\r\n this._statusText = error.statusText;\r\n this.setReadyState(this.DONE);\r\n this.dispatchProgressEvent(\"error\");\r\n this._logger.error(this.buildMetadata(request));\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private buildMetadata(request: HttpRequest<any>): HttpMockLoggingMetadata {\r\n return HttpMockLoggingMetadataBuilder.build(this, request, this.finalizeRequestMetadata());\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private eventDispatch(type: string): void {\r\n const event: Event = new Event(type);\r\n Object.defineProperty(event, 'target', EVT_PROPS_CONFIG);\r\n Object.defineProperty(event, 'currentTarget', EVT_PROPS_CONFIG);\r\n this.dispatchEvent(event);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private dispatchProgressEvent(type: string = \"progress\"): void {\r\n const d: any = this._dataStorage;\r\n const event: ProgressEventMock = new ProgressEventMock(type);\r\n event.loaded = d.loaded;\r\n event.total = d.total;\r\n this.dispatchEvent(event);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private setReadyState(state: number): void {\r\n this._readyState = state;\r\n const event: any = this.onreadystatechange;\r\n if (event) event.call(this, READY_STATE_CHANGE_EVENT);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private loadData(httpResponseMock: HttpResponseMock): Observable<any> {\r\n const responseBody: any | Observable<any> = httpResponseMock.body;\r\n return (responseBody instanceof Observable) ? responseBody : of(responseBody);\r\n }\r\n\r\n /**\r\n * @private \r\n */\r\n private setDataStorage(responseMock: HttpResponseMock, requestMetadata: HttpMockRequestMetadata, data: any = null): void {\r\n this._dataStorage = DataStorageBuilder.buildDataStorage(responseMock, data, requestMetadata);\r\n }\r\n \r\n /**\r\n * @private \r\n */\r\n private buildHttpRequest(body: any): HttpRequest<any> {\r\n let params: HttpParams = new HttpParams();\r\n const it: IterableIterator<[string, string]> = (this._routeConfig.searchParams as any).entries();\r\n for (const pair of it) params = params.set(pair[0], pair[1]);\r\n const init: any = {\r\n params: params,\r\n headers: this._requestHeaders,\r\n withCredentials: this.withCredentials,\r\n responseType: this.responseType,\r\n reportProgress: this.hasEventListener(\"progress\")\r\n // context, transferCache: not used by Angular at this level of API\r\n };\r\n return new HttpRequest<any>(this._method as string, this._url as any, body, init);\r\n }\r\n\r\n private now(): number {\r\n return Date.now();\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockService } from \"../../../../model/service/mock/http/http-mock.service\";\r\nimport { HttpMockLoggingService, XhrProxy } from \"../../../../model\";\r\nimport { DelegateXhr } from \"./delegate-xhr\";\r\nimport { EMPTY_STRING } from \"../../../../util\";\r\nimport { XhrBase } from \"./xhr-base\";\r\nimport { RouteMockConfig } from \"../config/route-mock-config\";\r\nimport { HTTPMethodRef } from \"../util/http-method-ref.enum\";\r\n\r\n/**\r\n * @private\r\n * An error used as reference for unit testing.\r\n * Angular framework calls `XMLHttpRequest` method only after the `open()` method invokation.\r\n */\r\nconst XHR_ERROR: (method: string)=>void = (method: string)=> {\r\n throw new Error(`Attempt to call ${method}() method before calling open().`)\r\n};\r\n\r\n/**\r\n * @private\r\n * A XHR proxy that is used by the Mocking Framework to apply HTTP call strategies.\r\n */\r\nexport class XhrProxyImpl extends XhrBase implements XhrProxy {\r\n\r\n /**\r\n * @private\r\n * Stores an internal XMLHttpRequestobject used as delegate,\r\n * depending on the testing strategy defined by the config file.\r\n */\r\n private XHR!: XhrProxy;\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get response(): any {\r\n return this.XHR ? this.XHR.response : undefined;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get status(): number {\r\n return this.XHR ? this.XHR.status : 0;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get statusText(): string {\r\n return this.XHR ? this.XHR.statusText : EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get readyState(): number {\r\n return this.XHR ? this.XHR.readyState : this.UNSENT;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get responseURL(): string {\r\n return this.XHR ? this.XHR.responseURL : EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get responseText(): string {\r\n return this.XHR ? this.XHR.responseText : EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n get responseType(): XMLHttpRequestResponseType {\r\n return this.XHR ? this.XHR.responseType : EMPTY_STRING as XMLHttpRequestResponseType;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n set responseType(value: XMLHttpRequestResponseType) {\r\n if(!this.XHR) XHR_ERROR(\"responseType\");\r\n this.XHR.responseType = value;\r\n }\r\n\r\n get upload(): XMLHttpRequestUpload {\r\n return this.XHR.upload;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n open(method: string, url: string | URL): void;\r\n open(method: string, url: string | URL, async: boolean, username?: string | null | undefined, password?: string | null | undefined): void;\r\n open(method: unknown, url: unknown, async?: unknown, username?: unknown, password?: unknown): void {\r\n const m: string = (method as string).toString().toLowerCase();\r\n const parsedUrl: URL = URL.canParse(url as string) ? new URL(url as string) : new URL(this._httpMockService.getAppOrigin() + url);\r\n const config: RouteMockConfig | undefined = this._httpMockService.getRouteConfig(parsedUrl, m as HTTPMethodRef);\r\n if (this.XHR && this.XHR instanceof DelegateXhr) this.XHR.destroy();\r\n this.XHR = config ? new DelegateXhr(config, this._logger) : new XMLHttpRequest();\r\n this.XHR.withCredentials = this.withCredentials;\r\n this.XHR.open(m.toString(), parsedUrl.toString());\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n abort(): void {\r\n if (this.XHR) return this.XHR.abort();\r\n XHR_ERROR(\"abort\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n getAllResponseHeaders(): any {\r\n return this.XHR ? this.XHR.getAllResponseHeaders() : null;\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n override addEventListener(type: unknown, listener: unknown, options?: unknown): void {\r\n if (this.XHR) return this.XHR.addEventListener(type as any, listener as any, options as any);\r\n XHR_ERROR(\"addEventListener\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n override removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\r\n if (this.XHR) return this.XHR.removeEventListener(type as any, listener as any, options as any);\r\n XHR_ERROR(\"removeEventListener\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n send(body?: Document | XMLHttpRequestBodyInit | null | undefined): void {\r\n if (this.XHR) return this.XHR.send(body);\r\n XHR_ERROR(\"send\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * XMLHTTPRequest API\r\n */\r\n setRequestHeader(name: string, value: string): void {\r\n if (this.XHR) return this.XHR.setRequestHeader(name, value);\r\n XHR_ERROR(\"setRequestHeader\");\r\n }\r\n\r\n /**\r\n * @private\r\n * \r\n * For Unit Testing only.\r\n */\r\n public instanceOf(classRef: any): boolean {\r\n return this.XHR instanceof classRef;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _httpMockService: HttpMockService,\r\n private _logger: HttpMockLoggingService) {\r\n super();\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { XhrFactory } from \"@angular/common\";\r\nimport { HttpMockService } from \"../../../../model/service/mock/http/http-mock.service\";\r\nimport { XhrProxyImpl } from \"./xhr-proxy-impl\";\r\nimport { HttpMockLoggingService } from \"../../../../model\";\r\n\r\n/**\r\n * @private\r\n * The concrete implementation of the `XhrFactory` interface.\r\n */\r\nexport class XhrProxyFactoryImpl extends XhrFactory {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _httpMockService: HttpMockService,\r\n private _logger: HttpMockLoggingService) {\r\n super();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public build(): XMLHttpRequest {\r\n return new XhrProxyImpl(this._httpMockService, this._logger);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { inject } from \"@angular/core\";\r\nimport { HttpMockService } from \"../../../../model/service/mock/http/http-mock.service\";\r\nimport { XhrProxyFactoryImpl } from \"./http-mock-factory.impl\";\r\nimport { HttpMockLoggingService } from \"../../../../model\";\r\n\r\n/**\r\n * A factory function that creates and returns a new `XhrFactory` object.\r\n * \r\n * @returns A new `XhrFactory` object.\r\n */\r\nexport const httpMockFactory = ()=> {\r\n return new XhrProxyFactoryImpl(inject(HttpMockService), inject(HttpMockLoggingService));\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { HttpParameterDescriptor } from '../../../../../model';\r\nimport { SafeHtmlPipe } from '../../../../../pipe';\r\n\r\n/**\r\n * @private\r\n * Displays documentation for HTTP fragment parameters, or query parameters.\r\n */\r\n@Component({\n selector: 'atx-mock-param',\n imports: [\n SafeHtmlPipe\n ],\n templateUrl: './atx-mock-param.component.html',\n styleUrl: './atx-mock-param.component.scss'\n})\r\nexport class AtxMockParamComponent {\r\n\r\n /**\r\n * @private\r\n * The list of `HttpParameterDescriptor` object that contains information to display.\r\n */\r\n @Input()\r\n public params!: HttpParameterDescriptor[];\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n@if (params) {\r\n <div class=\"atx-mock-param-container\">\r\n @for (param of params; track param) {\r\n <dl class=\"param\">\r\n <dt><code>{{ param.ref }}</code></dt>\r\n <dd [innerHTML]=\"param.description | safeHtml\"></dd>\r\n </dl>\r\n }\r\n </div>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { SafeHtmlPipe } from '../../../../../pipe';\r\n\r\n/**\r\n * @private\r\n * A conmponent that renders mock config description ppoperties.\r\n */\r\n@Component({\n selector: 'atx-mock-description',\n imports: [\n SafeHtmlPipe\n ],\n templateUrl: './atx-mock-description.component.html'\n})\r\nexport class AtxMockDescriptionComponent {\r\n\r\n /**\r\n * @private\r\n * The description to render. Can contains HTML tags.\r\n */\r\n @Input()\r\n public description!: string;\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<div [innerHTML]=\"description | safeHtml\"></div>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { AtxMockDescriptionComponent } from '../atx-mock-description/atx-mock-description.component';\r\nimport { FullDescription } from '../../model/business/full-description.type';\r\n\r\n/**\r\n * @private\r\n * A convenient component that displays the description and the origin of a mock config section.\r\n */\r\n@Component({\n selector: 'atx-mock-full-description',\n imports: [\n AtxMockDescriptionComponent\n ],\n templateUrl: './atx-mock-full-description.component.html'\n})\r\nexport class AtxMockFullDescriptionComponent {\r\n\r\n /**\r\n * @public\r\n * The config object taht contains the description to display.\r\n */\r\n @Input()\r\n public config!: FullDescription;\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n@if (config) {\r\n <div class=\"description\">\r\n @if (config.description) {\r\n <atx-mock-description [description]=\"config.description\"/>\r\n }\r\n @if (config.origin) {\r\n <dl>\r\n <dt>origin:</dt>\r\n <dd><a [href]=\"config.origin\" [title]=\"config.origin\"><code>{{ config.origin }}</code></a></dd>\r\n </dl>\r\n }\r\n </div>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { AtxMockParamComponent } from '../atx-mock-param/atx-mock-param.component';\r\nimport { AtxMockDescriptionComponent } from '../atx-mock-description/atx-mock-description.component';\r\nimport { HttpMethodMock, HttpMockEndpoint } from '../../../../../model';\r\nimport { MethodDocDescriptor } from '../../model/business/method-doc-descriptor.type';\r\n\r\n/**\r\n * @private\r\n */\r\nconst ROUTE: string = \"route\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst DESCRIPTOR: string = \"descriptor\";\r\n\r\n/**\r\n * @private\r\n * A convenient component that allows to display documentation for HTTP methods of an endpoint.\r\n */\r\n@Component({\n selector: 'atx-mock-methods',\n imports: [\n AtxMockParamComponent,\n AtxMockDescriptionComponent\n ],\n templateUrl: './atx-mock-methods.component.html'\n})\r\nexport class AtxMockMethodsComponent {\r\n \r\n /**\r\n * @private\r\n */\r\n protected methods: MethodDocDescriptor[] = [];\r\n\r\n /**\r\n * @private\r\n */\r\n private _endpoint!: HttpMockEndpoint;\r\n\r\n /**\r\n * @private\r\n * The endpoint for which to show HTTP methods documentation.\r\n */\r\n @Input()\r\n public set endpoint(value: HttpMockEndpoint) {\r\n this._endpoint = value;\r\n this.methods = this.initMethodList(value);\r\n }\r\n public get endpoint(): HttpMockEndpoint {\r\n return this._endpoint;\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n protected initMethodList(endpoint: HttpMockEndpoint): MethodDocDescriptor[] {\r\n const keys: string[] = Object.keys(endpoint);\r\n const methods: MethodDocDescriptor[] = [];\r\n keys.forEach(key =>{\r\n if (key !== ROUTE && key !== DESCRIPTOR) {\r\n const mock: HttpMethodMock = (endpoint as any)[key];\r\n methods.push({\r\n method: key,\r\n descriptor: mock.descriptor\r\n });\r\n }\r\n });\r\n return methods;\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n@if (methods.length) {\r\n <h3>Methods</h3>\r\n <ul>\r\n @for (item of methods; track item; let last = $last) {\r\n <li>\r\n <span>{{ item.method }}</span>\r\n @if (item.descriptor) {\r\n <div class=\"method-descriptor\">\r\n @if (item.descriptor.description) {\r\n <atx-mock-description [description]=\"item.descriptor.description\"/>\r\n }\r\n @if (item.descriptor.payload) {\r\n <dl>\r\n <dt>payload:</dt>\r\n <dd [innerHTML]=\"item.descriptor.payload\"></dd>\r\n </dl>\r\n }\r\n @if (item.descriptor.body) {\r\n <dl>\r\n <dt>body:</dt>\r\n <dd [innerHTML]=\"item.descriptor.body\"></dd>\r\n </dl>\r\n }\r\n @if (item.descriptor.queryParams) {\r\n <h4>Query Parameters</h4>\r\n <atx-mock-param [params]=\"item.descriptor.queryParams\"/>\r\n }\r\n </div>\r\n \r\n }\r\n </li>\r\n @if (!last) {\r\n <hr>\r\n }\r\n }\r\n </ul>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, ElementRef, Input } from '@angular/core';\r\nimport { HttpMockConfig } from '../../../../../model';\r\nimport { EMPTY_STRING } from '../../../../../util';\r\nimport { AtxMockParamComponent } from '../atx-mock-param/atx-mock-param.component';\r\nimport { AtxMockDescriptionComponent } from '../atx-mock-description/atx-mock-description.component';\r\nimport { AtxMockFullDescriptionComponent } from '../atx-mock-full-description/atx-mock-full-description.component';\r\nimport { AtxMockMethodsComponent } from '../atx-mock-methods/atx-mock-methods.component';\r\n\r\n/**\r\n * @private\r\n */\r\nconst OPEN: string = \"open\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst DETAILS: string = \"details\";\r\n\r\n/**\r\n * An easy-to-use component that displays the documentation of a `HttpMockConfig` object.\r\n */\r\n@Component({\n selector: 'atx-mock-documentation',\n imports: [\n AtxMockParamComponent,\n AtxMockDescriptionComponent,\n AtxMockFullDescriptionComponent,\n AtxMockMethodsComponent\n ],\n templateUrl: './atx-mock-documentation.component.html',\n styleUrl: './atx-mock-documentation.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class AtxMockDocumentation {\r\n\r\n /**\r\n * @private\r\n */\r\n protected configApi!: HttpMockConfig;\r\n\r\n /**\r\n * @private\r\n */\r\n protected expanded: boolean = false;\r\n\r\n /**\r\n * Specifies the title of the current display.\r\n */\r\n @Input()\r\n public title: string = \"HTTP Mock API\";\r\n\r\n /**\r\n * Gets or sets the `HttpMockConfig` object for which to display documentation.\r\n */\r\n @Input()\r\n public set config(value: HttpMockConfig) {\r\n this.configApi = value;\r\n this.expanded = false;\r\n }\r\n public get config(): HttpMockConfig {\r\n return this.configApi;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private elmRef: ElementRef) {}\r\n\r\n /**\r\n * @private\r\n */\r\n protected toggleExpandState(): void {\r\n const details: HTMLDetailsElement[] = this.elmRef.nativeElement.querySelectorAll(DETAILS);\r\n this.expanded = !this.expanded;\r\n if (this.expanded) return details.forEach((elm: HTMLDetailsElement) => elm.setAttribute(OPEN, EMPTY_STRING));\r\n details.forEach((elm: HTMLDetailsElement) => elm.removeAttribute(OPEN));\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n@if (configApi) {\r\n <section>\r\n <h1>{{ title }}</h1>\r\n <h2>Description</h2>\r\n @if (configApi.description || configApi.origin) {\r\n <atx-mock-full-description [config]=\"configApi\"/>\r\n }\r\n </section>\r\n <section>\r\n <h2>Interceptors</h2>\r\n <button (click)=\"toggleExpandState()\">{{ expanded ? 'Collapse' : 'Expand' }} all</button>\r\n @if (configApi.interceptors) {\r\n @for (inteceptor of configApi.interceptors; track inteceptor) {\r\n <details>\r\n <summary>\r\n {{ inteceptor.id }}\r\n </summary>\r\n @if (inteceptor.description || inteceptor.origin) {\r\n <atx-mock-full-description [config]=\"inteceptor\"/>\r\n }\r\n @for (endpoint of inteceptor.endpoints; track endpoint; let last = $last) {\r\n <section class=\"endpoint\">\r\n <dl>\r\n <dt>route:</dt>\r\n <dd><code>{{ endpoint.route }}</code></dd>\r\n </dl>\r\n @if (endpoint.descriptor) {\r\n @if (endpoint.descriptor.description) {\r\n <atx-mock-description [description]=\"endpoint.descriptor.description\"/>\r\n }\r\n @if (endpoint.descriptor.params) {\r\n <h3>Parameters</h3>\r\n <atx-mock-param [params]=\"endpoint.descriptor.params\"/>\r\n }\r\n }\r\n <atx-mock-methods [endpoint]=\"endpoint\"/>\r\n </section>\r\n @if (!last) {\r\n <hr>\r\n }\r\n }\r\n </details>\r\n }\r\n }\r\n </section>\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Defines the possible values used to assign properties of type of `DialogBackdrop`.\r\n */\r\nexport enum DialogBackdropType {\r\n\r\n /**\r\n * Indicates that the dialog element is of type of \"static\".\r\n */\r\n STATIC = \"static\",\r\n\r\n /**\r\n * Indicates that the dialog element is of type of \"modal\".\r\n */\r\n MODAL = \"modal\"\r\n};\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Indicates the type of a dialog backdrop element.\r\n */\r\nexport type DialogBackdrop = \"modal\" | \"static\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * Specifies the event type of `DialogOutletEvent` instances.\r\n */\r\nexport type DialogOutletEventType = \"show\" | \"hide\";\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DialogOutletEventType } from \"./dialog-outlet-event-type\";\r\nimport { DialogConfig } from \"./dialog.config\";\r\n\r\n/**\r\n * Event that indicates the state changes of components managed by the `DialogService` service singleton.\r\n */\r\nexport class DialogOutletEvent {\r\n\r\n /**\r\n * The type of event dispatched each time the dialog element is displayed.\r\n */\r\n public static readonly SHOW: DialogOutletEventType = \"show\";\r\n\r\n /**\r\n * The type of event dispatched each time the dialog element is removed.\r\n */\r\n public static readonly HIDE: DialogOutletEventType = \"hide\";\r\n\r\n /**\r\n * A `DialogOutletEventType` value that indicates the state of the dialog element.\r\n */\r\n public readonly state: DialogOutletEventType;\r\n\r\n /**\r\n * The dialog element config associated with an event of type of `\"show\"`. \r\n * `config` is set to `null` when the event is of type of `\"hide\"`.\r\n */\r\n public readonly config: DialogConfig | null;\r\n\r\n /**\r\n * @private\r\n * \r\n * Creates a new `DialogOutletEvent` instance.\r\n * \r\n * @param state The state of the dialog element.\r\n * @param config The dialog element config associated with this event.\r\n */\r\n constructor(state: DialogOutletEventType, config: DialogConfig | null = null) {\r\n this.state = state;\r\n this.config = config;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DialogBackdropType } from \"./dialog-backdrop-type.enum\";\r\nimport { DialogBackdrop } from \"./dialog-backdrop.type\";\r\n\r\n/**\r\n * Defines the configuration associated with a custom component displayed through the Dialog API.\r\n */\r\nexport interface DialogConfig {\r\n\r\n /**\r\n * Indicates whether the dialog is modal, or static.\r\n */\r\n backdrop?: DialogBackdrop | DialogBackdropType;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DialogBackdropType } from './dialog-backdrop-type.enum';\r\nimport { DialogConfig } from './dialog.config';\r\n\r\n/**\r\n * @private\r\n */\r\nexport const DEFAULT_CONFIG: DialogConfig = {\r\n backdrop: DialogBackdropType.MODAL\r\n};\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\n/**\r\n * @private\r\n */\r\nconst NAME: string = \"DialogServiceError\";\r\n\r\n/**\r\n * The `DialogServiceError` class represents errors thrown by the ATX framework\r\n * when a dialog error occurs.\r\n */\r\nexport class DialogServiceError extends Error {\r\n\r\n /**\r\n * Creates a new `DialogServiceError` instance.\r\n * \r\n * @param message The `message` data property is a human-readable description of this `DialogServiceError` instance.\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n this.name = NAME;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ComponentRef, EventEmitter, Injectable, ViewContainerRef } from \"@angular/core\";\r\nimport { DialogOutletEvent } from \"./dialog-outlet.event\";\r\nimport { DialogConfig } from \"./dialog.config\";\r\nimport { DialogServiceError } from \"./dialog-service.error\";\r\n\r\n/**\r\n * The `DialogService` class manages injection of customs component into the\r\n * HTML dialog element created by the ATX framework.\r\n */\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class DialogService {\r\n\r\n /**\r\n * Dispatches an event that indicates the state of the dialog element when a custom\r\n * component is added to, or remove from it.\r\n */\r\n public readonly dialogStateChange: EventEmitter<DialogOutletEvent> = new EventEmitter();\r\n\r\n /**\r\n * @private\r\n */\r\n protected viewContainerRef!: ViewContainerRef;\r\n\r\n /**\r\n * Creates an instance of the `compRef` class, adds this instance to the HTML dialog element\r\n * and displays the dialog element in front of all other components in the application.\r\n * \r\n * @param compRef The class that represents the component to display as a popup element.\r\n * @param config The dialog element config associated with the new component instance to display.\r\n * \r\n * @returns The new `ComponentRef` which contains the component instance and the host view.\r\n */\r\n public show<T>(compRef: any, config: DialogConfig | null = null): ComponentRef<T> {\r\n if (!this.viewContainerRef) throw new DialogServiceError(\"DialogOutlet missing: you must add the <atx-dialog-outlet/> tag to your application before using dialog services.\");\r\n const component: ComponentRef<T> = this.viewContainerRef.createComponent<T>(compRef);\r\n const event: DialogOutletEvent = new DialogOutletEvent(DialogOutletEvent.SHOW, config);\r\n this.dialogStateChange.emit(event);\r\n return component;\r\n }\r\n\r\n /**\r\n * Indicates to the ATX framework to remove component instances previously created with\r\n * the `show()` method.\r\n */\r\n public hide(): void {\r\n const event: DialogOutletEvent = new DialogOutletEvent(DialogOutletEvent.HIDE);\r\n this.dialogStateChange.emit(event);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public __init__(viewContainerRef: ViewContainerRef): boolean {\r\n if (this.viewContainerRef !== undefined) return false;\r\n this.viewContainerRef = viewContainerRef;\r\n return true;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, ElementRef, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { DialogOutletEvent } from './dialog-outlet.event';\r\nimport { DialogOutletEventType } from './dialog-outlet-event-type';\r\nimport { DialogConfig } from './dialog.config';\r\nimport { DEFAULT_CONFIG } from './dialog-default-config';\r\nimport { DialogBackdropType } from './dialog-backdrop-type.enum';\r\nimport { DialogService } from './dialog-service';\r\n\r\n/**\r\n * Acts as a placeholder that the ATX framework dynamically fills based on the component specified\r\n * by the dialog service `show()` method.\r\n */\r\n@Component({\r\n selector: 'atx-dialog-outlet',\r\n standalone: true,\r\n template: '<dialog #dialog (mouseup)=\"mouseupHandler($event)\" (close)=\"onClose($event)\"><ng-container #renderer></ng-container></dialog>',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DialogOutlet implements OnInit {\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"dialog\")\r\n private _dialog!: ElementRef<HTMLDialogElement>;\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"renderer\", { static: true, read: ViewContainerRef })\r\n private renderer!: ViewContainerRef;\r\n\r\n /**\r\n * @private\r\n */\r\n private _config!: DialogConfig;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private dialogSvc: DialogService) {}\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnInit(): void {\r\n this.dialogSvc.__init__(this.renderer);\r\n this.dialogSvc.dialogStateChange.subscribe((event: DialogOutletEvent)=> this.stateChange(event));\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected mouseupHandler(event: MouseEvent): void {\r\n if (this._config.backdrop !== DialogBackdropType.MODAL) return;\r\n const rect: DOMRect = this._dialog.nativeElement.getBoundingClientRect();\r\n const xPos: number = event.clientX;\r\n const yPos: number = event.clientY;\r\n const top: number = rect.top;\r\n const left: number = rect.left;\r\n const isDialog: boolean = (top <= yPos && yPos <= top + rect.height && left <= xPos && xPos <= left + rect.width);\r\n if (!isDialog) this.hide();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected onClose(event: Event): void {\r\n this.renderer.clear();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private stateChange(event: DialogOutletEvent): void {\r\n const state: DialogOutletEventType = event.state;\r\n if (state === DialogOutletEvent.SHOW) return this.show(event);\r\n if (state === DialogOutletEvent.HIDE) this.hide();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private show(event: DialogOutletEvent): void {\r\n this._config = event.config || DEFAULT_CONFIG;\r\n this._dialog.nativeElement.showModal();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private hide(): void {\r\n this._dialog.nativeElement.close();\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nexport * from \"./dialog-backdrop-type.enum\";\r\nexport * from \"./dialog-backdrop.type\";\r\nexport * from \"./dialog-outlet-event-type\";\r\nexport * from \"./dialog-outlet.event\";\r\nexport * from \"./dialog.config\";\r\nexport * from \"./dialog.outlet\";\r\nexport * from \"./dialog-service\";\r\nexport * from \"./dialog-service.error\";","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { HttpMockLoggingConstant } from \"../../../../../model/business/logging/http-mock-logging-constant.enum\";\r\nimport { Log, LogLevel } from \"../../../../../model\";\r\nimport { AtxHttpLogDto } from \"../../model/business/io/atx-http-log.dto\";\r\nimport { LogMessageUtil } from \"./log-message.util\";\r\nimport { LogMetadataConverter } from \"./log-metadata-converter\";\r\nimport { LogBuilder } from \"../../../../../framework\";\r\n\r\n/**\r\n * @private\r\n * A utility class that converts `Log` objects into `AtxHttpLogDto` objects.\r\n */\r\nexport class LogConverter {\r\n\r\n /**\r\n * @private\r\n * Converts a `object` object into an `AtxHttpLogDto` object.\r\n * \r\n * @param log The `Log` object to convert.\r\n * @returns A new `AtxHttpLogDto` object.\r\n */\r\n public static logToDto(log: Log): AtxHttpLogDto {\r\n return {\r\n level: log.level,\r\n timestamp: log.timestamp,\r\n metadata: LogMetadataConverter.metadataToDto(log.metadata)\r\n };\r\n }\r\n\r\n /**\r\n * @private\r\n * Converts an `AtxHttpLogDto` object into a `Log` object.\r\n * \r\n * @param dto The `AtxHttpLogDto` object to convert.\r\n * @returns A new `Log` object.\r\n */\r\n public static dtoToLog(dto: AtxHttpLogDto): Log {\r\n const level: LogLevel = dto.level;\r\n return LogBuilder.build(\r\n HttpMockLoggingConstant.CALLER,\r\n LogMessageUtil.getMessageFromLevel(level),\r\n level,\r\n LogMetadataConverter.dtoToMetadata(dto.metadata)\r\n );\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AtxHttpLogDto } from \"../../model/business/io/atx-http-log.dto\";\r\nimport { HMFL } from \"../../model/business/io/hmfl\";\r\n\r\n/**\r\n * @private\r\n * A utility class that creates `HMFL` objects.\r\n */\r\nexport class HMFLBuilder {\r\n\r\n /**\r\n * @private\r\n * Creates and returns a new `HMFL` object.\r\n * \r\n * @param logDtoList The list of serialized logs to include in the new `HMFL` object.\r\n * @returns A new `HMFL` object.\r\n */\r\n public static build(logDtoList: AtxHttpLogDto[]): HMFL {\r\n return {\r\n logs: logDtoList,\r\n timestamp: Date.now()\r\n };\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable } from \"@angular/core\";\r\nimport { HttpMockLoggingMetadata, HttpMockLoggingService, Log, LogLevel } from '../../../../../model';\r\nimport { LogConverter } from \"../../util/io/log-converter\";\r\nimport { AtxHttpLogDto } from \"../business/io/atx-http-log.dto\";\r\nimport { HMFL } from \"../business/io/hmfl\";\r\nimport { formatDate } from \"@angular/common\";\r\nimport { HMFLBuilder } from \"../../util/io/hmfl-builder\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst BLOB_TYPE: any = { type: 'application/json' };\r\n\r\n/**\r\n * @private\r\n */\r\nconst UTF8: any = \"UTF-8\";\r\n\r\n/**\r\n * @private\r\n * The service responsible for exporting and importing `hmfl` log files.\r\n */\r\n@Injectable()\r\nexport class AtxLogIoService {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _logger: HttpMockLoggingService) {}\r\n\r\n /**\r\n * @private\r\n * Exports the specified logs into a hmfl file.\r\n * \r\n * @param logs The logs to exports.\r\n */\r\n public exportFile(logs: Log[]): void {\r\n const logDtoList: AtxHttpLogDto[] = [];\r\n let cursor: number = logs.length - 1;\r\n for (; cursor >= 0; cursor--) {\r\n const log: Log = logs[cursor];\r\n if (log.level !== LogLevel.CONFIG) logDtoList.push(LogConverter.logToDto(log));\r\n }\r\n const exportData: HMFL = HMFLBuilder.build(logDtoList);\r\n const a: HTMLAnchorElement = document.createElement(\"a\");\r\n const file: Blob = new Blob([JSON.stringify(exportData)], BLOB_TYPE);\r\n const timeFmt: string = formatDate(exportData.timestamp, \"MM/dd/yy-hh:mm-a\", \"en-US\");\r\n a.href = URL.createObjectURL(file);\r\n a.download = `logs-${timeFmt}.hmfl`;\r\n a.click();\r\n }\r\n\r\n /**\r\n * @private\r\n * Imports the logs loaded through the specified `FileList` object.\r\n * \r\n * @param fileList The logs to import.\r\n */\r\n public importFile(fileList: FileList): void {\r\n const logger: HttpMockLoggingService = this._logger;\r\n const files: File = fileList[0];\r\n const killReader: Function = this.killReader;\r\n if (files) {\r\n const reader: FileReader = new FileReader();\r\n reader.readAsText(files, UTF8);\r\n reader.onload = ()=> {\r\n const result: string = reader.result as any;\r\n const resultLogData: HMFL = JSON.parse(result);\r\n const logs: AtxHttpLogDto[] = resultLogData.logs;\r\n let cursor: number = logs.length - 1;\r\n for (; cursor >= 0; cursor--) {\r\n const log: Log = LogConverter.dtoToLog(logs[cursor]);\r\n const metadata: HttpMockLoggingMetadata = log.metadata;\r\n const level: LogLevel = log.level;\r\n if (level === LogLevel.INFO) logger.info(metadata);\r\n else if (level === LogLevel.ERROR) logger.error(metadata);\r\n };\r\n killReader(reader);\r\n }\r\n reader.onerror = (e)=> {\r\n killReader(reader);\r\n console.log(e)\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private killReader(reader: FileReader): void {\r\n reader.onload = null;\r\n reader.onerror = null;\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter } from \"@angular/core\";\r\nimport { Log, LogConnector, LogLevel } from \"../../../../model\";\r\n\r\n/**\r\n * @private\r\n * An implementation of the `LogConnector` class that sends logs to the HTTP\r\n * mocking console component.\r\n */\r\nexport class HttpMonitoringConsoleLogConnector implements LogConnector {\r\n\r\n /**\r\n * @private\r\n */\r\n public readonly logs: Log[] = [];\r\n\r\n /**\r\n * @private\r\n */\r\n public readonly change: EventEmitter<Log> = new EventEmitter(true);\r\n\r\n /**\r\n * @private\r\n */\r\n public destroy(): void {\r\n this.clearLogs();\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n public init(logList: Log[]): void {\r\n this.logs.push(...logList);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public sendLog(log: Log): void {\r\n const level: LogLevel = log.level;\r\n if (level === LogLevel.INFO || level === LogLevel.ERROR) this.logs.push(log);\r\n this.change.emit(log);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public clearLogs(): void {\r\n this.logs.length = 0;\r\n }\r\n\r\n /**\r\n * @private\r\n * Not supported.\r\n */\r\n public copyLogs(): void {}\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { HttpMockLoggingService, Log, SubscriptionService } from '../../../../../model';\r\nimport { AtxLogIoService } from \"./atx-log-io.service\";\r\nimport { AtxMonitoringConsoleState } from \"./atx-monitoring-console.state\";\r\nimport { HttpMonitoringConsoleLogConnector } from \"../../connector/http-monitoring-console-log-connector\";\r\nimport { IdentifiableComponent } from '../../../../../core';\r\nimport { AtxConsoleAction } from \"../business/atx-console-action\";\r\nimport { AtxConsoleActionType } from \"../business/atx-console-action-type\";\r\nimport { AtxUserActionService } from \"./atx-user-action.service\";\r\n\r\n/**\r\n * @private\r\n * The service that manages user interactions with an `AtxMonitoringConsoleComponent` instance.\r\n */\r\n@Injectable()\r\nexport class AtxMonitoringConsoleController extends IdentifiableComponent implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n protected connector: HttpMonitoringConsoleLogConnector;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _logger: HttpMockLoggingService,\r\n private _state: AtxMonitoringConsoleState,\r\n private _ioSvc: AtxLogIoService,\r\n private _subscribe: SubscriptionService,\r\n action: AtxUserActionService) {\r\n super(\"AtxMonitoringConsoleController\");\r\n const connector: HttpMonitoringConsoleLogConnector = new HttpMonitoringConsoleLogConnector();\r\n const logs: Log[] = this._logger.getLogs();\r\n this.connector = connector;\r\n this._subscribe.register(this, connector.change.subscribe((log: Log)=> this.addLog(log)))\r\n .append(action.action.subscribe((action: AtxConsoleAction)=> this.onAction(action)));\r\n this.connector.init(logs)\r\n this._state.init(logs);\r\n this._logger.setLogConnector(connector);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this._subscribe.clearAll(this);\r\n this._logger.setLogConnector(null);\r\n this.connector.destroy();\r\n this.connector = null as any;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private clearLogs(): void {\r\n this._logger.clearLogs();\r\n this._state.clearLogs();\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private exportLogs(): void {\r\n this._ioSvc.exportFile(this._state.logs);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private addLog(log: Log): void {\r\n this._state.addLog(log);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private onAction(action: AtxConsoleAction): void {\r\n switch(action.type) {\r\n case AtxConsoleActionType.CLEAR_LOGS : this.clearLogs(); break;\r\n case AtxConsoleActionType.EXPORT_LOGS: this.exportLogs(); break;\r\n case AtxConsoleActionType.IMPORT_LOGS: this._ioSvc.importFile(action.data); break;\r\n case AtxConsoleActionType.LOG_SELECT: this._state.selectLog(action.data); break;\r\n case AtxConsoleActionType.CLOSE_DETAILS_PANEL: this._state.selectLog(null); break;\r\n }\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, ViewEncapsulation } from '@angular/core';\r\nimport { AtxRequestDetailsComponent } from '../request-details/request-details.component';\r\nimport { AtxConsoleFooterComponent } from '../console-footer/console-footer.component';\r\nimport { AtxConsoleMenuComponent } from '../console-menu/console-menu.component';\r\nimport { AtxRequestListRendererComponent } from '../renderer/request-list-renderer/request-list-renderer.component';\r\nimport { AtxMonitoringConsoleState } from '../../model/service/atx-monitoring-console.state';\r\nimport { AtxLogIoService } from '../../model/service/atx-log-io.service';\r\nimport { AtxMonitoringConsoleController } from '../../model/service/atx-monitoring-console.controller';\r\nimport { AtxUserActionService } from '../../model/service/atx-user-action.service';\r\n\r\n/**\r\n * @private\r\n * The main component used to layout the ATX monitoring console.\r\n */\r\n@Component({\r\n selector: 'atx-http-monitoring-console',\r\n imports: [\r\n AtxRequestDetailsComponent,\r\n AtxConsoleFooterComponent,\r\n AtxConsoleMenuComponent,\r\n AtxRequestListRendererComponent\r\n ],\r\n templateUrl: './http-monitoring-console.component.html',\r\n styleUrl: './http-monitoring-console.component.scss',\r\n providers: [\r\n AtxMonitoringConsoleState,\r\n AtxLogIoService,\r\n AtxMonitoringConsoleController,\r\n AtxUserActionService\r\n ],\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class AtxMonitoringConsoleComponent {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected state: AtxMonitoringConsoleState,\r\n //--> Conponent scope services:\r\n private _ctrl: AtxMonitoringConsoleController,\r\n private _io: AtxLogIoService,\r\n private _input: AtxUserActionService) {}\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n\r\n<atx-console-menu/>\r\n<div id=\"log-list-vieport\">\r\n <div class=\"request-list-wrapper\" [class.reduced-request-list]=\"state.selectedLog\">\r\n <atx-request-list-renderer />\r\n </div>\r\n @if (state.selectedLog) {\r\n <div id=\"selected-log-viewport\">\r\n <atx-monitoring-console-details [log]=\"state.selectedLog\"/>\r\n </div>\r\n }\r\n</div>\r\n<atx-console-footer/>\r\n\r\n<svg id=\"icon-collection\">\r\n <symbol id=\"json-icon\" viewBox=\"0 0 16 16\">\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n <path d=\"M8.646 6.646a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L10.293 9 8.646 7.354a.5.5 0 0 1 0-.708m-1.292 0a.5.5 0 0 0-.708 0l-2 2a.5.5 0 0 0 0 .708l2 2a.5.5 0 0 0 .708-.708L5.707 9l1.647-1.646a.5.5 0 0 0 0-.708\"/>\r\n </symbol>\r\n <symbol id=\"bin-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M5.526 13.09c.976 0 1.524-.79 1.524-2.205 0-1.412-.548-2.203-1.524-2.203-.978 0-1.526.79-1.526 2.203 0 1.415.548 2.206 1.526 2.206zm-.832-2.205c0-1.05.29-1.612.832-1.612.358 0 .607.247.733.721L4.7 11.137a7 7 0 0 1-.006-.252m.832 1.614c-.36 0-.606-.246-.732-.718l1.556-1.145q.005.12.005.249c0 1.052-.29 1.614-.829 1.614m5.329.501v-.595H9.73V8.772h-.69l-1.19.786v.688L8.986 9.5h.05v2.906h-1.18V13h3z\"/>\r\n <path d=\"M4 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1\"/>\r\n </symbol>\r\n <symbol id=\"text-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M10.943 6H5.057L5 8h.5c.18-1.096.356-1.192 1.694-1.235l.293-.01v5.09c0 .47-.1.582-.898.655v.5H9.41v-.5c-.803-.073-.903-.184-.903-.654V6.755l.298.01c1.338.043 1.514.14 1.694 1.235h.5l-.057-2z\"/>\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n </symbol>\r\n <symbol id=\"empty-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\r\n </symbol>\r\n <symbol id=\"blob-icon\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n <path d=\"M8.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\"/>\r\n <path d=\"M12 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2M3 2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v8l-2.083-2.083a.5.5 0 0 0-.76.063L8 11 5.835 9.7a.5.5 0 0 0-.611.076L3 12z\"/>\r\n </symbol>\r\n</svg>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { AtxMonitoringConsoleComponent } from \"../../../../../framework/mock/http-monitoring-console\";\r\nimport { Uuid } from \"../../../../../util\";\r\nimport { WindowService } from \"../../../ui\";\r\nimport { WindowFeatureState, WindowInit, WindowRef } from \"../../../../business\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst NO: WindowFeatureState = WindowFeatureState.NO;\r\n\r\n/**\r\n * @private\r\n */\r\nexport const FEATURES: WindowInit = {\r\n left: 100,\r\n top: 100,\r\n width: 800,\r\n height: 450,\r\n directories: NO,\r\n titlebar: NO,\r\n scrollbars: NO,\r\n toolbar: NO,\r\n location: NO,\r\n status: NO,\r\n menubar: NO,\r\n title: \"HTTP Mocking Framework Console\",\r\n icon: \"data:image/png;base64,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\"\r\n};\r\n\r\n/**\r\n * Provides functionality to display the ATX monitoring console within a new window.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AtxHttpMockConsoleService implements OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n private _uuid: Uuid | null = null;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _windowSrv: WindowService) {}\r\n\r\n /**\r\n * Opens the ATX monitoring console within a new window and returns reference objects\r\n * to control it.\r\n */\r\n public open(): void {\r\n if (this._uuid) return;\r\n this._uuid = this._windowSrv.open(AtxMonitoringConsoleComponent, FEATURES);\r\n }\r\n\r\n /**\r\n * Closes the ATX monitoring console currently opened within a popup window.\r\n */\r\n public close(): void {\r\n if (!this._uuid) return;\r\n this._windowSrv.close(this._uuid);\r\n this._uuid = null;\r\n }\r\n\r\n /**\r\n * Returns reference to the opened popup window.\r\n * \r\n * @returns A `WindowRef` object, or undefined if the ATX monitoring console is not opened.\r\n */\r\n public getWindowRef(): WindowRef<AtxMonitoringConsoleComponent, Window> | undefined {\r\n if (!this._uuid) return undefined;\r\n return this._windowSrv.get(this._uuid);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.close();\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport { AbstractLogger } from \"../../../framework\";\r\nimport { ATX_LOGGER_CONFIG, LogConnector, LoggerConfig } from \"../../business\";\r\n\r\n/**\r\n * A convenient high-level singleton that implements the `Logger` interface.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoggerService extends AbstractLogger {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(@Inject(ATX_LOGGER_CONFIG) @Optional() config: LoggerConfig) {\r\n super();\r\n if (config) {\r\n const connector: LogConnector | undefined = config.logConnector;\r\n if (connector) this.setLogConnector(connector);\r\n }\r\n }\r\n}","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { IdentifiableComponent } from '../../core';\r\nimport { DropdownEvent, DropdownEventType, DropdownHorizontalPosition, DropdownState, DropdownVerticalPosition, PopoverState } from '../../model';\r\n\r\n/**\r\n * @private\r\n */\r\nconst API_MATCH: string = ':popover-open';\r\n\r\n/**\r\n * The ATX dropdown component allows to create popup containers that are displayed by clicking on a button.\r\n * The content of the container is defined by Developer.\r\n * This component is part of the LAF-less API.\r\n */\r\n@Component({\r\n selector: 'atx-dropdown',\r\n standalone: true,\r\n templateUrl: './dropdown.component.html',\r\n styleUrl: './dropdown.component.scss'\r\n})\r\nexport class DropdownComponent extends IdentifiableComponent {\r\n\r\n /**\r\n * An event fired on the dropdown component just after it is shown or hidden.\r\n */\r\n @Output()\r\n public readonly toggle: EventEmitter<DropdownEvent> = new EventEmitter();\r\n\r\n /**\r\n * An event fired on the dropdown component just before it is shown or hidden.\r\n */\r\n @Output()\r\n public readonly beforeToggle: EventEmitter<DropdownEvent> = new EventEmitter();\r\n\r\n /**\r\n * Sets the dropdown button CSS class.\r\n */\r\n @Input()\r\n public buttonClass!: string;\r\n\r\n /**\r\n * Sets the dropdown conpoment CSS class.\r\n */\r\n @Input()\r\n public containerClass!: string;\r\n\r\n /**\r\n * Sets the vertical position of the content container.\r\n */\r\n @Input()\r\n public vPos: DropdownVerticalPosition = \"bottom\";\r\n\r\n /**\r\n * Sets the horizontal position of the content container.\r\n */\r\n @Input()\r\n public hPos: DropdownHorizontalPosition = \"left\";\r\n \r\n /**\r\n * Indicates whether the content container can be \"light dismissed\" by selecting outside the popover area\r\n * (`auto`), or not (`manual`).\r\n */\r\n @Input()\r\n public popoverState: PopoverState = \"auto\";\r\n\r\n /**\r\n * The disabled property sets or returns whether a dropdown is disabled, or not.\r\n */\r\n @Input()\r\n public set disabled(value: boolean) {\r\n this._disabled = this._button.nativeElement.disabled = value;\r\n if (!value) return;\r\n this.hideContent();\r\n }\r\n public get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n protected id!: string;\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"popover\")\r\n private _popover!: ElementRef;\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"button\")\r\n private _button!: ElementRef;\r\n\r\n /**\r\n * @private\r\n */\r\n private _disabled: boolean = false;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor() {\r\n super();\r\n this.id = this.getID().toString();\r\n }\r\n\r\n /**\r\n * Hides the dropdown container.\r\n */\r\n public hideContent(): void {\r\n if (!this._popover) return;\r\n this._popover.nativeElement.hidePopover();\r\n }\r\n\r\n /**\r\n * Displays the dropdown container.\r\n */\r\n public showContent(): void {\r\n if (!this._popover || this._disabled) return;\r\n this._popover.nativeElement.showPopover();\r\n }\r\n\r\n /**\r\n * Returns the display state of the dropdown.\r\n * \r\n * @returns Returns `true` whether the dropdown is opened; `false` otherwise.\r\n */\r\n public isOpened(): boolean {\r\n if (!this._popover) return false;\r\n return this._popover.nativeElement.matches(API_MATCH);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected onBeforeToggle(event: Event): void {\r\n this.beforeToggle.emit(\r\n this.buildEvent(event as ToggleEvent, DropdownEventType.BEFORE_TOGGLE)\r\n );\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected onToggle(event: Event): void {\r\n this.toggle.emit(\r\n this.buildEvent(event as ToggleEvent, DropdownEventType.TOGGLE)\r\n );\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private buildEvent(event: ToggleEvent, type: DropdownEventType): DropdownEvent {\r\n return new DropdownEvent(this, type, event.newState as DropdownState, event.oldState as DropdownState);\r\n }\r\n}\r\n","<!--\r\n * LICENSE\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n-->\r\n \r\n<div class=\"atx-dropdown-container\" [class]=\"containerClass\">\r\n <button #button [class]=\"buttonClass\" [attr.popovertarget]=\"id\">\r\n <ng-content></ng-content>\r\n </button>\r\n <div #popover [attr.popover]=\"popoverState\" [attr.id]=\"id\" (toggle)=\"onToggle($event)\" (beforetoggle)=\"onBeforeToggle($event)\"></div>\r\n <div class=\"atx-dropdown-popover\"\r\n [class.atx-dropdown-v-start]=\"vPos === 'start'\"\r\n [class.atx-dropdown-top]=\"vPos === 'top'\"\r\n [class.atx-dropdown-middle]=\"vPos === 'middle'\"\r\n [class.atx-dropdown-bottom]=\"vPos === 'bottom'\"\r\n [class.atx-dropdown-v-end]=\"vPos === 'end'\"\r\n [class.atx-dropdown-h-start]=\"hPos === 'start'\"\r\n [class.atx-dropdown-left]=\"hPos === 'left'\"\r\n [class.atx-dropdown-center]=\"hPos === 'center'\"\r\n [class.atx-dropdown-right]=\"hPos === 'right'\"\r\n [class.atx-dropdown-h-end]=\"hPos === 'end'\"\r\n [class.atx-dropdown-centered]=\"hPos === 'center' && vPos === 'middle'\">\r\n <ng-content select=\"[content]\"></ng-content>\r\n </div>\r\n</div>\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Component, Input, HostBinding, ElementRef, EventEmitter } from '@angular/core';\r\nimport { LayoutConstraints, LayoutRegion } from '../../../model';\r\n\r\n/**\r\n * @private\r\n */\r\nconst PX: string = \"px\";\r\n\r\n/**\r\n * A container that defines the region of a `BorderLayout` component instance.\r\n */\r\n@Component({\r\n selector: 'atx-border-layout-container',\r\n templateUrl: './border-layout-container.component.html',\r\n styleUrls: ['./border-layout-container.component.scss'],\r\n standalone: true\r\n})\r\nexport class BorderLayoutContainer {\r\n\r\n /**\r\n * @private\r\n * Indicates to the parent `BorderLayout` instance that the user starts to resize this container.\r\n */\r\n public readonly resizeStart: EventEmitter<BorderLayoutContainer> = new EventEmitter(false);\r\n \r\n /**\r\n * @private\r\n */\r\n public selected: Boolean = false;\r\n\r\n /**\r\n * Gets the CSS class associated with the region constraint of the `BorderLayoutContainer` object.\r\n */\r\n @HostBinding('class')\r\n get class(): string {\r\n return this.region;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected region!: LayoutRegion;\r\n \r\n /**\r\n * @private\r\n */\r\n protected resizable: boolean = false;\r\n\r\n /**\r\n * @private\r\n */\r\n private atxConstraints!: LayoutConstraints;\r\n\r\n /**\r\n * @private\r\n */\r\n private size!: number;\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly style: CSSStyleDeclaration;\r\n\r\n /**\r\n * Gets or sets the constraints for this `BorderLayoutContainer` object.\r\n */\r\n public get constraints(): LayoutConstraints {\r\n return this.atxConstraints;\r\n }\r\n @Input()\r\n public set constraints(constraints: LayoutConstraints) {\r\n this.atxConstraints = constraints;\r\n this.region = constraints.region as LayoutRegion;\r\n if(constraints.resizable) this.initHandle();\r\n else this.resizable = false;\r\n this.setSize(constraints.size);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private elRef: ElementRef) {\r\n this.style = this.elRef.nativeElement.style;\r\n }\r\n\r\n /**\r\n * Sets the size of this container depending on the specified region.\r\n * \r\n * @param size The new size for this container, in pixels.\r\n */\r\n public setSize(size: number | undefined): void {\r\n const r: LayoutRegion = this.region;\r\n if (r === LayoutRegion.CENTER) return;\r\n if (r === LayoutRegion.NORTH || r === LayoutRegion.SOUTH) {\r\n this.size = size ? size : 50;\r\n this.style.height = this.size + PX;\r\n return;\r\n }\r\n if (r === LayoutRegion.EAST || r === LayoutRegion.WEST) {\r\n this.size = size ? size : 100;\r\n this.style.width = this.size + PX;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the size of the container, in pixels.\r\n * \r\n * @returns The size of the container.\r\n */\r\n public getSize(): number {\r\n return this.size;\r\n }\r\n\r\n /**\r\n * Sets the left-hand side position of this container.\r\n * \r\n * @param position The left-hand side position of this container, in pixels.\r\n */\r\n public setLeftPos(position: number): void {\r\n this.style.left = position + PX;\r\n }\r\n\r\n /**\r\n * Sets the right-hand side position of this container.\r\n * \r\n * @param position The right-hand side position of this container, in pixels.\r\n */\r\n public setRightPos(position: number): void {\r\n this.style.right = position + PX;\r\n }\r\n \r\n /**\r\n * Sets the top position of this container.\r\n * \r\n * @param position The top position of this container, in pixels.\r\n */\r\n public setTopPos(position: number): void {\r\n this.style.top = position + PX;\r\n }\r\n \r\n /**\r\n * Sets the bottom position of this container.\r\n * \r\n * @param position The bottom position of this container, in pixels.\r\n */\r\n public setBottomPos(position: number): void {\r\n this.style.bottom = position + PX;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n protected resizetart(): void {\r\n this.resizeStart.emit(this);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private initHandle(): void {\r\n if (this.region === LayoutRegion.CENTER) return;\r\n this.resizable = true;\r\n }\r\n}\r\n","<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<ng-content></ng-content>\n@if (resizable) {\n <div class=\"atx-handle\" [class.atx-handle-selected]=\"selected\" (mousedown)=\"resizetart()\"></div>\n}\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\nimport { BorderLayoutContainer } from '../../border-layout-container/border-layout-container.component';\nimport { Destroyable, LayoutRegion, } from '../../../../model';\nimport { ResizeMethod } from './resize-method';\n\n/**\n * @private\n * A utility class that computes the size of all border layout containers.\n */\nexport class BorderLayoutBoundsManager implements Destroyable {\n\n /**\n * @private\n * The container top position when the user starts to drag the handle.\n */\n private topPos: number = 0;\n\n /**\n * @private\n * The container left position when the user starts to drag the handle.\n */\n private leftPos: number = 0;\n\n /**\n * @private\n * The bounds of the center container.\n */\n private bounds: DOMRect = new DOMRect();\n\n /**\n * Makes this object elligible for garbage collection.\n */\n public destroy(): void {\n this.bounds = null as any;\n }\n\n /**\n * Returns a rectangle that represents the bounds currently computed by this object.\n * \n * @returns The bounds currently computed by this object.\n */\n public getBounds(): DOMRect {\n return this.bounds;\n }\n\n /**\n * Sets the top-left hand corner position before each bounds computaion.\n * \n * @param x The x position of the main container, in pixels, before computaion.\n * @param y The y position of the main container, in pixels, before computaion.\n */\n public setOrigin(x: number, y: number): void {\n this.leftPos = x;\n this.topPos = y;\n }\n\n /**\n * @private\n * For test purpose only.\n */\n public getOrigin(): any {\n return { x: this.leftPos, y: this.topPos };\n }\n\n /**\n * Computes the size of a \"north\" container.\n * \n * @param event The mouse event that triggered the computation of the container size.\n * @param width The width of the main container.\n * @param height The height of the main container.\n * @param minSize The minimum size of the container for which to compute the size.\n * @param maxSize The maximum size of the container for which to compute the size.\n * \n * @returns The size of a \"north\" container.\n */\n public northResize(event: MouseEvent, width: number, height: number, minSize: number | undefined, maxSize: number | undefined): number {\n const size: number = event.clientY - this.topPos;\n if (maxSize && size > maxSize) return this.setY(maxSize);\n if (minSize && size < minSize) return this.setY(minSize);\n return this.setY(size);\n }\n\n /**\n * @private\n */\n private setY(y: number): number {\n this.bounds.y = y;\n return y;\n }\n\n /**\n * Computes the size of a \"south\" container.\n * \n * @param event The mouse event that triggered the computation of the container size.\n * @param width The width of the main container.\n * @param height The height of the main container.\n * @param minSize The minimum size of the container for which to compute the size.\n * @param maxSize The maximum size of the container for which to compute the size.\n * \n * @returns The size of a \"south\" container.\n */\n public southResize(event: MouseEvent, width: number, height: number, minSize: number | undefined, maxSize: number | undefined): number {\n const size: number = height - (event.clientY - this.topPos);\n if (maxSize && size > maxSize) return this.setHeight(maxSize);\n if (minSize && size < minSize) return this.setHeight(minSize);\n return this.setHeight(size);\n }\n\n /**\n * @private\n */\n private setHeight(height: number): number {\n this.bounds.height = height;\n return height;\n }\n\n /**\n * Computes the size of a \"west\" container.\n * \n * @param event The mouse event that triggered the computation of the container size.\n * @param width The width of the main container.\n * @param height The height of the main container.\n * @param minSize The minimum size of the container for which to compute the size.\n * @param maxSize The maximum size of the container for which to compute the size.\n * \n * @returns The size of a \"west\" container.\n */\n public westResize(event: MouseEvent, width: number, height: number, minSize: number | undefined, maxSize: number | undefined): number {\n const size: number = event.clientX - this.leftPos;\n if (maxSize && size > maxSize) return this.setX(maxSize);\n if (minSize && size < minSize) return this.setX(minSize);\n return this.setX(size);\n }\n\n /**\n * @private\n */\n private setX(x: number): number {\n this.bounds.x = x;\n return x;\n }\n\n /**\n * Computes the size of a \"east\" container.\n * \n * @param event The mouse event that triggered the computation of the container size.\n * @param width The width of the main container.\n * @param height The height of the main container.\n * @param minSize The minimum size of the container for which to compute the size.\n * @param maxSize The maximum size of the container for which to compute the size.\n * \n * @returns The size of a \"east\" container.\n */\n public eastResize(event: MouseEvent, width: number, height: number, minSize: number | undefined, maxSize: number | undefined): number {\n const size: number = width - (event.clientX - this.leftPos);\n if (maxSize && size > maxSize) return this.setWidth(maxSize);\n if (minSize && size < minSize) return this.setWidth(minSize);\n return this.setWidth(size);\n }\n\n /**\n * @private\n */\n private setWidth(width: number): number {\n this.bounds.width = width;\n return width;\n }\n\n /**\n * Invoked after each `BorderLayoutContainer` registration to initialize the center container bounds.\n * \n * @param container A `BorderLayoutContainer` instance added to the main container. \n */\n public initBounds(container: BorderLayoutContainer): void {\n const r: LayoutRegion = container.constraints.region as LayoutRegion;\n if (r === LayoutRegion.NORTH) {\n this.bounds.y = container.getSize();\n return;\n }\n if (r === LayoutRegion.SOUTH) {\n this.bounds.height = container.getSize();\n return;\n }\n if (r === LayoutRegion.WEST) {\n this.bounds.x = container.getSize();\n return;\n }\n if (r === LayoutRegion.EAST) this.bounds.width = container.getSize();\n }\n \n /**\n * Returns the method used to compute the size of a container, depending on the specified region.\n * \n * @param region The region associated with the container for which to compute the size.\n * \n * @returns The method used to compute the size of a container.\n */\n public getResizeMethod(region: LayoutRegion): ResizeMethod {\n let method: ResizeMethod = this.southResize;\n switch (region) {\n case LayoutRegion.NORTH: method = this.northResize; break;\n case LayoutRegion.WEST: method = this.westResize; break;\n case LayoutRegion.EAST: method = this.eastResize; break;\n }\n return method.bind(this) as any;\n }\n}\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { EventEmitter, QueryList } from '@angular/core';\r\nimport { BorderLayoutContainer } from '../../border-layout-container/border-layout-container.component';\r\nimport { EMPTY_STRING } from '../../../../util';\r\nimport { Destroyable, LayoutConstraints, LayoutDragEvent, LayoutDragEventType, LayoutRegion, LayoutRegionType, SubscriptionService, LayoutRegionError } from '../../../../model';\r\nimport { IdentifiableComponent } from '../../../../core';\r\nimport { BorderLayoutBoundsManager } from './border-layout-bounds-manager';\r\nimport { ResizeMethod } from './resize-method';\r\n\r\n/**\r\n * @private\r\n */\r\nconst MOUSEMOVE: any = \"mousemove\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst MOUSEUP: any = \"mouseup\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst REGION_ERR_MSG: string = \"A container with the same identifier has already been registered: \";\r\n\r\n/**\r\n * @private\r\n */\r\nconst LAYOUT_ERR_MSG: string = \"No layout container has been registered.\";\r\n\r\n/**\r\n * @private\r\n * A controller object responsible for handling user actions on a `BorderLayout` container.\r\n */\r\nexport class BorderLayoutRenderer extends IdentifiableComponent implements Destroyable {\r\n\r\n /**\r\n * Emits events each time the user starts, or stops dragging handle.\r\n */\r\n public readonly userAction: EventEmitter<LayoutDragEvent> = new EventEmitter();\r\n\r\n /**\r\n * @private\r\n */\r\n private lytContainerElm!: HTMLDivElement;\r\n \r\n /**\r\n * @private\r\n */\r\n private containerList: BorderLayoutContainer[] = [];\r\n \r\n /**\r\n * @private\r\n */\r\n private boundsManager: BorderLayoutBoundsManager; \r\n\r\n /**\r\n * @private\r\n */\r\n private storedStopHandler: any = null;\r\n\r\n /**\r\n * @private\r\n */\r\n private storedMoveHandler: any = null;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private subscribeSvc: SubscriptionService,\r\n private document: Document) {\r\n super();\r\n this.boundsManager = new BorderLayoutBoundsManager();\r\n }\r\n\r\n /**\r\n * Add the list `BorderLayoutContainer` objects associated with the main container to this controller.\r\n * \r\n * @param containers the list `BorderLayoutContainer` objects associated with the main container.\r\n */\r\n public addContainers(containers: QueryList<BorderLayoutContainer>): void {\r\n let regionValidator: string = EMPTY_STRING;\r\n containers.forEach(container => {\r\n const constraints: LayoutConstraints = container.constraints;\r\n const r: string = constraints.region as string;\r\n if (regionValidator.indexOf(r) !== -1) throw new LayoutRegionError(REGION_ERR_MSG + r);\r\n regionValidator += r;\r\n this.subscribeSvc.register(this,\r\n container.resizeStart.subscribe(container=> this.resizeEnter(container))\r\n );\r\n this.boundsManager.initBounds(container);\r\n this.containerList.push(container);\r\n });\r\n };\r\n\r\n /**\r\n * Sets the reference to the HTML container associated with the main container.\r\n * \r\n * @param lytContainer The reference to the HTML container associated with the main container.\r\n */\r\n public setLayoutContainer(lytContainer: HTMLDivElement): void {\r\n this.lytContainerElm = lytContainer;\r\n };\r\n\r\n /**\r\n * @private\r\n * For test purpose only.\r\n * Returns the reference to the internal `BorderLayoutBoundsManager` instance.\r\n */\r\n public getBoundsManager(): BorderLayoutBoundsManager {\r\n return this.boundsManager; \r\n }\r\n \r\n /**\r\n * Changes the constraints of the region specified by the `LayoutConstraints.region` property.\r\n * \r\n * @param constraints The new constraints of the associated region.\r\n */\r\n public setConstraints(constraints: LayoutConstraints): void {\r\n const region: LayoutRegionType = constraints.region as LayoutRegionType;\r\n const container: BorderLayoutContainer | undefined = this.containerList.find((container: BorderLayoutContainer) => container.constraints.region === region);\r\n if (!container) throw new LayoutRegionError(`Invalid region: no container with the region '${region}' has been found.`);\r\n if (constraints.size === undefined) constraints.size = container.getSize();\r\n container.constraints = constraints;\r\n this.paint();\r\n }\r\n\r\n /**\r\n * Makes this object elligible for garbage collection.\r\n */\r\n public destroy(): void {\r\n if (this.storedStopHandler) {\r\n this.document.removeEventListener(MOUSEMOVE, this.storedMoveHandler);\r\n this.document.removeEventListener(MOUSEUP, this.storedStopHandler);\r\n this.deleteStoredHandlers();\r\n }\r\n this.subscribeSvc.clearAll(this);\r\n this.lytContainerElm = null as any;\r\n this.boundsManager.destroy();\r\n this.boundsManager = null as any;\r\n this.containerList.length = 0;\r\n this.containerList = null as any;\r\n }\r\n\r\n /**\r\n * Forces the layout of all `BorderLayoutContainer` objects associated with the main container.\r\n */\r\n public paint(): void {\r\n this.checkLytContainer();\r\n this.render(this.lytContainerElm.offsetWidth);\r\n }\r\n\r\n /**\r\n * Returns the `BorderLayoutContainer` component associated with the specified region.\r\n * \r\n * @param region The region for which to retreive the container.\r\n * \r\n * @returns The `BorderLayoutContainer` component associated with the specified region,\r\n * or `undefined` whether no container has been found.\r\n */\r\n public getBorderLayoutContainer(region: LayoutRegionType): BorderLayoutContainer | undefined {\r\n return this.containerList.find((c: BorderLayoutContainer)=> c.constraints.region === region);\r\n }\r\n\r\n /**\r\n * Resizes the specified region of the associated container.\r\n * \r\n * @param region The region to resize.\r\n * @param size The new size of the region to resize.\r\n * \r\n * @returns `true` whether the specified region has been resized; `false` otherwise.\r\n */\r\n public resizeRegion(region: LayoutRegion, size: number): boolean {\r\n if (region === LayoutRegion.CENTER) return false;\r\n const container: BorderLayoutContainer | undefined = this.getBorderLayoutContainer(region);\r\n if (!container) return false;\r\n container.setSize(size);\r\n this.boundsManager.initBounds(container);\r\n this.paint();\r\n return true;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private resizeEnter(container: BorderLayoutContainer): void {\r\n this.checkLytContainer();\r\n const lytNativeElm: HTMLDivElement = this.lytContainerElm;\r\n const width: number = lytNativeElm.offsetWidth;\r\n const height: number = lytNativeElm.offsetHeight;\r\n const bounds: DOMRect = lytNativeElm.getBoundingClientRect();\r\n const constraints: LayoutConstraints = container.constraints;\r\n const region: LayoutRegion = constraints.region as LayoutRegion;\r\n const minSize: number | undefined = constraints.minSize;\r\n const maxSize: number | undefined = constraints.maxSize;\r\n const doc: Document = this.document;\r\n let size: number = 0;\r\n this.boundsManager.setOrigin(bounds.x, bounds.y);\r\n let resizeMethod: ResizeMethod = this.boundsManager.getResizeMethod(region);\r\n container.selected = true;\r\n const onMoveHandler = (event: MouseEvent)=> {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n size = resizeMethod(event, width, height, minSize, maxSize);\r\n container.setSize(size);\r\n this.render(width);\r\n this.fireEvent(container, LayoutDragEventType.DRAGGING);\r\n };\r\n const onStopHandler = (event: MouseEvent)=> {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n doc.removeEventListener(MOUSEMOVE, onMoveHandler);\r\n doc.removeEventListener(MOUSEUP, onStopHandler);\r\n this.deleteStoredHandlers();\r\n container.selected = false;\r\n size = resizeMethod(event, width, height, minSize, maxSize);\r\n container.setSize(size);\r\n this.render(width);\r\n this.fireEvent(container, LayoutDragEventType.DRAG_STOP);\r\n };\r\n this.storedMoveHandler = onMoveHandler;\r\n this.storedStopHandler = onStopHandler;\r\n this.fireEvent(container, LayoutDragEventType.DRAG_START);\r\n doc.addEventListener(MOUSEMOVE, onMoveHandler);\r\n doc.addEventListener(MOUSEUP, onStopHandler);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private fireEvent(target: BorderLayoutContainer, type: LayoutDragEventType): void {\r\n const evt: LayoutDragEvent = new LayoutDragEvent(target, type);\r\n this.userAction.emit(evt);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private render(width: number): void {\r\n const bounds: DOMRect = this.boundsManager.getBounds();\r\n const top: number = bounds.top;\r\n const bottom: number = bounds.bottom;\r\n const left: number = bounds.left;\r\n const right: number = bounds.right;\r\n const cList: BorderLayoutContainer[] = this.containerList;\r\n let cursor: number = cList.length - 1;\r\n while(cursor >= 0) {\r\n const cont: BorderLayoutContainer = cList[cursor];\r\n const r: LayoutRegion = cont.constraints.region as LayoutRegion;\r\n cursor--;\r\n if (r === LayoutRegion.NORTH || r === LayoutRegion.SOUTH) continue;\r\n if (r === LayoutRegion.WEST) {\r\n cont.setTopPos(top);\r\n cont.setRightPos(width - left);\r\n cont.setBottomPos(bottom - top);\r\n continue;\r\n }\r\n if (r === LayoutRegion.CENTER) {\r\n cont.setTopPos(top);\r\n cont.setLeftPos(left);\r\n cont.setRightPos(right - left);\r\n cont.setBottomPos(bottom - top);\r\n continue;\r\n }\r\n if (r === LayoutRegion.EAST) {\r\n cont.setTopPos(top);\r\n cont.setLeftPos(width - (right - left));\r\n cont.setBottomPos(bottom - top);\r\n continue;\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private checkLytContainer(): void {\r\n if (!this.lytContainerElm) throw new ReferenceError(LAYOUT_ERR_MSG);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n private deleteStoredHandlers(): void {\r\n this.storedMoveHandler = this.storedStopHandler = null;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be found in\r\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AfterViewInit, Component, ContentChildren, OnDestroy, ElementRef, ViewChild, HostListener, QueryList, EventEmitter, Output, Inject } from '@angular/core';\r\nimport { BorderLayoutContainer } from '../border-layout-container/border-layout-container.component';\r\nimport { LayoutConstraints, LayoutDragEvent, LayoutDragEventType, LayoutRegion, LayoutRegionType, SubscriptionService } from '../../../model';\r\nimport { BorderLayoutRenderer } from './util/border-layout-renderer';\r\nimport { IdentifiableComponent } from '../../../core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/**\r\n * A border layout lays out a container, arranging and resizing its components to fit in five regions: north, south, east, west, and center.\r\n * Each region is defined by a `BorderLayoutContainer` instance, and is identified by a corresponding constant: `NORTH`, `SOUTH`, `EAST`, `WEST`, and `CENTER`.\r\n * This component is part of the LAF-less API.\r\n */\r\n@Component({\r\n selector: 'atx-border-layout',\r\n templateUrl: './border-layout.component.html',\r\n styleUrls: ['./border-layout.component.scss'],\r\n standalone: true\r\n})\r\nexport class BorderLayout extends IdentifiableComponent implements AfterViewInit, OnDestroy {\r\n\r\n /**\r\n * Emits events each time the user starts dragging a region handle.\r\n */\r\n @Output()\r\n public readonly dragStart: EventEmitter<LayoutDragEvent> = new EventEmitter();\r\n\r\n /**\r\n * Emits events each time the user stops dragging a region handle.\r\n */\r\n @Output()\r\n public readonly dragStop: EventEmitter<LayoutDragEvent> = new EventEmitter();\r\n\r\n /**\r\n * Emits events each time the user is dragging a region handle.\r\n */\r\n @Output()\r\n public readonly dragging: EventEmitter<LayoutDragEvent> = new EventEmitter();\r\n \r\n /**\r\n * @private\r\n */\r\n @HostListener(\"window:resize\")\r\n private onResize(): void {\r\n this.paint();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n @ViewChild(\"atxLayoutContainer\")\r\n private layoutContainer!: ElementRef<HTMLDivElement>;\r\n\r\n /**\r\n * @private\r\n */\r\n private renderer: BorderLayoutRenderer;\r\n\r\n /**\r\n * @private\r\n */\r\n @ContentChildren(BorderLayoutContainer)\r\n private set __containers__(containers: QueryList<BorderLayoutContainer>) {\r\n this.renderer.addContainers(containers);\r\n };\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private subscribeSvc: SubscriptionService,\r\n @Inject(DOCUMENT) document: Document) {\r\n super();\r\n this.renderer = new BorderLayoutRenderer(subscribeSvc, document);\r\n subscribeSvc.register(this,\r\n this.renderer.userAction.subscribe((event: LayoutDragEvent)=> {\r\n event.layout = this;\r\n if (event.type === LayoutDragEventType.DRAGGING) {\r\n this.dragging.emit(event);\r\n return;\r\n }\r\n if (event.type === LayoutDragEventType.DRAG_START) {\r\n this.dragStart.emit(event);\r\n return;\r\n }\r\n this.dragStop.emit(event);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * @private\r\n * For test purpose only.\r\n */\r\n public getRenderer(): BorderLayoutRenderer {\r\n return this.renderer;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this.subscribeSvc.clearAll(this);\r\n this.renderer.destroy();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngAfterViewInit(): void {\r\n this.renderer.setLayoutContainer(this.layoutContainer.nativeElement);\r\n this.paint();\r\n }\r\n\r\n /**\r\n * Forces the container to be redrawn.\r\n */\r\n public paint(): void {\r\n this.renderer.paint();\r\n }\r\n\r\n /**\r\n * Resizes the specified region.\r\n * \r\n * @param region The region to resize.\r\n * @param size The new size of the region to resize.\r\n * \r\n * @returns `true` whether the specified region has been resized; `false` otherwise.\r\n */\r\n public resizeRegion(region: LayoutRegion | LayoutRegionType, size: number): void {\r\n this.renderer.resizeRegion(region as LayoutRegion, size);\r\n }\r\n \r\n /**\r\n * Changes the constraints of the region specified by the `LayoutConstraints.region` property.\r\n * \r\n * @param constraints The new constraints of the associated region.\r\n */\r\n public setConstraints(constraints: LayoutConstraints): void {\r\n this.renderer.setConstraints(constraints);\r\n }\r\n \r\n /**\r\n * Returns the `BorderLayoutContainer` component associated with the specified region.\r\n * \r\n * @param region The region for which to retreive the container.\r\n * \r\n * @returns The `BorderLayoutContainer` component associated with the specified region,\r\n * or `undefined` whether no container has been found.\r\n */\r\n public getBorderLayoutContainer(region: LayoutRegionType): BorderLayoutContainer | undefined {\r\n return this.renderer.getBorderLayoutContainer(region);\r\n }\r\n\r\n}\r\n","<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<div #atxLayoutContainer class=\"atx-border-layout\">\n <ng-content></ng-content>\n</div>","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nexport * from './angular-toolbox-logo/angular-toolbox-logo.component';\r\nexport * from './dropdown/dropdown.component';\r\nexport * from './layout';\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { ElementRef } from '@angular/core';\r\n\r\n/**\r\n * @private\r\n * The base class for all directives that are responsible for navigation whithin ab Angular app.\r\n */\r\nexport class NavigationDirectiveBase {\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(protected elmRef: ElementRef, role: string) {\r\n const elm: HTMLElement = elmRef.nativeElement;\r\n elm.role = role;\r\n elm.tabIndex = 0;\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { AfterViewInit, Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { BUTTON_ROLE } from '../util';\r\nimport { NavigationDirectiveBase } from './navigation-directive-base';\r\n\r\n/**\r\n * @private\r\n */\r\nconst ENTER_KEY: string = 'Enter';\r\n\r\n/**\r\n * @private\r\n */\r\nconst ROUTER_LINK_REF: string = 'ng-reflect-router-link';\r\n\r\n/**\r\n * An easy-to-use directive that enables keyboard navigation and provides support for keyboard \"Enter\" key events.\r\n */\r\n@Directive({\r\n selector: '[buttonRole]',\r\n providers: [\r\n RouterModule\r\n ],\r\n standalone: true\r\n})\r\nexport class ButtonRoleDirective<T> extends NavigationDirectiveBase implements AfterViewInit {\r\n\r\n /**\r\n * Dispatches events when the user presses the \"Enter\" key.\r\n */\r\n @Output()\r\n public readonly enter: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n /**\r\n * Forces callback methods defined with the \"enter\" event listener to be invoked when user clicks on the \r\n * decorated element.\r\n */\r\n @Input()\r\n public delegateClick: any;\r\n\r\n /**\r\n * @private\r\n */\r\n @HostListener('keyup', [\"$event\", \"$event.target.value\"])\r\n private onKeyup(event: KeyboardEvent, value: T): void {\r\n if (event.key !== ENTER_KEY) return;\r\n this.processEvent(event, value);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n @HostListener('click', [\"$event\", \"$event.target.value\"])\r\n private onClick(event: MouseEvent, value: T): void {\r\n if (this.delegateClick === undefined) return;\r\n this.processEvent(event, value);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private _routerLinkRef: string | null = null;\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(elmRef: ElementRef,\r\n private _router: Router) {\r\n super(elmRef, BUTTON_ROLE);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngAfterViewInit(): void {\r\n const elm: HTMLElement = this.elmRef.nativeElement;\r\n this._routerLinkRef = elm.getAttribute(ROUTER_LINK_REF);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n private processEvent(event: Event, value: T): void {\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n if (this._routerLinkRef) {\r\n this._router.navigate([this._routerLinkRef]);\r\n return;\r\n }\r\n this.elmRef.nativeElement.blur();\r\n this.enter.emit(value);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Directive, ElementRef, HostListener, Inject, Input } from '@angular/core';\r\nimport { LINK_ROLE } from '../util';\r\nimport { NavigationDirectiveBase } from './navigation-directive-base';\r\n\r\n/**\r\n * An easy-to-use directive that enables keyboard navigation and provides support for navigating to an external URL.\r\n */\r\n@Directive({\r\n selector: '[navigateToUrl]',\r\n standalone: true\r\n})\r\nexport class NavigateToUrlDirective extends NavigationDirectiveBase {\r\n\r\n /**\r\n * The `href` attribute of the decorated element.\r\n */\r\n @Input()\r\n public href!: string;\r\n \r\n /**\r\n * @private\r\n */\r\n @HostListener('click')\r\n private onClick(): void {\r\n const HREF: string | undefined = this.href;\r\n if (!HREF) throw new ReferenceError(\"href attribute is not defined.\");\r\n this._document.defaultView.location.href = HREF;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(@Inject(DOCUMENT) private _document: any,\r\n elmRef: ElementRef) {\r\n super(elmRef, LINK_ROLE);\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input } from '@angular/core';\r\nimport { LINK_ROLE } from '../util';\r\nimport { DEFAULT_SCROLL_BEHAVIOR } from '../util/default-scroll-behavior';\r\nimport { Router } from '@angular/router';\r\nimport { NavigationDirectiveBase } from './navigation-directive-base';\r\n\r\n/**\r\n * Provides functionality to activate anchor navigation through the native Angular router.\r\n */\r\n@Directive({\r\n selector: '[anchorLink]',\r\n standalone: true,\r\n})\r\nexport class AnchorLinklDirective extends NavigationDirectiveBase implements AfterViewInit {\r\n\r\n /**\r\n * The `href` attribute of the decorated element.\r\n */\r\n @Input()\r\n public href!: string;\r\n \r\n /**\r\n * @private\r\n */\r\n @HostListener('click', ['$event'])\r\n private onClick(event: MouseEvent): void {\r\n event.preventDefault();\r\n const HREF: string | undefined = this.href;\r\n this._router.navigate([], { fragment: HREF.slice(1)});\r\n (this._document.querySelector(HREF) as HTMLElement).scrollIntoView(DEFAULT_SCROLL_BEHAVIOR);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(@Inject(DOCUMENT) private _document: any,\r\n elmRef: ElementRef,\r\n private _router: Router) {\r\n super(elmRef, LINK_ROLE);\r\n }\r\n \r\n /**\r\n * @private\r\n */\r\n public ngAfterViewInit(): void {\r\n const HREF: string | undefined = this.href;\r\n if (!HREF) throw new ReferenceError(\"href attribute is not defined.\");\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Pascal ECHEMANN. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\r\n */\r\n\r\nimport { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\n\r\n/**\r\n * @private\r\n */\r\nconst CHILD_LIST_TYPE: string = \"childList\";\r\n\r\n/**\r\n * Allows injection of any value into an HTML element container (`div`, `button`, etc...).\r\n * A rendered event is emitted after the injected content has been rendered and is\r\n * available for DOM manipulation.\r\n */\r\n@Directive({\r\n selector: '[contentRenderer]',\r\n standalone: true\r\n})\r\nexport class ContentRendererDirective implements OnInit, OnDestroy {\r\n\r\n /**\r\n * @private\r\n */\r\n private readonly _observer: MutationObserver;\r\n\r\n /**\r\n * Dispatches events when the content of the HTML element has been rendered.\r\n */\r\n @Output()\r\n public readonly rendered: EventEmitter<HTMLElement> = new EventEmitter<HTMLElement>();\r\n\r\n /**\r\n * @private\r\n */\r\n constructor(private _elmRef: ElementRef) {\r\n const nativeElement: HTMLElement = this._elmRef.nativeElement;\r\n this._observer = new MutationObserver((mutations: MutationRecord[]) => {\r\n mutations.forEach((mutation: MutationRecord) => {\r\n if (mutation.type === CHILD_LIST_TYPE) this.rendered.emit(nativeElement);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnDestroy(): void {\r\n this._observer.disconnect();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n public ngOnInit(): void {\r\n this._observer.observe(\r\n this._elmRef.nativeElement,\r\n { attributes: false, childList: true, characterData: false }\r\n );\r\n }\r\n}\r\n","/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n\n/*\n * Public API Surface of angular-toolbox\n */\n\nexport * from './lib/angular-toolbox.module';\nexport * from './lib/collection';\nexport * from './lib/component';\nexport * from './lib/core';\nexport * from './lib/directive';\nexport * from './lib/framework';\nexport * from './lib/model';\nexport * from './lib/pipe';\nexport * from './lib/util';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["NAME","i1","i1.AtxUserActionService","i1.AtxMonitoringConsoleState","i2.AtxUserActionService","this","i1.DialogService","i1.HttpMockLoggingService","i2.AtxMonitoringConsoleState","i3.AtxLogIoService","i1.SubscriptionService","i4.AtxUserActionService","i2.AtxMonitoringConsoleController","i1.WindowService"],"mappings":"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"}